Add missing dependencies

Add tile server
Config: add defults
Cosmetic refactorings
This commit is contained in:
phil 2024-02-10 19:26:38 +05:30
parent 7e9e266157
commit 5dacc908f2
12 changed files with 434 additions and 187 deletions

View file

@ -1,15 +1,17 @@
from collections import OrderedDict, defaultdict
import logging
from pathlib import Path
from fastapi import Depends, FastAPI, HTTPException, status, responses
from json import dumps
from fastapi import FastAPI, Request, HTTPException, status, responses
from sqlalchemy.orm import selectinload
from sqlalchemy.exc import NoResultFound
from sqlmodel import select
from gisaf.config import conf
from gisaf.models.map_bases import BaseMap, BaseMapLayer, BaseStyle, MapInitData
from gisaf.registry import registry
from gisaf.database import db_session
from gisaf.models.authentication import User
from gisaf.database import fastapi_db_session
from gisaf.tiles import registry as tiles_registry
logger = logging.getLogger(__name__)
@ -21,20 +23,20 @@ async def get_base_styles():
async with db_session() as session:
query = select(BaseStyle.name)\
.where(BaseStyle.enabled==True)\
.order_by(BaseStyle.id)
.order_by(BaseStyle.id) # type: ignore # noqa: E712
data = await session.exec(query)
base_styles = data.all()
## TODO: tiles_registry
logger.warning('TODO: tiles_registry')
# base_styles.extend(tiles_registry.mbtiles.values())
return [BaseStyle(name=bs) for bs in base_styles]
return [BaseStyle(name=bs) for bs in base_styles] # type: ignore
async def get_base_maps() -> list[BaseMap]:
async with db_session() as session:
query1 = select(BaseMap).options(selectinload(BaseMap.layers))
query1 = select(BaseMap).options(selectinload(BaseMap.layers)) # type: ignore
data1 = await session.exec(query1)
base_maps = data1.all()
return base_maps
return base_maps # type: ignore
base_map_dict = {bm.id: bm.name for bm in base_maps}
query2 = select(BaseMapLayer).options(selectinload(BaseMapLayer.base_map))
data2 = await session.exec(query2)
@ -58,5 +60,27 @@ async def get_init_data() -> MapInitData:
baseStyles=await get_base_styles(),
baseMaps=await get_base_maps(),
groups=registry.primary_groups,
stores=df.to_dict(orient='records')
stores=df.to_dict(orient='records') # type: ignore
)
@api.get('/base_style/{name}')
async def get_base_style(request: Request, name: str,
db_session: fastapi_db_session,
) -> BaseStyle:
data = await db_session.exec(select(BaseStyle).where(BaseStyle.name==name))
try:
base_style = data.one()
except NoResultFound:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
# return BaseStyle(
# name=name,
# style=dumps({})
# )
if name in tiles_registry.mbtiles:
## Try to get base_style from tiles_registry
tiles = tiles_registry.mbtiles['name']
style = dumps(await tiles.get_style(style_record=base_style,
request=request))
else:
style = base_style.style # type: ignore
return BaseStyle(name=name, style=style) # type: ignore