85 lines
No EOL
2.3 KiB
Python
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] = [] |