Coverage for toardb/data/schemas.py: 100%
52 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-03 20:32 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2025-11-03 20:32 +0000
1# SPDX-FileCopyrightText: 2021 Forschungszentrum Jülich GmbH
2# SPDX-License-Identifier: MIT
4"""
5Pydantic schemas for TOAR database
7"""
9from typing import List, Any
11from pydantic import BaseModel, validator, Field, Json
12import datetime as dt
13import toardb
15class DataBase(BaseModel):
16 datetime: dt.datetime = Field(..., description="date and time of observation")
17 value: float = Field(..., description="variable value at datetime")
18 flags: str = Field(..., description="flag (see controlled vocabulary: Data Flag)")
19 timeseries_id: int = Field(..., description="ID of timeseries")
20 version: str = Field(..., description="version")
22 @validator('flags')
23 def check_flags(cls, v):
24 try:
25 return tuple(filter(lambda x: x.value == int(v), toardb.toardb.DF_vocabulary))[0].display_str
26 except:
27 return v
29 @validator('version')
30 def convert_version(cls, v):
31 try:
32 major,minor,micro = v.split('.')
33 if int(micro) != 0:
34 return f"{int(major)}.{int(minor)}.{int(micro)}"
35 else:
36 return f"{int(major)}.{int(minor)}"
37 except:
38 return v
41class DataPatch(DataBase):
42 pass
44 @validator('flags')
45 def check_flags(cls, v):
46 return int(v)
48 @validator('version')
49 def convert_version(cls, v):
50 # do not touch version string!
51 return v
54class DataCreate(DataBase):
55 pass
57 @validator('flags')
58 def check_flags(cls, v):
59 return int(v)
62 @validator('version')
63 def convert_version(cls, v):
64 # do not touch version string!
65 return v
68class Data(DataBase):
69 datetime: dt.datetime = None
70 value: float = None
71 flags: str = None
72 timeseries_id: int = None
73 version: str = None
75 class Config:
76 orm_mode = True
79class Composite(BaseModel):
80 metadata: Any = Field(..., description="all metadata available to the data")
81 data: List[Data] = Field(..., description="the data itself")