[UPD] Added LibraryController

This commit is contained in:
2026-02-14 18:37:48 +01:00
parent 5fc1dc1b82
commit 5f7b4102bc
13 changed files with 257 additions and 36 deletions

View File

@@ -0,0 +1,18 @@
from ...db.config.config import get_engine_configuration
from sqlalchemy import create_engine as sqlalchemy_create_engine
from functools import cache
from sqlalchemy.orm import sessionmaker
import logging
logger = logging.getLogger(__name__)
@cache
def create_engine(*, engine_string=None, echo=None):
logger.debug(f"create_engine {engine_string}")
if engine_string is None:
engine_string, echo = get_engine_configuration()
engine = sqlalchemy_create_engine(engine_string, echo=echo=="true", future=True) # TODO
Session = sessionmaker(engine)
session = Session()
return engine, session

View File

@@ -1,10 +1,10 @@
from sqlalchemy.orm import Session
from ....schema.library.library import Library
from ....schema.library.base import Base
import logging
logger = logging.getLogger(__name__)
def create(session:Session, library:Library):
def create(session:Session, library:Base):
logger.debug("Add Library")
session.add(library)
logger.debug("Added Library")

View File

@@ -0,0 +1,7 @@
from sqlalchemy.orm import Session
from ....schema.library.base import Base
def delete(session:Session, library:Base):
session.delete(library)
session.commit()

View File

@@ -0,0 +1,8 @@
from sqlalchemy.orm import Session
from sqlalchemy import select
from ....schema.library.base import Base
def read(session:Session, _id:int, obj:Base):
stmt = select(obj).where(obj.id == _id)
return session.scalars(stmt).one()

View File

@@ -0,0 +1,6 @@
from sqlalchemy.orm import Session
from ....schema.library.base import Base
def update(session:Session, library:Base):
session.commit()

View File

@@ -1,7 +0,0 @@
from sqlalchemy.orm import Session
from ....schema.library.library import Library
def delete(session:Session, library:Library):
session.delete(library)
session.commit()

View File

@@ -1,8 +0,0 @@
from sqlalchemy.orm import Session
from sqlalchemy import select
from ....schema.library.library import Library
def read(session:Session, _id:int):
stmt = select(Library).where(Library.id == _id)
return session.scalars(stmt).one()

View File

@@ -1,6 +0,0 @@
from sqlalchemy.orm import Session
from ....schema.library.library import Library
def update(session:Session, library:Library):
session.commit()

View File

@@ -0,0 +1,60 @@
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.api.cruds.base import create, read, update, delete
from app.schema.library import Library
from ..db.config.config import get_engine_configuration
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
class LibraryController:
def __init__(self, library_id=None, *, engine_string=None, echo=False, engine=None):
if engine_string is None:
engine_string, echo = get_engine_configuration()
if engine is None:
self._engine = create_engine(engine_string, echo=echo=="true", future=True)
else:
self._engine = engine
self._Session = sessionmaker(bind=self.engine)
self._library = None
if library_id is not None:
self.read(library_id)
@property
def data(self):
return self._library
@property
def engine(self):
return self._engine
@property
def Session(self):
return self._Session
@property
def session(self):
return self.Session()
def create(self, library:Library):
with self.session as session:
self._library = create(session, library)
return self
def read(self, _id):
with self.session as session:
self._library = read(session, _id, Library)
return self
def update(self):
with self.session as session:
session.commit()
def delete(self):
with self.session as session:
delete(session, self)
del(self)

View File

@@ -30,4 +30,4 @@ class Library(Base):
)
def __repr__(self) -> str:
return f"Library(id={self.id!r}, name={self.name!r}, notes={self.notes!r}"
return f"Library(id={self.id!r}, name={self.name!r}, notes={self.notes!r})"