from sqlmodel import create_engine, SQLModel, Session, select from src.config import definitions from typing import Union from src.classes import boardgame_classes sqlite_url = definitions.SQLITE_URL connect_args = {"check_same_thread": False} engine = create_engine(sqlite_url, echo=True, connect_args=connect_args) def add_boardgame(boardgame: Union[ boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion, boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion, boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]): with Session(engine) as session: #First check if board game is not already present is_boardgame_present = len(session.exec( select(boardgame.__class__).where(boardgame.__class__.id == boardgame.id) ).all()) != 0 if not is_boardgame_present: session.add(boardgame) session.commit() session.refresh(boardgame) def get_boardgames(boardgame_type: SQLModel, boardgame_id = None) -> Union[ list[boardgame_classes.BoardGame], list[boardgame_classes.BoardGameExpansion], list[boardgame_classes.OwnedBoardGame], list[boardgame_classes.OwnedBoardGameExpansion], list[boardgame_classes.WishlistBoardGame], list[boardgame_classes.WishlistBoardGameExpansion]]: with Session(engine) as session: session.expire_on_commit = False if boardgame_id == None: statement = select(boardgame_type) else: statement = select(boardgame_type).where(boardgame_type.id == boardgame_id) results = session.exec(statement) boardgame_list = results.all() return boardgame_list def delete_database(): boardgame_classes.BoardGame.__table__.drop(engine) boardgame_classes.OwnedBoardGame.__table__.drop(engine) boardgame_classes.OwnedBoardGameExpansion.__table__.drop(engine) boardgame_classes.WishlistBoardGame.__table__.drop(engine) boardgame_classes.WishlistBoardGameExpansion.__table__.drop(engine) def create_db_and_tables(): SQLModel.metadata.create_all(engine)