from typing import Any, AnyStr, Dict from sqlalchemy import Column, String, ForeignKey, Integer, Boolean from sqlalchemy.orm import relationship from db.models.base import Base, BaseMixin class MetaDataTable(Base, BaseMixin): __tablename__ = 'meta_data_table' table_name = Column(String, unique=True) table_columns = relationship("MetaDataColumn") def __repr__(self): return f'MetaDataTable({self.id} {self.table_name})' def __str__(self): return f'{self.table_name}({self.id})' def import_dict(self, import_data: Dict[AnyStr, Any]): self.id = import_data['id'] self.created_date = import_data['created_date'] self.last_modified_date = import_data['last_modified_date'] self.version = import_data['version'] self.table_name = import_data['table_name'] class MetaDataColumn(Base, BaseMixin): __tablename__ = 'meta_data_column' column_name = Column(String, nullable=False) column_sync_name = Column(String) column_type = Column(String) column_modifier = Column(String, nullable=True) column_order = Column(Integer) table_id = Column(String, ForeignKey('meta_data_table.id')) table = relationship("MetaDataTable", back_populates="table_columns") column_label = Column(String) filter_label = Column(String) is_shown = Column(Boolean) show_filter = Column(Boolean) ref_column = Column(String, nullable=True) def __repr__(self): if self.column_name is None: return f'MetaDataColumn({self.id} {self.table.table_name}.__)' else: return f'MetaDataColumn({self.id} {self.table.table_name}.{self.column_name})' def __str__(self): return f'{self.column_name}({self.id})' def import_dict(self, import_data: Dict[AnyStr, Any]): self.id = import_data['id'] self.created_date = import_data['created_date'] self.last_modified_date = import_data['last_modified_date'] self.version = import_data['version'] self.column_name = import_data['column_name'] self.column_sync_name = import_data['column_sync_name'] self.column_type = import_data['column_type'] self.column_modifier = import_data['column_modifier'] self.column_order = import_data['column_order'] self.table_id = import_data['table_id'] self.column_label = import_data['column_label'] self.filter_label = import_data['filter_label'] self.is_shown = import_data['is_shown'] self.show_filter = import_data['show_filter'] self.ref_column = import_data['ref_column']