mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 09:53:32 +01:00
schema: Continue
Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
9cfcc1bd68
commit
c50c614f13
7 changed files with 223 additions and 52 deletions
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from typing import Optional, List, Iterable
|
||||
from typing import Optional, Iterable
|
||||
|
||||
import abc
|
||||
|
||||
|
|
@ -14,16 +14,16 @@ from .CompositeForeignKey import CompositeForeignKey
|
|||
class Schema(abc.ABC): # export
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.___tables: Optional[List[Table]] = None
|
||||
self.__foreign_keys: Optional[List[CompositeForeignKey]] = None
|
||||
self.__access_defining_columns: Optional[List[str]] = None
|
||||
self.___tables: Optional[list[Table]] = None
|
||||
self.__foreign_keys: Optional[list[CompositeForeignKey]] = None
|
||||
self.__access_defining_columns: Optional[list[str]] = None
|
||||
|
||||
@property
|
||||
def __tables(self):
|
||||
if self.___tables is None:
|
||||
ret = dict()
|
||||
for name in self._table_names():
|
||||
slog(WARNING, f'Caching metadata for table "{name}"')
|
||||
slog(DEBUG, f'Caching metadata for table "{name}"')
|
||||
assert(isinstance(name, str))
|
||||
ret[name] = self._table(name)
|
||||
self.___tables = ret
|
||||
|
|
@ -42,7 +42,7 @@ class Schema(abc.ABC): # export
|
|||
return None # type: ignore
|
||||
|
||||
@abc.abstractmethod
|
||||
def _foreign_keys(self) -> List[CompositeForeignKey]:
|
||||
def _foreign_keys(self) -> list[CompositeForeignKey]:
|
||||
pass
|
||||
|
||||
@abc.abstractmethod
|
||||
|
|
@ -51,6 +51,18 @@ class Schema(abc.ABC): # export
|
|||
|
||||
# ------ API to be called
|
||||
|
||||
def __len__(self):
|
||||
return len(self.__tables)
|
||||
|
||||
def __iter__(self):
|
||||
yield from self.__tables.values()
|
||||
|
||||
def __repr__(self):
|
||||
return '|'.join([table.name for table in self.__tables])
|
||||
|
||||
def __getitem__(self, index):
|
||||
return self.__tables[index]
|
||||
|
||||
@property
|
||||
def table_names(self) -> Iterable[str]:
|
||||
return self.__tables.keys()
|
||||
|
|
@ -66,7 +78,7 @@ class Schema(abc.ABC): # export
|
|||
return self.__access_defining_columns
|
||||
|
||||
@property
|
||||
def foreign_key_constraints(self) -> List[CompositeForeignKey]:
|
||||
def foreign_key_constraints(self) -> list[CompositeForeignKey]:
|
||||
if self.__foreign_keys is None:
|
||||
self.__foreign_keys = self._foreign_keys()
|
||||
return self.__foreign_keys
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue