File: registry.py

package info (click to toggle)
python-django-test-migrations 1.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 436 kB
  • sloc: python: 1,479; makefile: 26
file content (36 lines) | stat: -rw-r--r-- 1,163 bytes parent folder | download
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
from collections.abc import MutableMapping
from typing import TYPE_CHECKING

from django_test_migrations.db.backends.exceptions import (
    DatabaseConfigurationNotFound,
)
from django_test_migrations.types import AnyConnection

if TYPE_CHECKING:
    from django_test_migrations.db.backends.base.configuration import (
        BaseDatabaseConfiguration,
    )

_DatabaseConfigurationMapping = MutableMapping[
    str,
    type['BaseDatabaseConfiguration'],
]
database_configuration_registry: _DatabaseConfigurationMapping = {}


def get_database_configuration(
    connection: AnyConnection,
) -> 'BaseDatabaseConfiguration':
    """Return proper ``BaseDatabaseConfiguration`` subclass instance.

    Raises:
        DatabaseConfigurationNotFound
            when vendor extracted from ``connection`` doesn't support
            interaction with database configuration/settings
    """
    vendor = getattr(connection, 'vendor', '')
    try:
        database_configuration_class = database_configuration_registry[vendor]
    except KeyError as exc:
        raise DatabaseConfigurationNotFound(vendor) from exc
    return database_configuration_class(connection)