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

74 lines
1.8 KiB
Python
Raw Normal View History

from typing import Any
from sqlmodel import Field, String, JSON, Relationship
from gisaf.models.models_base import Model
2024-01-05 01:50:32 +05:30
from gisaf.models.metadata import gisaf_map
class BaseStyle(Model):
2024-01-05 01:50:32 +05:30
__table_args__ = gisaf_map.table_args
__tablename__ = 'map_base_style'
class Admin:
menu = 'Other'
flask_admin_model_view = 'MapBaseStyleModelView'
id: int | None = Field(primary_key=True, default=None)
name: str
style: dict[str, Any] | None = Field(sa_type=JSON(none_as_null=True))
mbtiles: str = Field(sa_type=String(50))
static_tiles_url: str
enabled: bool = True
def __repr__(self):
return '<models.BaseStyle {self.name:s}>'.format(self=self)
class BaseMap(Model):
2024-01-05 01:50:32 +05:30
__table_args__ = gisaf_map.table_args
__tablename__ = 'base_map'
class Admin:
menu = 'Other'
id: int | None = Field(primary_key=True, default=None)
name: str
def __repr__(self):
return '<models.BaseMap {self.name:s}>'.format(self=self)
def __str__(self):
return self.name
class BaseMapLayer(Model):
2024-01-05 01:50:32 +05:30
__table_args__ = gisaf_map.table_args
__tablename__ = 'base_map_layer'
class Admin:
menu = 'Other'
id: int | None = Field(primary_key=True, default=None)
base_map_id: int = Field(foreign_key='base_map.id', index=True)
## Subclasses must include:
# base_map: BaseMap = Relationship()
store: str = Field(sa_type=String(100))
@classmethod
def selectinload(cls):
return [
cls.base_map
]
# @classmethod
# def dyn_join_with(cls):
# return {
# 'base_map': BaseMap,
# }
def __repr__(self):
return f"<models.BaseMapLayer {self.store or '':s}>"
def __str__(self):
return f"{self.store or '':s}"