# #
###############################################################################
+import functools
import logging
+import sqlalchemy.orm
import sqlmodel
# Setup logging
# Connect to the database
self.engine = self.connect(uri)
+ # Create a session maker
+ self.sessionmaker = sqlalchemy.orm.sessionmaker(
+ self.engine,
+ expire_on_commit = False,
+ info = {
+ "backend" : self.backend,
+ },
+ )
+
# Session
self.__session = None
Returns the current database session
"""
if self.__session is None:
- self.__session = sqlmodel.Session(self.engine)
+ self.__session = self.sessionmaker()
return self.__session
# Return as set
return set([o for o in objects])
+
+
+class BackendMixin:
+ @functools.cached_property
+ def backend(self):
+ # Fetch the session
+ session = sqlalchemy.orm.object_session(self)
+
+ # Return the backend
+ return session.info.get("backend")
+
+ @functools.cached_property
+ def db(self):
+ return self.backend.db
import sqlmodel
import typing
+from . import database
from . import sources
from . import util
)
-class List(sqlmodel.SQLModel, table=True):
+class List(sqlmodel.SQLModel, database.BackendMixin, table=True):
__tablename__ = "lists"
# ID
import datetime
import sqlmodel
+from . import database
+
class Sources(object):
def __init__(self, backend):
self.backend = backend
return source
-class Source(sqlmodel.SQLModel, table=True):
+class Source(sqlmodel.SQLModel, database.BackendMixin, table=True):
__tablename__ = "sources"
# ID