breaking change !

update(database): change database ORM

todo: update Admin, Poll and User cogs
This commit is contained in:
Romain J 2020-01-15 22:56:54 +01:00
commit be1e6d24e4
16 changed files with 111 additions and 149 deletions

View file

@ -1,5 +1,3 @@
from .models import *
from utils.functions.config import *
from utils.functions.lang import *
from utils.functions.version import *

View file

@ -0,0 +1,6 @@
from .config import Config
from .database import Database
from .extra import *
from .lang import Texts
from .paginator import *
from .version import Version

View file

@ -1,7 +1,7 @@
from .config import Config
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, session
import sqlalchemy
import databases
class Database:
@ -10,8 +10,7 @@ class Database:
postgresql = 'postgresql://{}:{}@{}/{}'.format(
conf_postgresql.get("Username"), conf_postgresql.get("Password"),
conf_postgresql.get("Host"), conf_postgresql.get("DBName"))
self.engine = create_engine(postgresql, echo=False)
Session = sessionmaker()
Session.configure(bind=self.engine)
self.session: session = Session()
self.database = databases.Database(postgresql)
self.metadata = sqlalchemy.MetaData()
self.engine = sqlalchemy.create_engine(str(self.database.url))

View file

@ -1,5 +1,5 @@
from discord.ext import commands
from utils import Config
from utils.functions import Config
class CommandsPlus(commands.Command):

View file

@ -1,8 +1,6 @@
import gettext
from .config import Config
from .database import Database
import json
from utils.models.lang import LangModel
from discord.ext import commands
@ -22,17 +20,10 @@ class Texts:
@staticmethod
def get_locale(ctx):
database = Database(Config("./configs/config.cfg"))
with open('./configs/langs.json') as f:
data = json.load(f)
if ctx is not None:
current = database.session\
.query(LangModel.value)\
.filter(LangModel.key == str(ctx.guild.id))
if current.count() > 0:
return current.one()[0]
default = database.session\
.query(LangModel.value)\
.filter(LangModel.key == 'default')\
.one()[0]
return default
return data.get(str(ctx.guild.id), data['default'])
else:
return data['default']

View file

@ -1,7 +1,15 @@
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
import databases
import sqlalchemy
from utils.functions import Config
conf_postgresql = Config('./configs/config.cfg')["postgresql"]
postgresql = 'postgresql://{}:{}@{}/{}'.format(
conf_postgresql.get("Username"), conf_postgresql.get("Password"),
conf_postgresql.get("Host"), conf_postgresql.get("DBName"))
database = databases.Database(postgresql)
metadata = sqlalchemy.MetaData()
from .lang import LangModel
from .warn import WarnModel
from .poll import PollModel, ResponsesModel
from .alias import AliasesModel

View file

@ -1,28 +1,14 @@
from sqlalchemy import Column, String, BigInteger, Integer
from . import Base
import orm
from . import database, metadata
class AliasesModel(Base):
class AliasesModel(orm.Model):
__tablename__ = 'aliases'
__database__ = database
__metadata__ = metadata
id = Column(Integer, primary_key=True)
user_id = Column(BigInteger)
alias = Column(String)
command = Column(String)
guild = Column(String)
def __repr__(self):
return "<AliasesModel(" \
"id='%s', " \
"user_id='%s', " \
"alias='%s', " \
"command='%s', " \
"guild='%s', " \
")>" % (
self.id,
self.user_id,
self.alias,
self.command,
self.guild
)
id = orm.Integer(primary_key=True)
user_id = orm.String(max_length=18)
alias = orm.String(max_length=255)
command = orm.String(max_length=255)
guild = orm.String(max_length=255)

View file

@ -1,12 +0,0 @@
from . import Base
from sqlalchemy import Column, String
class LangModel(Base):
__tablename__ = 'langs'
key = Column(String, primary_key=True)
value = Column(String)
def __repr__(self):
return "<LangModel(key='%s', locale='%s')>" % (self.key, self.value)

View file

@ -1,27 +1,29 @@
from . import Base
from sqlalchemy import Column, Integer, BigInteger, JSON, ForeignKey, Boolean
from sqlalchemy.orm import relationship
import orm
from . import database, metadata
class PollModel(Base):
__tablename__ = 'polls'
id = Column(Integer, primary_key=True, autoincrement=True)
channel_id = Column(BigInteger)
message_id = Column(BigInteger)
content = Column(JSON)
is_anonymous = Column(Boolean)
available_choices = Column(Integer)
choice = relationship("ResponsesModel")
class ResponsesModel(Base):
class ResponsesModel(orm.Model):
__tablename__ = 'responses'
__database__ = database
__metadata__ = metadata
id = Column(Integer, primary_key=True, autoincrement=True)
user = Column(BigInteger)
id = orm.Integer(primary_key=True)
user = orm.String(max_length=18)
poll_id = Column(Integer, ForeignKey('polls.id'))
choice = Column(Integer)
choice = orm.Integer()
class PollModel(orm.Model):
__tablename__ = 'polls'
__database__ = database
__metadata__ = metadata
id = orm.Integer(primary_key=True)
channel_id = orm.String(max_length=18)
message_id = orm.String(max_length=18)
content = orm.JSON()
is_anonymous = orm.Boolean()
available_choices = orm.Integer()
choice = orm.ForeignKey(ResponsesModel)

View file

@ -1,19 +1,14 @@
import datetime
from . import Base
from sqlalchemy import Column, Integer, String, BIGINT, TIMESTAMP
import orm
from . import database, metadata
class WarnModel(Base):
class WarnModel(orm.Model):
__tablename__ = 'warns'
__database__ = database
__metadata__ = metadata
id = Column(Integer, primary_key=True)
server_id = Column(BIGINT)
user_id = Column(BIGINT)
reason = Column(String)
created_at = Column(TIMESTAMP, default=datetime.datetime.now())
def __repr__(self):
return "<WarnModel(server_id='%s', user_id='%s', reason='%s', " \
"created_at='%s')>" \
% (self.server_id, self.user_id, self.reason, self.created_at)
id = orm.Integer(primary_key=True)
server_id = orm.String(max_length=18)
user_id = orm.String(max_length=18)
reason = orm.String(max_length=255)
created_at = orm.DateTime()