From 46f4295e36e52aa874f45c04dad0dd18da591bd8 Mon Sep 17 00:00:00 2001
From: schroeder5 <s.schroeder@fz-juelich.de>
Date: Sun, 5 Jul 2020 20:29:33 +0200
Subject: [PATCH] #4: finally fixed JSONB issue (from database to pydantic and
 vice versa)...

---
 toardb/stationmeta/crud.py    | 11 +++++------
 toardb/stationmeta/schemas.py |  3 ++-
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/toardb/stationmeta/crud.py b/toardb/stationmeta/crud.py
index 24a21c4..8b296bd 100644
--- a/toardb/stationmeta/crud.py
+++ b/toardb/stationmeta/crud.py
@@ -11,7 +11,6 @@ from sqlalchemy.orm import Session
 from sqlalchemy.dialects.postgresql import JSONB, ARRAY
 from fastapi import File, UploadFile
 from fastapi.responses import JSONResponse
-from fastapi.encoders import jsonable_encoder
 from . import models
 from .models import stationmeta_core_stationmeta_roles_table, stationmeta_core_stationmeta_annotations_table, \
                     CZ_enum, CV_enum, ST_enum, TA_enum
@@ -26,7 +25,7 @@ def get_stationmeta_core(db: Session, station_code: str):
     # there is a mismatch with coordinates and additional_metadata
     if db_object:
         db_object.coordinates = get_coordinates_from_geom(db_object.coordinates)
-        db_object.additional_metadata = str(db_object.additional_metadata)
+        db_object.additional_metadata = str(db_object.additional_metadata).replace("'",'"')
     return db_object
 
 
@@ -35,7 +34,7 @@ def get_stationmeta(db: Session, station_code: str):
     # there is a mismatch with coordinates and additional_metadata
     if db_object:
         db_object.coordinates = get_coordinates_from_geom(db_object.coordinates)
-        db_object.additional_metadata = str(db_object.additional_metadata)
+        db_object.additional_metadata = str(db_object.additional_metadata).replace("'",'"')
     return db_object
 
 
@@ -44,7 +43,7 @@ def get_all_stationmeta_core(db: Session, skip : int = 0, limit: int = None):
     for db_object in db_objects:
         # there is a mismatch with coordinates and additional_metadata
         db_object.coordinates = get_coordinates_from_geom(db_object.coordinates)
-        db_object.additional_metadata = str(db_object.additional_metadata)
+        db_object.additional_metadata = str(db_object.additional_metadata).replace("'",'"')
     return db_objects
 
 
@@ -53,7 +52,7 @@ def get_all_stationmeta(db: Session, skip : int = 0, limit: int = None):
     for db_object in db_objects:
         # there is a mismatch with coordinates and additional_metadata
         db_object.coordinates = get_coordinates_from_geom(db_object.coordinates)
-        db_object.additional_metadata = str(db_object.additional_metadata)
+        db_object.additional_metadata = str(db_object.additional_metadata).replace("'",'"')
     return db_objects
 
 
@@ -91,7 +90,7 @@ def create_stationmeta(db: Session, stationmeta: StationmetaCreate):
     # in upload command, we have now: "additional_metadata": "{}"
     # but return from this method gives: "additional_metadata": {}
     # ==> there is a mismatch between model(JSONB) and schema(JSON)
-    db_stationmeta.additional_metadata = str(db_stationmeta.additional_metadata)
+    db_stationmeta.additional_metadata = str(db_stationmeta.additional_metadata).replace("'",'"')
     db_stationmeta.coordinate_validation_status = get_value_from_str(CV_enum,db_stationmeta.coordinate_validation_status)
     db_stationmeta.type_of_environment = get_value_from_str(ST_enum,db_stationmeta.type_of_environment)
     db_stationmeta.type_of_area = get_value_from_str(TA_enum,db_stationmeta.type_of_area)
diff --git a/toardb/stationmeta/schemas.py b/toardb/stationmeta/schemas.py
index 85e9e54..9710a96 100644
--- a/toardb/stationmeta/schemas.py
+++ b/toardb/stationmeta/schemas.py
@@ -45,7 +45,8 @@ class StationmetaCoreBase(BaseModel):
     coordinate_validator_id: int
 
     class Config(BaseConfig):
-        arbitrary_types_allowed = True
+        orm_mode = True
+#       arbitrary_types_allowed = True
 
     @validator('coordinate_validation_status')
     def check_coordinate_validation_status(cls, v):
-- 
GitLab