Add missing model info, fix collision with tags

This commit is contained in:
phil 2024-03-09 00:32:58 +05:30
parent 69924709d2
commit 9bf78dd421
5 changed files with 26 additions and 21 deletions

View file

@ -40,7 +40,7 @@ from gisaf.models.models_base import Model
from gisaf.models.metadata import gisaf_survey, gisaf_admin, survey, raw_survey
from gisaf.models.misc import Qml
from gisaf.models.category import Category
from gisaf.models.info_item import InfoItem
from gisaf.models.info_item import Tag, InfoItem
# from gisaf.models.survey import Equipment, Surveyor, Accuracy
# from gisaf.models.project import Project
@ -383,11 +383,11 @@ class GeoModelNoStatus(Model):
"""
return []
async def get_info(self) -> dict[str, str]:
async def get_info(self) -> list[InfoItem]:
"""
Model specific info
"""
return {}
return []
# @classmethod
# def get_join_with(cls):
@ -433,18 +433,18 @@ class GeoModelNoStatus(Model):
async def get_properties(cls, df):
return {}
async def get_tags(self) -> list[InfoItem]:
async def get_tags(self) -> list[Tag]:
from gisaf.models.tags import Tags
async with db_session() as session:
query = select(Tags.tags).where(Tags.store == self.get_store_name(),
Tags.ref_id == self.id)
data = await session.exec(query)
tags = data.one_or_none()
if tags is not None:
return [InfoItem(key=key, value=value)
for key, value in tags.items()]
else:
return []
if tags is not None:
return [Tag(key=key, value=value)
for key, value in tags.items()]
else:
return []
@cached_property
def shapely_geom(self):

View file

@ -2,8 +2,7 @@ from typing import Any
from pydantic import BaseModel
from gisaf.models.info_item import InfoItem
from gisaf.models.tags import Tag
from gisaf.models.info_item import Tag, InfoItem
class ActionResult(BaseModel):
message: str

View file

@ -1,6 +1,10 @@
from pydantic import BaseModel
class InfoItem(BaseModel):
key: str
value: str | float | int
class Tag(BaseModel):
key: str
value: str

View file

@ -42,9 +42,4 @@ class TagKey(SQLModel, table=True):
return self.key
def __repr__(self):
return '<models.TagKey {self.key}>'.format(self=self)
class Tag(BaseModel):
key: str
value: str
return '<models.TagKey {self.key}>'.format(self=self)

View file

@ -36,7 +36,7 @@ from gisaf.models.survey import Equipment, Surveyor, Accuracy
from gisaf.models.project import Project
from gisaf.models.category import Category, CategoryGroup
from gisaf.models.metadata import raw_survey, survey
from gisaf.models.info import FeatureInfo
from gisaf.models.info import FeatureInfo, InfoCategory
logger = logging.getLogger(__name__)
@ -354,11 +354,15 @@ class ModelRegistry:
if not item:
raise NotInRegistry
files, images = [], []
externalRecordUrl, graph, categorizedInfoItems = (None, ) * 3
categorizedInfoItems: list[InfoCategory] | None
if hasattr(item, 'get_categorized_info'):
categorizedInfoItems = await item.get_categorized_info()
else:
categorizedInfoItems = None
if hasattr(item, 'get_graph'):
graph = item.get_graph()
else:
graph = None
if hasattr(item, 'Attachments'):
if hasattr(item.Attachments, 'files'):
files = await item.Attachments.files(item)
@ -366,11 +370,14 @@ class ModelRegistry:
images = await item.Attachments.images(item)
if hasattr(item, 'get_external_record_url'):
externalRecordUrl = item.get_external_record_url()
else:
externalRecordUrl = None
return FeatureInfo(
id=str(item.id),
itemName=item.caption,
geoInfoItems=await item.get_geo_info(),
infoItems=await item.get_survey_info(),
infoItems=await item.get_info(),
surveyInfoItems=await item.get_survey_info(),
tags=await item.get_tags(),
categorizedInfoItems=categorizedInfoItems,
graph=graph,