From 36b1e76785135a3525247a4a2e39e6d44a2fc49d Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Tue, 14 Feb 2023 10:34:07 +0100
Subject: [PATCH] CamelCasing when deserializing Result objects

---
 src/vipscore_common/entities.py | 15 ++++++++++-----
 tests/test_entities.py          | 15 +++++++++++++++
 2 files changed, 25 insertions(+), 5 deletions(-)
 create mode 100644 tests/test_entities.py

diff --git a/src/vipscore_common/entities.py b/src/vipscore_common/entities.py
index a4c72d5..338af1a 100755
--- a/src/vipscore_common/entities.py
+++ b/src/vipscore_common/entities.py
@@ -25,18 +25,23 @@ 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 typing import Any, Union, ClassVar
+from typing import Any, Union, ClassVar, Optional
 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) """
-    valid_time_start: datetime = Field(alias="validTimeStart") # TODO make sure it's always timezone aware
-    valid_time_end: datetime = Field(..., alias="validTimeStart") # TODO make sure it's always timezone aware
-    valid_geometry: Any = Field(alias="validGeometry")
+    """
+    Represents a set of DSS model result values for a given point in space (Point, Polygon, MultiPolygon) and time (Period or immediate) 
+    """
+    valid_time_start: datetime = Field(alias="validTimeStart")
+    valid_time_end: Optional[datetime] = Field(alias="validTimeStart")
+    valid_geometry: Optional[Any] = Field(alias="validGeometry")
     warning_status: int = Field(alias="warningStatus")
     all_values: dict = 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
diff --git a/tests/test_entities.py b/tests/test_entities.py
new file mode 100644
index 0000000..35b47c7
--- /dev/null
+++ b/tests/test_entities.py
@@ -0,0 +1,15 @@
+import unittest
+import datetime
+
+
+from src.vipscore_common.entities import *
+
+
+class TestEntities(unittest.TestCase):
+    def test_create_result(self):
+        r = Result(
+            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
-- 
GitLab