gisaf-backend/src/gisaf/models/survey.py

94 lines
2.4 KiB
Python
Raw Normal View History

from enum import Enum
from sqlmodel import Field, Relationship
from gisaf.models.models_base import Model
2024-01-05 01:50:32 +05:30
from gisaf.models.metadata import gisaf_survey
class Accuracy(Model, table=True):
2024-01-05 01:50:32 +05:30
__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'<models.Accuracy {self.name}>'
class Surveyor(Model, table=True):
2024-01-05 01:50:32 +05:30
__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'<models.Surveyor {self.name}>'
class Equipment(Model, table=True):
2024-01-05 01:50:32 +05:30
__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'<models.Equipment {self.name}>'
class GeometryType(str, Enum):
point = 'Point'
line_work = 'Line_work'
class AccuracyEquimentSurveyorMapping(Model, table=True):
2024-01-05 01:50:32 +05:30
__table_args__ = gisaf_survey.table_args
__tablename__ = 'accuracy_equiment_surveyor_mapping'
class Admin:
menu = 'Other'
id: int | None= Field(default=None, primary_key=True)
2024-01-05 01:50:32 +05:30
surveyor_id: int = Field(foreign_key=gisaf_survey.table('surveyor.id'), index=True)
equipment_id: int = Field(foreign_key=gisaf_survey.table('equipment.id'), index=True)
geometry_type: GeometryType = Field(default='Point', index=True)
2024-01-05 01:50:32 +05:30
accuracy_id: int = Field(foreign_key=gisaf_survey.table('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,
# }