fix: singleton Database behavior

This commit is contained in:
283375 2023-08-27 19:44:20 +08:00
parent a6c1e594c4
commit 262495a580
Signed by: 283375
SSH Key Fingerprint: SHA256:UcX0qg6ZOSDOeieKPGokA5h7soykG61nz2uxuQgVLSk

View File

@ -1,3 +1,6 @@
import logging
from typing import Optional
from sqlalchemy import Engine, inspect, select from sqlalchemy import Engine, inspect, select
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
@ -6,14 +9,35 @@ from .models.scores import *
from .models.songs import * from .models.songs import *
from .singleton import Singleton from .singleton import Singleton
logger = logging.getLogger(__name__)
class Database(metaclass=Singleton): class Database(metaclass=Singleton):
def __init__(self, engine: Engine): def __init__(self, engine: Optional[Engine]):
self.engine = engine try:
self.__engine
except AttributeError:
self.__engine = None
if engine is None:
if isinstance(self.engine, Engine):
return
raise ValueError("No sqlalchemy.Engine instance specified before.")
elif isinstance(engine, Engine):
if isinstance(self.engine, Engine):
logger.warning(
f"A sqlalchemy.Engine instance {self.engine} has been specified "
f"and will be replaced to {engine}"
)
self.engine = engine
else:
raise ValueError(
f"A sqlalchemy.Engine instance expected, not {repr(engine)}"
)
@property @property
def engine(self): def engine(self) -> Engine:
return self.__engine return self.__engine # type: ignore
@engine.setter @engine.setter
def engine(self, value: Engine): def engine(self, value: Engine):