gisaf-backend/src/gisaf/models/map_bases.py
phil 5dacc908f2 Add missing dependencies
Add tile server
Config: add defults
Cosmetic refactorings
2024-02-10 19:26:38 +05:30

85 lines
No EOL
2.3 KiB
Python

from typing import Any
from pydantic import BaseModel
from sqlmodel import Field, String, JSON, Relationship
from gisaf.models.models_base import Model
from gisaf.models.category import CategoryGroup
from gisaf.models.metadata import gisaf_map
from gisaf.models.store import Store
class BaseStyle(Model, table=True):
__table_args__ = gisaf_map.table_args
__tablename__: str = 'map_base_style' # type: ignore
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)) # type: ignore
mbtiles: str = Field(sa_type=String(50)) # type: ignore
static_tiles_url: str
enabled: bool = True
def __repr__(self):
return f'<models.BaseStyle {self.name:s}>'
class BaseMap(Model, table=True):
__table_args__ = gisaf_map.table_args
__tablename__: str = 'base_map' # type: ignore
class Admin:
menu = 'Other'
id: int | None = Field(primary_key=True, default=None)
name: str
layers: list['BaseMapLayer'] = Relationship(back_populates='base_map')
def __repr__(self) -> str:
return f'<models.BaseMap {self.name:s}>'
def __str__(self) -> str:
return self.name
@classmethod
def selectinload(cls) -> list[list['BaseMapLayer']]:
return [
cls.layers
]
class BaseMapLayer(Model, table=True):
__table_args__ = gisaf_map.table_args
__tablename__: str = 'base_map_layer' # type: ignore
class Admin:
menu = 'Other'
id: int | None = Field(primary_key=True, default=None)
base_map_id: int = Field(foreign_key=gisaf_map.table('base_map.id'),
index=True)
base_map: BaseMap = Relationship(back_populates='layers')
store: str = Field(sa_type=String(100)) # type: ignore
@classmethod
def selectinload(cls):
return [
cls.base_map
]
def __repr__(self):
return f"<models.BaseMapLayer {self.store or '':s}>"
def __str__(self):
return f"{self.store or '':s}"
class MapInitData(BaseModel):
baseStyles: list[BaseStyle] = []
baseMaps: list[BaseMap] = []
groups: list[CategoryGroup] = []
stores: list[Store] = []