From 016ae53438f525cdc5ab73dc782ea0152254fce9 Mon Sep 17 00:00:00 2001 From: Gigaszi Date: Tue, 27 Aug 2024 11:50:15 +0200 Subject: [PATCH] feat: add AttributeEnum --- ohsome_quality_api/api/api.py | 5 ++++- ohsome_quality_api/api/request_models.py | 4 ++-- ohsome_quality_api/attributes/definitions.py | 10 ++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ohsome_quality_api/api/api.py b/ohsome_quality_api/api/api.py index 2c3ec5f98..95f1b324a 100644 --- a/ohsome_quality_api/api/api.py +++ b/ohsome_quality_api/api/api.py @@ -319,12 +319,15 @@ async def _post_indicator( request: Request, key: str, parameters: IndicatorRequest ) -> Any: validate_indicator_topic_combination(key, parameters.topic_key.value) + attribute_key = getattr(parameters, "attribute_key", None) + if attribute_key: + attribute_key = attribute_key.value indicators = await oqt.create_indicator( key=key, bpolys=parameters.bpolys, topic=get_topic_preset(parameters.topic_key.value), include_figure=parameters.include_figure, - attribute_key=getattr(parameters, "attribute_key", None), + attribute_key=attribute_key, ) if request.headers["accept"] == MEDIA_TYPE_JSON: diff --git a/ohsome_quality_api/api/request_models.py b/ohsome_quality_api/api/request_models.py index 0b2703d15..c4e8ce63f 100644 --- a/ohsome_quality_api/api/request_models.py +++ b/ohsome_quality_api/api/request_models.py @@ -4,6 +4,7 @@ from geojson import FeatureCollection from pydantic import BaseModel, ConfigDict, Field, field_validator +from ohsome_quality_api.attributes.definitions import AttributeEnum from ohsome_quality_api.topics.definitions import TopicEnum from ohsome_quality_api.topics.models import TopicData from ohsome_quality_api.utils.helper import snake_to_lower_camel @@ -63,8 +64,7 @@ class IndicatorRequest(BaseBpolys): class AttributeCompletenessRequest(IndicatorRequest): - # TODO: Should be AttributeEnum - attribute_key: str = Field( + attribute_key: AttributeEnum = Field( ..., title="Attribute Key", alias="attribute", diff --git a/ohsome_quality_api/attributes/definitions.py b/ohsome_quality_api/attributes/definitions.py index e8632a71b..f98da5e5e 100644 --- a/ohsome_quality_api/attributes/definitions.py +++ b/ohsome_quality_api/attributes/definitions.py @@ -1,4 +1,5 @@ import os +from enum import Enum from typing import List import yaml @@ -68,3 +69,12 @@ def build_attribute_filter(attribute_key: List[str], topic_key: str) -> str: return attribute_filter except KeyError as error: raise KeyError("Invalid topic or attribute key(s).") from error + + +attribute_keys = { + inner_key + for outer_dict in load_attributes().values() + for inner_key in outer_dict.keys() +} + +AttributeEnum = Enum("AttributeEnum", {name: name for name in attribute_keys})