diff --git a/src/vipscore_common/data_utils.py b/src/vipscore_common/data_utils.py index 0d646a86fd7309906cb5d8a0babf50d60028b1fb..e0db4b86a933b77d5ef5fbfe1ba60a6f2f911b05 100644 --- a/src/vipscore_common/data_utils.py +++ b/src/vipscore_common/data_utils.py @@ -76,7 +76,7 @@ def get_result_list_from_dataframe(df: DataFrame): valid_time_start = timestamp, # valid_time_start valid_time_end = None, warning_status = values.pop("WARNING_STATUS"), - all_values = values + all_values = json.dumps(values) )) return result_list diff --git a/src/vipscore_common/entities.py b/src/vipscore_common/entities.py index 767546a0050c9843eee234a7c58fe68591429312..345d5e4a3f5dd75d6fcf0f9bd496b54eeff88345 100755 --- a/src/vipscore_common/entities.py +++ b/src/vipscore_common/entities.py @@ -24,10 +24,12 @@ along with VIPSCore-Python-Common. If not, see <http://www.nibio.no/licenses/>. from datetime import datetime from shapely.geometry import Point, Polygon -from pydantic import BaseModel, validator, constr, Field +from pydantic import BaseModel, validator, constr, Field from typing import Any, ClassVar, Optional +import json import pytz + class Result(BaseModel): """ Represents a set of DSS model result values for a given point in space (Point, Polygon, MultiPolygon) and time (Period or immediate) @@ -36,12 +38,12 @@ class Result(BaseModel): valid_time_end: Optional[datetime] = Field(alias="validTimeEnd") valid_geometry: Optional[Any] = Field(alias="validGeometry") warning_status: int = Field(alias="warningStatus") - all_values: dict = Field(alias="allValues") - + all_values: str = Field("{}", alias="allValues") class Config: allow_population_by_field_name = True + WARNING_STATUS_NO_WARNING: ClassVar[int] = 0 WARNING_STATUS_NO_WARNING_MISSING_DATA: ClassVar[int] = 1 WARNING_STATUS_NO_RISK: ClassVar[int] = 2 @@ -50,7 +52,7 @@ class Result(BaseModel): def get_keys(self): - return set(self.all_values.keys) if self.all_values is not None else set() + return set(json.loads(self.all_values.keys)) if self.all_values is not None else set() @validator("valid_time_start") def ensure_timezone(cls, v): @@ -70,6 +72,19 @@ class Result(BaseModel): def ensure_geometry(cls,v): if v is not None and not isinstance(v, Point) and not isinstance(v, Polygon): raise ValueError("%s is not a " % v) + + def set_value(self, key, value): + temp_all_values = json.loads(self.all_values) + temp_all_values[key] = value + self.all_values = json.dumps(temp_all_values) + + def get_value(self, key): + temp_all_values = json.loads(self.all_values) + return temp_all_values.get(key) + + def set_all_values(self, values_dict): + self.all_values = json.dumps(values_dict) + class ModelConfiguration(BaseModel): """All the input data for the model.""" diff --git a/tests/test_entities.py b/tests/test_entities.py index 35b47c7c38444ce01bf8a822dca209e0e07caa24..1272768c1be0578510f00491a548b5ed012be74d 100644 --- a/tests/test_entities.py +++ b/tests/test_entities.py @@ -1,6 +1,6 @@ import unittest import datetime - +import json from src.vipscore_common.entities import * @@ -11,5 +11,13 @@ class TestEntities(unittest.TestCase): valid_time_start = datetime.fromisoformat("2015-03-01T00:00:00+01:00"), # valid_time_start valid_time_end = None, warning_status = 2, - all_values = {"TM":2} - ) \ No newline at end of file + all_values = json.dumps({"TM":2}) + ) + + r = Result( + valid_time_start = datetime.fromisoformat("2015-03-01T00:00:00+01:00"), # valid_time_start + valid_time_end = None, + warning_status = 2 + ) + + r.set_value("TM",2) \ No newline at end of file