Initial commit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
from dataclasses import dataclass
|
||||
from pathlib import Path
|
||||
from app.infrastructure.constants import DATABASE_URL
|
||||
from app.infrastructure.ModelConverterImpl import ModelConverterImpl
|
||||
from app.infrastructure.database import Base, create_engine_and_session
|
||||
from app.infrastructure.ModelStorageImpl import ModelStorageImpl
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class Container:
|
||||
storage: ModelStorageImpl
|
||||
converter: ModelConverterImpl
|
||||
engine: object
|
||||
session_factory: object
|
||||
|
||||
|
||||
_container: Container | None = None
|
||||
|
||||
|
||||
def get_container() -> Container:
|
||||
global _container
|
||||
if _container is None:
|
||||
storage = ModelStorageImpl()
|
||||
engine, session_factory = create_engine_and_session(DATABASE_URL)
|
||||
_container = Container(
|
||||
storage=storage,
|
||||
converter=ModelConverterImpl(),
|
||||
engine=engine,
|
||||
session_factory=session_factory,
|
||||
)
|
||||
return _container
|
||||
|
||||
|
||||
def initialize_application() -> None:
|
||||
container = get_container()
|
||||
container.storage.ensure_directories()
|
||||
engine_path = container.engine.url.database
|
||||
if engine_path:
|
||||
Path(engine_path).parent.mkdir(parents=True, exist_ok=True)
|
||||
Base.metadata.create_all(bind=container.engine)
|
||||
Reference in New Issue
Block a user