1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
import abc
import inspect
from typing import ClassVar
from django_test_migrations.db.backends.exceptions import (
DatabaseConfigurationSettingNotFound,
)
from django_test_migrations.db.backends.registry import (
database_configuration_registry,
)
from django_test_migrations.types import AnyConnection, DatabaseSettingValue
class BaseDatabaseConfiguration(abc.ABC):
"""Interact with database's settings."""
vendor: ClassVar[str]
@classmethod
def __init_subclass__(cls, **kwargs: object) -> None:
"""Register ``BaseDatabaseConfiguration`` subclass of db ``vendor``."""
if not inspect.isabstract(cls):
database_configuration_registry.setdefault(cls.vendor, cls)
def __init__(self, connection: AnyConnection) -> None:
"""Bind database ``connection`` used to retrieve settings values."""
self.connection = connection
@property
@abc.abstractmethod
def statement_timeout(self) -> str:
"""Get `STATEMENT TIMEOUT` setting name."""
@abc.abstractmethod
def get_setting_value(self, name: str) -> DatabaseSettingValue:
"""Retrieve value of ``vendor`` database's ``name`` setting.
Raises:
DatabaseConfigurationSettingNotFound
"""
raise DatabaseConfigurationSettingNotFound(self.vendor, name)
|