#adapted from: https://pydantic-docs.helpmanual.io/ from typing import List from pydantic import BaseModel, Schema, BaseConfig, Json from geoalchemy2 import WKTElement from geoalchemy2.shape import to_shape import datetime as dt from pydantic import ValidationError """ now: Pydantic schemas for TOAR database """ class TimeseriesBase(BaseModel): id: int = None label: str order: int access_rights: int sampling_frequency: int aggregation: int data_start_date: dt.datetime data_end_date: dt.datetime measurement_method: str sampling_height: float # how to define jsonstring? dict? # additional_metadata = Column(JSONB(astext_type=Text()), nullable=False) date_added: dt.datetime date_modified: dt.datetime station_id: int variable_id: int additional_metadata: Json #how to define ForeignKeys? Here???? # station_id = Column(ForeignKey('stationmeta_core.id', deferrable=True, initially='DEFERRED'), index=True) # variable_id = Column(ForeignKey('variables.id', deferrable=True, initially='DEFERRED'), index=True) class TimeseriesCreate(TimeseriesBase): pass class Timeseries(TimeseriesBase): id: int class Config: orm_mode = True external_data_toar = { "label": "CMA2", "order": 1, "access_rights": 0, "sampling_frequency": 0, "aggregation": 0, "data_start_date": "2003-09-07T15:30:00+02:00", "data_end_date": "2016-12-31T14:30:00+01:00", "measurement_method": "UV absorption", "sampling_height": 7.0, "date_added": "2020-05-15T15:30:00+02:00", "date_modified": "2020-05-16T09:30:00+02:00", "station_id": 2, "variable_id": 7, # although this is, what should go into the database, # only the other line is working with pydantic Json! # "additional_metadata": {}} "additional_metadata": "{}"} try: timeseries = TimeseriesBase(**external_data_toar) print(timeseries.dict()) except ValidationError as e: print(e.json())