diff --git a/truthinquiry/__init__.py b/truthinquiry/__init__.py index 313107f..7bded68 100644 --- a/truthinquiry/__init__.py +++ b/truthinquiry/__init__.py @@ -5,6 +5,10 @@ from flask_socketio import SocketIO from truthinquiry import discord_bot +from sqlalchemy import engine as eg + +from flask_sqlalchemy import SQLAlchemy + class TruthInquiryApp(flask.Flask): """ @@ -23,6 +27,8 @@ class TruthInquiryApp(flask.Flask): self.config["SECRET_KEY"] = os.getenv("FLASK_SECRET") + self.setupdb() + self.socketio_app = SocketIO( self, cors_allowed_origins=(os.getenv("ORIGIN"), "http://127.0.0.1:5000", "http://localhost:5000") @@ -34,6 +40,22 @@ class TruthInquiryApp(flask.Flask): self.discord_bot.start(token) else: print("No token set. Not starting discord bot") + + def setupdb(self): + db_url = eg.URL.create( + "mariadb+pymysql", + username=os.getenv("DB_USER"), + password=os.getenv("DB_PASSWORD"), + host=os.getenv("DB_HOST"), + port=os.getenv("DB_PORT"), + database=os.getenv("DB_DBNAME") + ) + + self.config["SQLALCHEMY_DATABASE_URI"] = db_url + + self.db = SQLAlchemy(self) + + APP = TruthInquiryApp() diff --git a/truthinquiry/logic/data_persistance/data_access.py b/truthinquiry/logic/data_persistance/data_access.py index 3c07a7c..68c3286 100644 --- a/truthinquiry/logic/data_persistance/data_access.py +++ b/truthinquiry/logic/data_persistance/data_access.py @@ -2,21 +2,8 @@ import os import random import truthinquiry.logic.data_persistance.tables as tables -from sqlalchemy import create_engine -from sqlalchemy.orm import Session -from sqlalchemy import engine as eg - -url_object = eg.URL.create( - "mariadb+pymysql", - username=os.getenv("DB_USER"), - password=os.getenv("DB_PASSWORD"), - host=os.getenv("DB_HOST"), - port=os.getenv("DB_PORT"), - database=os.getenv("DB_DBNAME"), -) -engine = create_engine(url_object, pool_pre_ping=True, pool_recycle=300) -session = Session(engine) - +from truthinquiry import APP +db = APP.db def get_text_from_lid(lang: str, lid: int) -> str: """ @@ -26,7 +13,7 @@ def get_text_from_lid(lang: str, lid: int) -> str: :param lid: the locale id the get the text from :return: the text associated to the lang and lid """ - return session.query(tables.Locale).filter_by(LANG=lang, TEXT_ID=lid).one().TEXT + return db.session.query(tables.Locale).filter_by(LANG=lang, TEXT_ID=lid).one().TEXT def get_random_place() -> tables.Place: """ @@ -34,7 +21,7 @@ def get_random_place() -> tables.Place: :return: a Place object """ - return random.choice(session.query(tables.Place).all()) + return random.choice(db.session.query(tables.Place).all()) def get_random_npc() -> tables.Npc : """ @@ -42,7 +29,7 @@ def get_random_npc() -> tables.Npc : :return: a Npc object """ - return random.choice(session.query(tables.Npc).all()) + return random.choice(db.session.query(tables.Npc).all()) def get_npc_random_trait_id(npc_id: int) -> int: """ @@ -51,7 +38,7 @@ def get_npc_random_trait_id(npc_id: int) -> int: :param npc_id: the npc to get the reaction from :return: a reaction identified by it's trait id """ - reactions = session.query(tables.Reaction).filter_by(NPC_ID=npc_id.NPC_ID).all() + reactions = db.session.query(tables.Reaction).filter_by(NPC_ID=npc_id.NPC_ID).all() reaction = random.choice(reactions) return reaction.TRAIT_ID @@ -63,7 +50,7 @@ def get_npc_random_answer(npc_id:int, qa_type:int) -> tables.Answer : :param qa_type: the type of the question :return: an Answer object """ - answers = session.query(tables.Answer).filter_by(QA_TYPE=qa_type,NPC_ID=npc_id.NPC_ID).all() + answers = db.session.query(tables.Answer).filter_by(QA_TYPE=qa_type,NPC_ID=npc_id.NPC_ID).all() return random.choice(answers) def get_random_question(qa_type: int) -> tables.Question : @@ -73,7 +60,7 @@ def get_random_question(qa_type: int) -> tables.Question : :param qa_type: the type of the question :return: a Question object """ - answers = session.query(tables.Question).filter_by(QUESTION_TYPE=qa_type).all() + answers = db.session.query(tables.Question).filter_by(QUESTION_TYPE=qa_type).all() return random.choice(answers) def get_trait_from_text(text: str) -> int: @@ -83,8 +70,8 @@ def get_trait_from_text(text: str) -> int: :param text: the text representation of the trait in any lang :return: the trait_id linked to this text """ - trait_lid = session.query(tables.Locale).filter_by(TEXT=text).one().TEXT_ID - return session.query(tables.Trait).filter_by(NAME_LID=trait_lid).one().TRAIT_ID + trait_lid = db.session.query(tables.Locale).filter_by(TEXT=text).one().TEXT_ID + return db.session.query(tables.Trait).filter_by(NAME_LID=trait_lid).one().TRAIT_ID def get_trait_from_trait_id(trait_id: int) -> tables.Trait: """ @@ -93,7 +80,7 @@ def get_trait_from_trait_id(trait_id: int) -> tables.Trait: :param trait_id: the id of the trait to search for :return: a Trait object """ - trait = session.query(tables.Trait).filter_by(TRAIT_ID=trait_id).one() + trait = db.session.query(tables.Trait).filter_by(TRAIT_ID=trait_id).one() return trait def get_reaction_description(lang,npc_id,trait_id) -> str: @@ -105,7 +92,7 @@ def get_reaction_description(lang,npc_id,trait_id) -> str: :trait_id: the trait associated to the reaction to get the description from :return: the description in the given language """ - desc_lid = session.query(tables.Reaction).filter_by(NPC_ID=npc_id,TRAIT_ID=trait_id).one().DESC_LID + desc_lid = db.session.query(tables.Reaction).filter_by(NPC_ID=npc_id,TRAIT_ID=trait_id).one().DESC_LID return get_text_from_lid(lang,desc_lid) def get_traits(lang: str) -> list: @@ -116,6 +103,6 @@ def get_traits(lang: str) -> list: :return: a list of string reprensentation of the reactions traits """ traits = [] - for trait in session.query(tables.Trait).all(): + for trait in db.session.query(tables.Trait).all(): traits.append(get_text_from_lid(lang,trait.NAME_LID)) return traits diff --git a/truthinquiry/logic/data_persistance/remote.py b/truthinquiry/logic/data_persistance/remote.py deleted file mode 100644 index deb2555..0000000 --- a/truthinquiry/logic/data_persistance/remote.py +++ /dev/null @@ -1,72 +0,0 @@ -import os - -from sqlalchemy import create_engine -from sqlalchemy.orm import Session -from sqlalchemy import engine as eg - -from tables import * - -from data.answer import ANSWERS -from data.locales import LOCALES -from data.npc import NPCS -from data.places import PLACES -from data.questions import QUESTIONS -from data.reactions import REACTIONS -from data.traits import TRAITS - -url_object = eg.URL.create( - "mariadb+pymysql", - username=os.getenv("DB_USER"), - password=os.getenv("DB_PASSWORD"), - host=os.getenv("DB_HOST"), - port=os.getenv("DB_PORT"), - database=os.getenv("DB_DBNAME"), -) -engine = create_engine(url_object) - -# Reset data tables -with Session(engine) as session: - Base.metadata.drop_all(engine) - Base.metadata.create_all(engine) - - print("adding locales") - for locale in LOCALES: - print(locale) - session.add(locale) - session.commit() - - print("adding places") - for place in PLACES: - print(place) - session.add(place) - session.commit() - - print("adding NPCS") - for npc in NPCS: - print(npc) - session.add(npc) - session.commit() - - print("adding trait") - for trait in TRAITS: - print(trait) - session.add(trait) - session.commit() - - print("adding questions") - for question in QUESTIONS: - print(question) - session.add(question) - session.commit() - - print("adding answers") - for answer in ANSWERS: - print(answer) - session.add(answer) - session.commit() - - print("adding reactions") - for reaction in REACTIONS: - print(reaction) - session.add(reaction) - session.commit() diff --git a/truthinquiry/logic/data_persistance/tables.py b/truthinquiry/logic/data_persistance/tables.py index 033ff32..ea6c984 100644 --- a/truthinquiry/logic/data_persistance/tables.py +++ b/truthinquiry/logic/data_persistance/tables.py @@ -1,15 +1,12 @@ -from sqlalchemy import Column, Integer, Text, ForeignKey, VARCHAR -from sqlalchemy.orm import declarative_base, relationship +from truthinquiry import APP +db = APP.db -Base = declarative_base() - - -class Locale(Base): +class Locale(db.Model): __tablename__ = 'T_LOCALE' - TEXT_ID = Column(Integer, primary_key=True) - LANG = Column(VARCHAR(2), primary_key=True) - TEXT = Column(Text) + TEXT_ID = db.Column(db.Integer, primary_key=True) + LANG = db.Column(db.VARCHAR(2), primary_key=True) + TEXT = db.Column(db.Text) def __init__(self, TEXT_ID, LANG, TEXT): self.TEXT_ID = TEXT_ID @@ -20,11 +17,11 @@ class Locale(Base): return f"{self.TEXT_ID} {self.LANG} {self.TEXT}" -class Place(Base): +class Place(db.Model): __tablename__ = 'T_PLACE' - PLACE_ID = Column(Integer, primary_key=True) - NAME_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID")) - LOCALE = relationship("Locale") + PLACE_ID = db.Column(db.Integer, primary_key=True) + NAME_LID = db.Column(db.Integer, db.ForeignKey("T_LOCALE.TEXT_ID")) + LOCALE = db.relationship("Locale") def __init__(self, PLACE_ID, NAME_LID): self.PLACE_ID = PLACE_ID @@ -34,12 +31,12 @@ class Place(Base): return f"{self.PLACE_ID} {self.NAME_LID}" -class Question(Base): +class Question(db.Model): __tablename__ = "T_QUESTION" - QUESTION_ID = Column(Integer, primary_key=True) - QUESTION_TYPE = Column(Integer) - TEXT_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID")) - LOCALE = relationship("Locale") + QUESTION_ID = db.Column(db.Integer, primary_key=True) + QUESTION_TYPE = db.Column(db.Integer) + TEXT_LID = db.Column(db.Integer, db.ForeignKey("T_LOCALE.TEXT_ID")) + LOCALE = db.relationship("Locale") def __init__(self, QUESTION_ID, QUESTION_TYPE, TEXT_LID): self.QUESTION_ID = QUESTION_ID @@ -50,14 +47,14 @@ class Question(Base): return f"{self.QUESTION_ID} {self.QUESTION_TYPE} {self.TEXT_LID}" -class Answer(Base): +class Answer(db.Model): __tablename__ = "T_ANSWER" - ANSWER_ID = Column(Integer, primary_key=True) - QA_TYPE = Column(Integer) - NPC_ID = Column(Integer, ForeignKey("T_NPC.NPC_ID")) - TEXT_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID")) - LOCALE = relationship("Locale") - NPC = relationship("Npc") + ANSWER_ID = db.Column(db.Integer, primary_key=True) + QA_TYPE = db.Column(db.Integer) + NPC_ID = db.Column(db.Integer, db.ForeignKey("T_NPC.NPC_ID")) + TEXT_LID = db.Column(db.Integer, db.ForeignKey("T_LOCALE.TEXT_ID")) + LOCALE = db.relationship("Locale") + NPC = db.relationship("Npc") def __init__(self, ANSWER_ID, QA_TYPE, NPC_ID, TEXT_LID): self.ANSWER_ID = ANSWER_ID @@ -69,10 +66,10 @@ class Answer(Base): return f"{self.ANSWER_ID} {self.QA_TYPE} {self.NPC_ID} {self.TEXT_LID}" -class Npc(Base): +class Npc(db.Model): __tablename__ = "T_NPC" - NPC_ID = Column(Integer, primary_key=True) - NAME_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID")) + NPC_ID = db.Column(db.Integer, primary_key=True) + NAME_LID = db.Column(db.Integer, db.ForeignKey("T_LOCALE.TEXT_ID")) def __init__(self, NPC_ID, NAME_LID): self.NPC_ID = NPC_ID @@ -82,10 +79,10 @@ class Npc(Base): return f"{self.NPC_ID} {self.NAME_LID}" -class Trait(Base): +class Trait(db.Model): __tablename__ = "T_TRAIT" - TRAIT_ID = Column(Integer, primary_key=True) - NAME_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID")) + TRAIT_ID = db.Column(db.Integer, primary_key=True) + NAME_LID = db.Column(db.Integer, db.ForeignKey("T_LOCALE.TEXT_ID")) def __init__(self, TRAIT_ID, NAME_LID): self.TRAIT_ID = TRAIT_ID @@ -95,15 +92,15 @@ class Trait(Base): return f"{self.TRAIT_ID} {self.NAME_LID}" -class Reaction(Base): +class Reaction(db.db.Model): __tablename__ = "T_REACTION" - REACTION_ID = Column(Integer, primary_key=True) - NPC_ID = Column(Integer, ForeignKey("T_NPC.NPC_ID"), primary_key=True) - TRAIT_ID = Column(Integer, ForeignKey("T_TRAIT.TRAIT_ID"), primary_key=True) - DESC_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID")) - LOCALE = relationship("Locale") - NPC = relationship("Npc") - TRAIT = relationship("Trait") + REACTION_ID = db.Column(db.Integer, primary_key=True) + NPC_ID = db.Column(db.Integer, db.ForeignKey("T_NPC.NPC_ID"), primary_key=True) + TRAIT_ID = db.Column(db.Integer, db.ForeignKey("T_TRAIT.TRAIT_ID"), primary_key=True) + DESC_LID = db.Column(db.Integer, db.ForeignKey("T_LOCALE.TEXT_ID")) + LOCALE = db.relationship("Locale") + NPC = db.relationship("Npc") + TRAIT = db.relationship("Trait") def __init__(self, REACTION_ID, DESC_LID, NPC_ID, TRAIT_ID): self.REACTION_ID = REACTION_ID