from enum import Enum from sqlmodel import Field, Relationship from gisaf.models.models_base import Model from gisaf.models.metadata import gisaf_survey_table_args class Accuracy(Model, table=True): __table_args__ = gisaf_survey_table_args class Admin: menu = 'Other' flask_admin_model_view = 'MyModelViewWithPrimaryKey' id: int | None = Field(default=None, primary_key=True) name: str accuracy: float def __str__(self): return f'{self.name} {self.accuracy}' def __repr__(self): return f'' class Surveyor(Model, table=True): __table_args__ = gisaf_survey_table_args class Admin: menu = 'Other' flask_admin_model_view = 'MyModelViewWithPrimaryKey' id: int | None = Field(default=None, primary_key=True) name: str def __str__(self): return self.name def __repr__(self): return f'' class Equipment(Model, table=True): __table_args__ = gisaf_survey_table_args class Admin: menu = 'Other' flask_admin_model_view = 'MyModelViewWithPrimaryKey' id: int | None = Field(default=None, primary_key=True) name: str def __str__(self): return self.name def __repr__(self): return f'' class GeometryType(str, Enum): point = 'Point' line_work = 'Line_work' class AccuracyEquimentSurveyorMapping(Model, table=True): __table_args__ = gisaf_survey_table_args __tablename__ = 'accuracy_equiment_surveyor_mapping' class Admin: menu = 'Other' id: int | None= Field(default=None, primary_key=True) surveyor_id: int = Field(foreign_key=gisaf_survey_table_args['schema'] + '.surveyor.id', index=True) equipment_id: int = Field(foreign_key=gisaf_survey_table_args['schema'] + '.equipment.id', index=True) geometry_type: GeometryType = Field(default='Point', index=True) accuracy_id: int = Field(foreign_key=gisaf_survey_table_args['schema'] + '.accuracy.id') surveyor: Surveyor = Relationship() accuracy: Accuracy = Relationship() equipment: Equipment = Relationship() @classmethod def selectinload(cls): return [ cls.surveyor, cls.equipment, cls.accuracy, ] # @classmethod # def dyn_join_with(cls): # return { # 'surveyor': Surveyor, # 'equipment': Equipment, # 'accuracy': Accuracy, # }