| 17 | |
| 18 | |
| 19 | class Database: |
| 20 | def __init__( |
| 21 | self, |
| 22 | sql_renderer: Type[BaseRenderer] = DefaultSQLRenderer, |
| 23 | dbml_renderer: Type[BaseRenderer] = DefaultDBMLRenderer, |
| 24 | allow_properties: bool = False |
| 25 | ) -> None: |
| 26 | self.sql_renderer = sql_renderer |
| 27 | self.dbml_renderer = dbml_renderer |
| 28 | self.tables: List['Table'] = [] |
| 29 | self.table_dict: Dict[str, 'Table'] = {} |
| 30 | self.refs: List['Reference'] = [] |
| 31 | self.enums: List['Enum'] = [] |
| 32 | self.table_groups: List['TableGroup'] = [] |
| 33 | self.sticky_notes: List['StickyNote'] = [] |
| 34 | self.project: Optional['Project'] = None |
| 35 | self.allow_properties = allow_properties |
| 36 | |
| 37 | def __repr__(self) -> str: |
| 38 | return f"<Database>" |
| 39 | |
| 40 | def __getitem__(self, k: Union[int, str]) -> Table: |
| 41 | if isinstance(k, int): |
| 42 | return self.tables[k] |
| 43 | elif isinstance(k, str): |
| 44 | return self.table_dict[k] |
| 45 | else: |
| 46 | raise TypeError('indeces must be str or int') |
| 47 | |
| 48 | def __iter__(self): |
| 49 | return iter(self.tables) |
| 50 | |
| 51 | def _set_database(self, obj: Any) -> None: |
| 52 | obj.database = self |
| 53 | |
| 54 | def _unset_database(self, obj: Any) -> None: |
| 55 | obj.database = None |
| 56 | |
| 57 | def add(self, obj: Any) -> Any: |
| 58 | if isinstance(obj, Table): |
| 59 | return self.add_table(obj) |
| 60 | elif isinstance(obj, Reference): |
| 61 | return self.add_reference(obj) |
| 62 | elif isinstance(obj, Enum): |
| 63 | return self.add_enum(obj) |
| 64 | elif isinstance(obj, TableGroup): |
| 65 | return self.add_table_group(obj) |
| 66 | elif isinstance(obj, Project): |
| 67 | return self.add_project(obj) |
| 68 | elif isinstance(obj, StickyNote): |
| 69 | return self.add_sticky_note(obj) |
| 70 | else: |
| 71 | raise DatabaseValidationError(f'Unsupported type {type(obj)}.') |
| 72 | |
| 73 | def add_table(self, obj: Table) -> Table: |
| 74 | if obj in self.tables: |
| 75 | raise DatabaseValidationError(f'{obj} is already in the database.') |
| 76 | if obj.full_name in self.table_dict: |
no outgoing calls