-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase_binds.py
More file actions
50 lines (36 loc) · 1.21 KB
/
database_binds.py
File metadata and controls
50 lines (36 loc) · 1.21 KB
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
43
44
45
46
47
48
49
50
import typing as t
import sqlalchemy as sa
import sqlalchemy.orm as sa_orm
from ellar_sql.constant import DEFAULT_KEY
class DatabaseMetadata(t.NamedTuple):
metadata: sa.MetaData
registry: sa_orm.registry
__model_database_metadata__: t.Dict[str, DatabaseMetadata] = {}
def update_database_metadata(
database_key: str, value: sa.MetaData, registry: sa_orm.registry
) -> None:
"""
Update a metadata based on a database key
"""
__model_database_metadata__[database_key] = DatabaseMetadata(
metadata=value, registry=registry
)
def get_all_metadata() -> t.Dict[str, DatabaseMetadata]:
"""
Get all metadata available in your application
"""
return __model_database_metadata__.copy()
def get_metadata(
database_key: str = DEFAULT_KEY, certain: bool = False
) -> DatabaseMetadata:
"""
Gets Metadata associated with a database key
"""
if certain:
return __model_database_metadata__[database_key]
return __model_database_metadata__.get(database_key) # type:ignore[return-value]
def has_metadata(database_key: str) -> bool:
"""
Checks if a metadata exist for a database key
"""
return database_key in __model_database_metadata__