2025-02-02 15:58:52 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
|
|
import abc
|
2025-03-10 18:44:39 +01:00
|
|
|
from contextlib import contextmanager
|
2025-02-02 15:58:52 +01:00
|
|
|
|
|
|
|
|
from jwutils.Config import Config
|
|
|
|
|
from jwutils.db.schema.Schema import Schema
|
|
|
|
|
from jwutils import Cmds
|
2025-03-10 18:44:39 +01:00
|
|
|
from .Session import Session
|
|
|
|
|
from ..log import *
|
2025-02-02 15:58:52 +01:00
|
|
|
|
|
|
|
|
class DataBase(abc.ABC):
|
|
|
|
|
|
2025-03-10 18:44:39 +01:00
|
|
|
def __init__(self, schema: Schema, conf: Config) -> None:
|
2025-02-02 15:58:52 +01:00
|
|
|
self.__conf = conf
|
|
|
|
|
self.__schema = schema
|
2025-03-10 18:44:39 +01:00
|
|
|
conf.dump(NOTICE, "Initializing database with configuration")
|
2025-02-02 15:58:52 +01:00
|
|
|
|
2025-03-10 18:44:39 +01:00
|
|
|
@abc.abstractmethod
|
|
|
|
|
def _create_session(self):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def _delete_session(self, session: Session):
|
|
|
|
|
del session
|
2025-02-02 15:58:52 +01:00
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def schema(self):
|
|
|
|
|
return self.__schema
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def conf(self):
|
|
|
|
|
return self.__conf
|
2025-03-10 18:44:39 +01:00
|
|
|
|
|
|
|
|
@contextmanager
|
|
|
|
|
def session(self):
|
|
|
|
|
ret = self._create_session()
|
|
|
|
|
try:
|
|
|
|
|
yield ret
|
|
|
|
|
finally:
|
|
|
|
|
self._delete_session(ret)
|