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