Skip to content
Snippets Groups Projects
Commit 88cd8396 authored by Sabine Schröder's avatar Sabine Schröder
Browse files

#4: nested download for station inside timeseries still not working properly,...

#4: nested download for station inside timeseries still not working properly, but at least shows some information; upload after gitlab crash
parent d2f2e22a
Branches
No related tags found
No related merge requests found
Pipeline #40051 passed
...@@ -13,7 +13,11 @@ from toardb.auth_user.models import AuthUser ...@@ -13,7 +13,11 @@ from toardb.auth_user.models import AuthUser
from toardb.base import Base from toardb.base import Base
STATIONMETA_CORE_ID_SEQ = Sequence('stationmeta_core_id_seq') # define sequence explicitly STATIONMETA_CORE_ID_SEQ = Sequence('stationmeta_core_id_seq') # define sequence explicitly
class StationmetaCore(Base): # coordinates are giving problems in nested views (from timeseries -- now try this approach)
# ==> unfortunately, there will be no coordinates shown in timeseries nested views
# still to be investigated!
# ValueError: [ValueError('dictionary update sequence element #0 has length 1; 2 is required',), TypeError('vars() argument must have __dict__ attribute',)]
class StationmetaCore_WithoutCoords(Base):
""" Table "public.stationmeta_core" """ Table "public.stationmeta_core"
+------------------------------+--------------------------+-----------+----------+----------------------------------------------+ +------------------------------+--------------------------+-----------+----------+----------------------------------------------+
...@@ -84,14 +88,12 @@ class StationmetaCore(Base): ...@@ -84,14 +88,12 @@ class StationmetaCore(Base):
id = Column(Integer, STATIONMETA_CORE_ID_SEQ, primary_key=True, server_default=STATIONMETA_CORE_ID_SEQ.next_value()) id = Column(Integer, STATIONMETA_CORE_ID_SEQ, primary_key=True, server_default=STATIONMETA_CORE_ID_SEQ.next_value())
codes = Column(ARRAY(String(16))) codes = Column(ARRAY(String(16)))
name = Column(String(128), nullable=False) name = Column(String(128), nullable=False)
coordinates = Column(Geometry('POINTZ', 4326))
country = Column(String(128), nullable=False, index=True) country = Column(String(128), nullable=False, index=True)
state = Column(String(128), nullable=False, index=True) state = Column(String(128), nullable=False, index=True)
coordinate_validation_status = Column(ForeignKey('cv_vocabulary.enum_val'), nullable=False) coordinate_validation_status = Column(ForeignKey('cv_vocabulary.enum_val'), nullable=False)
coordinate_validation_date = Column(DateTime(True), nullable=False) coordinate_validation_date = Column(DateTime(True), nullable=False)
type_of_environment = Column(ForeignKey('st_vocabulary.enum_val'), nullable=False) type_of_environment = Column(ForeignKey('st_vocabulary.enum_val'), nullable=False)
type_of_area = Column(ForeignKey('ta_vocabulary.enum_val'), nullable=False) type_of_area = Column(ForeignKey('ta_vocabulary.enum_val'), nullable=False)
category = Column(String(128), nullable=False)
timezone = Column(String(64), nullable=False) timezone = Column(String(64), nullable=False)
additional_metadata = Column(JSONB(astext_type=Text()), nullable=True) additional_metadata = Column(JSONB(astext_type=Text()), nullable=True)
coordinate_validator_id = Column(ForeignKey(AuthUser.id, deferrable=True, initially='DEFERRED'), nullable=False, index=True) coordinate_validator_id = Column(ForeignKey(AuthUser.id, deferrable=True, initially='DEFERRED'), nullable=False, index=True)
...@@ -110,3 +112,6 @@ class StationmetaCore(Base): ...@@ -110,3 +112,6 @@ class StationmetaCore(Base):
# cv_vocabulary = relationship('CvVocabulary') # cv_vocabulary = relationship('CvVocabulary')
# ta_vocabulary = relationship('TaVocabulary') # ta_vocabulary = relationship('TaVocabulary')
# st_vocabulary = relationship('StVocabulary') # st_vocabulary = relationship('StVocabulary')
class StationmetaCore(StationmetaCore_WithoutCoords):
coordinates = Column(Geometry('POINTZ', 4326))
...@@ -23,6 +23,11 @@ class Coordinates(BaseModel): ...@@ -23,6 +23,11 @@ class Coordinates(BaseModel):
# ======== StationmetaCore ========= # ======== StationmetaCore =========
class StationmetaCoreStub(BaseModel):
id: int = None
name: str
class StationmetaCoreBase(BaseModel): class StationmetaCoreBase(BaseModel):
id: int = None id: int = None
codes: List[str] = [] codes: List[str] = []
...@@ -34,7 +39,6 @@ class StationmetaCoreBase(BaseModel): ...@@ -34,7 +39,6 @@ class StationmetaCoreBase(BaseModel):
coordinate_validation_date: dt.datetime coordinate_validation_date: dt.datetime
type_of_environment: str type_of_environment: str
type_of_area: str type_of_area: str
category: str
timezone: str timezone: str
additional_metadata: Json additional_metadata: Json
coordinate_validator_id: int coordinate_validator_id: int
......
...@@ -112,7 +112,8 @@ class Timeseries(Base): ...@@ -112,7 +112,8 @@ class Timeseries(Base):
programme_id = Column(ForeignKey(TimeseriesProgramme.id)) programme_id = Column(ForeignKey(TimeseriesProgramme.id))
# for the nested view # for the nested view
station = relationship('StationmetaCore') # problems with station and coordinates in nested views!!!
station = relationship('StationmetaCore_WithoutCoords')
variable = relationship('Variable') variable = relationship('Variable')
programme = relationship('TimeseriesProgramme') programme = relationship('TimeseriesProgramme')
......
...@@ -4,7 +4,7 @@ Pydantic schemas for TOAR database ...@@ -4,7 +4,7 @@ Pydantic schemas for TOAR database
""" """
from typing import List from typing import List, Any
from pydantic import BaseModel, Json, validator from pydantic import BaseModel, Json, validator
import datetime as dt import datetime as dt
...@@ -12,10 +12,16 @@ from toardb.generic.models import RS_enum, RC_enum ...@@ -12,10 +12,16 @@ from toardb.generic.models import RS_enum, RC_enum
from .models import DA_enum, SF_enum, AT_enum, DS_enum, MM_enum from .models import DA_enum, SF_enum, AT_enum, DS_enum, MM_enum
from toardb.variables.schemas import Variable from toardb.variables.schemas import Variable
#from toardb.stationmeta.schemas import StationmetaCoreCreate #from toardb.stationmeta.schemas import StationmetaCoreCreate
#from toardb.stationmeta.schemas import StationmetaCoreBase
#from toardb.stationmeta.schemas import StationmetaCore
#from toardb.stationmeta.schemas import StationmetaCreate
#from toardb.stationmeta.schemas import StationmetaBase
#from toardb.stationmeta.schemas import Stationmeta
from toardb.stationmeta.schemas import StationmetaCoreStub
# ======== Timeseries ========= # ======== Timeseries =========
class TimeseriesCoreBase(BaseModel): class TimeseriesCoreBaseStub(BaseModel):
id: int = None id: int = None
label: str label: str
order: int order: int
...@@ -29,9 +35,6 @@ class TimeseriesCoreBase(BaseModel): ...@@ -29,9 +35,6 @@ class TimeseriesCoreBase(BaseModel):
sampling_height: float sampling_height: float
date_added: dt.datetime date_added: dt.datetime
date_modified: dt.datetime date_modified: dt.datetime
station_id: int
variable_id: int
programme_id: int
additional_metadata: Json additional_metadata: Json
@validator('access_rights') @validator('access_rights')
...@@ -55,6 +58,12 @@ class TimeseriesCoreBase(BaseModel): ...@@ -55,6 +58,12 @@ class TimeseriesCoreBase(BaseModel):
return tuple(filter(lambda x: x.value == int(v), MM_enum))[0].string return tuple(filter(lambda x: x.value == int(v), MM_enum))[0].string
class TimeseriesCoreBase(TimeseriesCoreBaseStub):
station_id: int
variable_id: int
programme_id: int
class TimeseriesCoreCreate(TimeseriesCoreBase): class TimeseriesCoreCreate(TimeseriesCoreBase):
pass pass
...@@ -185,11 +194,22 @@ class TimeseriesProgramme(TimeseriesProgrammeBase): ...@@ -185,11 +194,22 @@ class TimeseriesProgramme(TimeseriesProgrammeBase):
# ======== for nested view/upload ========= # ======== for nested view/upload =========
class TimeseriesBase(TimeseriesCoreBase): class TimeseriesBase(TimeseriesCoreBaseStub):
roles: List[TimeseriesRole] = None roles: List[TimeseriesRole] = None
annotations: List[TimeseriesAnnotation] = None annotations: List[TimeseriesAnnotation] = None
variable: Variable variable: Variable
# station: StationmetaCoreCreate # station: StationmetaCoreCreate
# station: StationmetaCoreBase
# station: StationmetaCore
# station: StationmetaCreate
# station: StationmetaBase
# station: Stationmeta
# station: StationmetaCoreStub
# None of the above is working for station
# ==> therefore now go with Any!
# (which means not showing human readable controlled vocabulary!)
# ==> still to be investigated!
station: Any
programme: TimeseriesProgramme programme: TimeseriesProgramme
class Config: class Config:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment