Implement map api (ex. /v2/map/init-data)
Migrate registry.primary_groups to pydantic model
This commit is contained in:
parent
e43c88d0ab
commit
7e9e266157
6 changed files with 116 additions and 36 deletions
|
@ -18,7 +18,7 @@ class CategoryGroup(BaseModel, table=True):
|
|||
__tablename__ = 'category_group'
|
||||
__table_args__ = gisaf_survey.table_args
|
||||
name: str | None = Field(sa_type=String(4), default=None, primary_key=True)
|
||||
major: str
|
||||
major: bool
|
||||
long_name: str
|
||||
categories: list['Category'] = Relationship(back_populates='category_group')
|
||||
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
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):
|
||||
class BaseStyle(Model, table=True):
|
||||
__table_args__ = gisaf_map.table_args
|
||||
__tablename__ = 'map_base_style'
|
||||
|
||||
|
@ -25,7 +28,7 @@ class BaseStyle(Model):
|
|||
return '<models.BaseStyle {self.name:s}>'.format(self=self)
|
||||
|
||||
|
||||
class BaseMap(Model):
|
||||
class BaseMap(Model, table=True):
|
||||
__table_args__ = gisaf_map.table_args
|
||||
__tablename__ = 'base_map'
|
||||
|
||||
|
@ -34,6 +37,7 @@ class BaseMap(Model):
|
|||
|
||||
id: int | None = Field(primary_key=True, default=None)
|
||||
name: str
|
||||
layers: list['BaseMapLayer'] = Relationship(back_populates='base_map')
|
||||
|
||||
def __repr__(self):
|
||||
return '<models.BaseMap {self.name:s}>'.format(self=self)
|
||||
|
@ -41,8 +45,14 @@ class BaseMap(Model):
|
|||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
@classmethod
|
||||
def selectinload(cls):
|
||||
return [
|
||||
cls.layers
|
||||
]
|
||||
|
||||
class BaseMapLayer(Model):
|
||||
|
||||
class BaseMapLayer(Model, table=True):
|
||||
__table_args__ = gisaf_map.table_args
|
||||
__tablename__ = 'base_map_layer'
|
||||
|
||||
|
@ -50,9 +60,9 @@ class BaseMapLayer(Model):
|
|||
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()
|
||||
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))
|
||||
|
||||
@classmethod
|
||||
|
@ -61,14 +71,15 @@ class BaseMapLayer(Model):
|
|||
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}"
|
||||
return f"{self.store or '':s}"
|
||||
|
||||
|
||||
class MapInitData(BaseModel):
|
||||
baseStyles: list[BaseStyle] = []
|
||||
baseMaps: list[BaseMap] = []
|
||||
groups: list[CategoryGroup] = []
|
||||
stores: list[Store] = []
|
|
@ -9,7 +9,7 @@ class MapLibreStyle(BaseModel):
|
|||
class Store(BaseModel):
|
||||
auto_import: bool
|
||||
# base_gis_type: str
|
||||
count: int
|
||||
count: int | None = None
|
||||
custom: bool
|
||||
description: str
|
||||
#extra: dict[str, Any] | None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue