diff --git a/toardb/auth_user/models.py b/toardb/auth_user/models.py index 9284dd15d552b0e9932e39167e3d049a05da65d4..f00765d2e55ec5b800b1b65947c8e053afe57d50 100644 --- a/toardb/auth_user/models.py +++ b/toardb/auth_user/models.py @@ -1,4 +1,3 @@ -# coding: utf-8 from sqlalchemy import ARRAY, BigInteger, Boolean, CheckConstraint, Column, DateTime, Float, ForeignKey, \ Index, Integer, SmallInteger, String, Table, Text, UniqueConstraint, text, Sequence from sqlalchemy.orm import relationship diff --git a/toardb/base.py b/toardb/base.py index 531e94bff4f9baa3766cdbf1cbd87bece716803a..c1cfda241073249584d8c76ecd8e925909c41087 100644 --- a/toardb/base.py +++ b/toardb/base.py @@ -1,4 +1,3 @@ -# coding: utf-8 from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() diff --git a/toardb/contacts/crud.py b/toardb/contacts/crud.py index 49e1d4f50a88091f2054395d92fe4436904c8db0..a4fd3ff0d7739ccbf552155ebc97bad3d668504a 100644 --- a/toardb/contacts/crud.py +++ b/toardb/contacts/crud.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Create, Read, Update, Delete functionality @@ -7,10 +6,9 @@ Create, Read, Update, Delete functionality from sqlalchemy.orm import Session from fastapi.responses import JSONResponse from . import models -from .models import OK_enum -from toardb.stationmeta.models import CN_enum from .schemas import PersonCreate, OrganisationCreate from toardb.utils.utils import get_value_from_str +import toardb def get_organisation(db: Session, organisation_id: int): @@ -27,8 +25,8 @@ def get_organisation_by_name(db: Session, name: str): def create_organisation(db: Session, organisation: OrganisationCreate): db_organisation = models.Organisation(**organisation.dict()) - db_organisation.kind = get_value_from_str(OK_enum,db_organisation.kind) - db_organisation.country = get_value_from_str(CN_enum,db_organisation.country) + db_organisation.kind = get_value_from_str(toardb.toardb.OK_vocabulary,db_organisation.kind) + db_organisation.country = get_value_from_str(toardb.toardb.CN_vocabulary,db_organisation.country) db.add(db_organisation) result = db.commit() db.refresh(db_organisation) diff --git a/toardb/contacts/models.py b/toardb/contacts/models.py index 014eb5e5dd611fd9cef71d719388e8412d615eb6..d8b8aa33baeedd645a28e70baf08b4b8ac7356cf 100644 --- a/toardb/contacts/models.py +++ b/toardb/contacts/models.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class Contact(Base) =================== @@ -23,19 +22,6 @@ OK_enum_table = Table("ok_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -OK_enum = ( - Enumdict(1, 'Government', 'government'), - Enumdict(2, 'Research', 'research'), - Enumdict(3, 'University', 'university'), - Enumdict(4, 'International', 'international'), - Enumdict(5, 'NonProfit', 'non-profit'), - Enumdict(6, 'Commercial', 'commercial'), - Enumdict(7, 'Individual', 'individual'), - Enumdict(8, 'Other', 'other') - ) CONTACTS_ID_SEQ = Sequence('contacts_id_seq') # define sequence explicitly class Contact(Base): diff --git a/toardb/contacts/models_organisation.py b/toardb/contacts/models_organisation.py index 59f15dfcd1375bdd9fb192e991e4f83fa4800c16..9a37ab4660e0a7da7c58fc054fe106f56246933d 100644 --- a/toardb/contacts/models_organisation.py +++ b/toardb/contacts/models_organisation.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class Organisation (Base) ========================= diff --git a/toardb/contacts/models_person.py b/toardb/contacts/models_person.py index e4071d6c51d310594c07d110411ecafba094cab1..d02a723593d344ab6ec955677c9b626c856a64bb 100644 --- a/toardb/contacts/models_person.py +++ b/toardb/contacts/models_person.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class Person (Base) =================== diff --git a/toardb/contacts/schemas.py b/toardb/contacts/schemas.py index 796bdd4305e7541035a869327a0a027f55dc90aa..6c52e68bea9c25632c0e44f6fb9a71c24af52b78 100644 --- a/toardb/contacts/schemas.py +++ b/toardb/contacts/schemas.py @@ -4,10 +4,9 @@ Pydantic schemas for TOAR database """ from typing import List, Dict, Any - from pydantic import BaseModel, validator, Field -from .models import OK_enum -from toardb.stationmeta.models import CN_enum +#from toardb.toardb import OK_vocabulary, CN_vocabulary +import toardb class OrganisationBase(BaseModel): id: int = Field(None, description="for internal use only") @@ -22,11 +21,11 @@ class OrganisationBase(BaseModel): @validator('kind') def check_kind(cls, v): - return tuple(filter(lambda x: x.value == int(v), OK_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.OK_vocabulary))[0].display_str @validator('country') def check_country(cls, v): - return tuple(filter(lambda x: x.value == int(v), CN_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CN_vocabulary))[0].display_str class OrganisationCreate(OrganisationBase): @@ -36,14 +35,14 @@ class OrganisationCreate(OrganisationBase): @validator('kind') def check_kind(cls, v): - if tuple(filter(lambda x: x.string == v, OK_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.OK_vocabulary)): return v else: raise ValueError(f"kind of organisation not known: {v}") @validator('country') def check_country(cls, v): - if tuple(filter(lambda x: x.string == v, CN_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.CN_vocabulary)): return v else: raise ValueError(f"country not known: {v}") diff --git a/toardb/data/crud.py b/toardb/data/crud.py index 092a1966bd6f251e4a3809ee39fe0d885aa6b56c..c4312706569a58af863d0dd6978be1dda51693f5 100644 --- a/toardb/data/crud.py +++ b/toardb/data/crud.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Create, Read, Update, Delete functionality @@ -13,15 +12,14 @@ from fastapi import File, UploadFile from typing import List from fastapi.responses import JSONResponse, FileResponse from . import models, schemas -from .models import DF_enum from toardb.variables import models as variables_models from toardb.stationmeta import models as stationmeta_models from toardb.stationmeta.crud import get_stationmeta_core from toardb.stationmeta.schemas import get_coordinates_from_geom, get_geom_from_coordinates from toardb.timeseries.models import TimeseriesChangelog from toardb.timeseries.crud import get_timeseries_by_unique_constraints -from toardb.generic.models import CL_enum from toardb.utils.utils import get_value_from_str, get_str_from_value +import toardb from autoqc.autoqc.autoqc_runner import run_autoqc import datetime as dt import pandas as pd @@ -61,7 +59,7 @@ def get_all_data(db: Session, skip : int = 0, limit: int = 100): def create_data_record(db: Session, engine: Engine, series_id: int, datetime: dt.datetime, value: float, flag: str, version: str): - flag_num = get_value_from_str(DF_enum,flag) + flag_num = get_value_from_str(toardb.toardb.DF_vocabulary,flag) data_dict = {"datetime": datetime, "value": value, "flags": flag_num, @@ -115,7 +113,7 @@ def insert_dataframe (db: Session, engine: Engine, df: pd.DataFrame, with_autoqc # flags = flags.where(flags == ' Erroneous ','ErroneousValidatedUnconfirmed') flags = flags.where(flags == ' Erroneous ','ErroneousValidatedConfirmed') # exchange combined flags in dataframe - flag_num = [get_value_from_str(DF_enum,flag.strip()) for flag in flags] + flag_num = [get_value_from_str(toardb.toardb.DF_vocabulary,flag.strip()) for flag in flags] del df['flags'] df.insert(1, 'flags', flag_num) if dry_run: @@ -192,7 +190,7 @@ def create_data(db: Session, engine: Engine, input_handle: UploadFile = File(... def create_bulk_data(db: Session, engine: Engine, bulk: List[schemas.DataCreate], with_autoqc: bool = False, dry_run: bool = False): df = pd.DataFrame([x.dict() for x in bulk]).set_index("datetime") - flag_num = [get_value_from_str(DF_enum,flag) for flag in df['flags']] + flag_num = [get_value_from_str(toardb.toardb.DF_vocabulary,flag) for flag in df['flags']] del df['flags'] df.insert(1, 'flags', flag_num) insert_result = insert_dataframe (db, engine, df, with_autoqc=with_autoqc, dry_run=dry_run) @@ -289,7 +287,7 @@ def patch_data(db: Session, engine: Engine, description: str, version: str, inpu # how to determine type_of_change? # 4 – unspecified data value corrections (this holds also, if there is only one single value to be corrected; the addition "unspecified" keeps all possibilities open to add "specified" corrections later (e. g. from QC) # 5 – replaced data with a new version - type_of_change = get_value_from_str(CL_enum,"UnspecifiedData") + type_of_change = get_value_from_str(toardb.toardb.CL_vocabulary,"UnspecifiedData") db_changelog = TimeseriesChangelog(description=description, timeseries_id=timeseries_id, author_id=1, type_of_change=type_of_change, old_value="", new_value="", period_start=period_start, period_end=period_end, version=version) db.add(db_changelog) diff --git a/toardb/data/fixtures/data.json b/toardb/data/fixtures/data.json index 73f1c9a4300053c5b7cc7816e37f457badbd2ffd..de55906e59ec51266da33b7fa4c198c05398ea42 100644 --- a/toardb/data/fixtures/data.json +++ b/toardb/data/fixtures/data.json @@ -1,69 +1,69 @@ [ { - "datetime":"2012-12-16 21:00:00+01", + "datetime":"2012-12-16 21:00:00+00", "value":21.581, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-16 22:00:00+01", + "datetime":"2012-12-16 22:00:00+00", "value":13.734, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-16 23:00:00+01", + "datetime":"2012-12-16 23:00:00+00", "value":13.734, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 00:00:00+01", + "datetime":"2012-12-17 00:00:00+00", "value":7.848, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 01:00:00+01", + "datetime":"2012-12-17 01:00:00+00", "value":15.696, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 02:00:00+01", + "datetime":"2012-12-17 02:00:00+00", "value":11.772, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 03:00:00+01", + "datetime":"2012-12-17 03:00:00+00", "value":13.734, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 04:00:00+01", + "datetime":"2012-12-17 04:00:00+00", "value":19.62, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 05:00:00+01", + "datetime":"2012-12-17 05:00:00+00", "value":15.696, "flags":0, "timeseries_id":1, "version":"000001.000000.00000000000000" }, { - "datetime":"2012-12-17 06:00:00+01", + "datetime":"2012-12-17 06:00:00+00", "value":5.886, "flags":0, "timeseries_id":1, diff --git a/toardb/data/models.py b/toardb/data/models.py index f9d5ec21f9a1d98f4246f57cd7fda006e9e72395..8cdc61a8bcb7ad17bc42479c3df3b31bde33545f 100644 --- a/toardb/data/models.py +++ b/toardb/data/models.py @@ -1,4 +1,3 @@ -# coding: utf-8 from sqlalchemy import PrimaryKeyConstraint, Column, DateTime, Float, ForeignKey, Integer, text, \ Table, String, CHAR from sqlalchemy.orm import relationship @@ -103,30 +102,4 @@ DF_enum_table = Table("df_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -DF_enum = ( - Enumdict( 0, 'OKValidatedVerified', 'OK validated verified'), - Enumdict( 1, 'OKValidatedQCPassed', 'OK validated QC passed'), - Enumdict( 2, 'OKValidatedModified', 'OK validated modified'), - Enumdict( 3, 'OKPreliminaryVerified', 'OK preliminary verified'), - Enumdict( 4, 'OKPreliminaryQCPassed', 'OK preliminary QC passed'), - Enumdict( 5, 'OKPreliminaryModified', 'OK preliminary modified'), - Enumdict( 6, 'OKEstimated', 'OK estimated'), - Enumdict(10, 'QuestionnableValidatedConfirmed', 'questionnable validated confirmed'), - Enumdict(11, 'QuestionnableValidatedUnconfirmed', 'questionnable validated unconfirmed'), - Enumdict(12, 'QuestionnableValidatedFlagged', 'questionnable validated flagged'), - Enumdict(13, 'QuestionnablePreliminaryConfirmed', 'questionnable preliminary confirmed'), - Enumdict(14, 'QuestionnablePreliminaryUnconfirmed', 'questionnable preliminary unconfirmed'), - Enumdict(15, 'QuestionnablePreliminaryFlagged', 'questionnable preliminary flagged'), - Enumdict(20, 'ErroneousValidatedConfirmed', 'erroneous validated confirmed'), - Enumdict(21, 'ErroneousValidatedUnconfirmed', 'erroneous validated unconfirmed'), - Enumdict(22, 'ErroneousValidatedFlagged', 'erroneous validated flagged'), - Enumdict(23, 'ErroneousPreliminaryConfirmed', 'erroneous preliminary confirmed'), - Enumdict(24, 'ErroneousPreliminaryUnconfirmed', 'erroneous preliminary unconfirmed'), - Enumdict(25, 'ErroneousPreliminaryFlagged', 'erroneous preliminary flagged'), - Enumdict(90, 'MissingValue', 'missing value'), - Enumdict(91, 'UnknownQualityStatus', 'unknown quality status') - ) diff --git a/toardb/data/schemas.py b/toardb/data/schemas.py index 08ac297308fe72be0f81c6b21e982e8ab8b7312e..fa3c9eb1d35cf3354ef5fdf6bf6df1cb30fc5499 100644 --- a/toardb/data/schemas.py +++ b/toardb/data/schemas.py @@ -7,7 +7,7 @@ from typing import List from pydantic import BaseModel, validator, Field import datetime as dt -from .models import DF_enum +import toardb class DataBase(BaseModel): datetime: dt.datetime = Field(..., description="date and time of observation") @@ -18,14 +18,14 @@ class DataBase(BaseModel): @validator('flags') def check_flags(cls, v): - return tuple(filter(lambda x: x.value == int(v), DF_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.DF_vocabulary))[0].display_str class DataCreate(DataBase): pass @validator('flags') def check_flags(cls, v): - if tuple(filter(lambda x: x.string == v, DF_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.DF_vocabulary)): return v else: raise ValueError(f"data flag not known: {v}") diff --git a/toardb/data/test_data.py b/toardb/data/test_data.py index 15b36937f64bbc1506b0418816557721869af3d9..78b6e1a77b9af33e3261b2e3488391159c75ae8d 100644 --- a/toardb/data/test_data.py +++ b/toardb/data/test_data.py @@ -151,10 +151,10 @@ class TestApps: response = client.get("/data/?limit=4") expected_status_code = 200 assert response.status_code == expected_status_code - expected_resp = [{'datetime': '2012-12-16T21:00:00+01:00', 'value': 21.581, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-16T22:00:00+01:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-16T23:00:00+01:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T00:00:00+01:00', 'value': 7.848, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}] + expected_resp = [{'datetime': '2012-12-16T21:00:00+00:00', 'value': 21.581, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-16T22:00:00+00:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-16T23:00:00+00:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T00:00:00+00:00', 'value': 7.848, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}] assert response.json() == expected_resp @@ -162,16 +162,16 @@ class TestApps: response = client.get("/data/1") expected_status_code = 200 assert response.status_code == expected_status_code - expected_resp = [{'datetime': '2012-12-16T21:00:00+01:00', 'value': 21.581, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-16T22:00:00+01:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-16T23:00:00+01:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T00:00:00+01:00', 'value': 7.848, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T01:00:00+01:00', 'value': 15.696, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T02:00:00+01:00', 'value': 11.772, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T03:00:00+01:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T04:00:00+01:00', 'value': 19.62, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T05:00:00+01:00', 'value': 15.696, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, - {'datetime': '2012-12-17T06:00:00+01:00', 'value': 5.886, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}] + expected_resp = [{'datetime': '2012-12-16T21:00:00+00:00', 'value': 21.581, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-16T22:00:00+00:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-16T23:00:00+00:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T00:00:00+00:00', 'value': 7.848, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T01:00:00+00:00', 'value': 15.696, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T02:00:00+00:00', 'value': 11.772, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T03:00:00+00:00', 'value': 13.734, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T04:00:00+00:00', 'value': 19.62, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T05:00:00+00:00', 'value': 15.696, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}, + {'datetime': '2012-12-17T06:00:00+00:00', 'value': 5.886, 'flags': 'OK validated verified', 'version': '000001.000000.00000000000000', 'timeseries_id': 1}] assert response.json() == expected_resp diff --git a/toardb/generic/models.py b/toardb/generic/models.py index 6222dffbdee9456015cb2430f6bbb07103bea4c7..8d0798a56a7f99999bbf9b2c65969f18d2e83fd9 100644 --- a/toardb/generic/models.py +++ b/toardb/generic/models.py @@ -14,14 +14,6 @@ RS_enum_table = Table("rs_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -RS_enum = ( - Enumdict(0, 'active', 'active'), - Enumdict(1, 'inactive', 'inactive'), - Enumdict(2, 'unknown', 'unknown') - ) # Role Codes RC_enum_table = Table("rc_vocabulary", @@ -30,15 +22,6 @@ RC_enum_table = Table("rc_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -RC_enum = ( - Enumdict(0, 'PointOfContact', 'point of contact'), - Enumdict(1, 'PrincipalInvestigator', 'principal investigator'), - Enumdict(2, 'Originator', 'originator'), - Enumdict(3, 'Contributor', 'contributor'), - Enumdict(4, 'Collaborator', 'collaborator'), - Enumdict(5, 'ResourceProvider', 'resource provider') - ) # Changelog: Type of Change CL_enum_table = Table("cl_vocabulary", @@ -47,18 +30,6 @@ CL_enum_table = Table("cl_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -CL_enum = ( - Enumdict(0, 'Created', 'created'), - Enumdict(1, 'SingleValue', 'single value correction in metadata'), - Enumdict(2, 'Comprehensive', 'comprehensive metadata revision'), - Enumdict(3, 'Typo', 'typographic correction of metadata'), - Enumdict(4, 'UnspecifiedData', 'unspecified data value corrections'), - Enumdict(5, 'Replaced', 'replaced data with a new version'), - Enumdict(6, 'Flagging', 'data value flagging') - ) ## Annotations @@ -69,11 +40,4 @@ AK_enum_table = Table("ak_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -AK_enum = ( - Enumdict(0, 'User', 'user comment'), - Enumdict(1, 'Provider', 'provider comment') - ) - + diff --git a/toardb/stationmeta/crud.py b/toardb/stationmeta/crud.py index 210ba50453b954d6818dfc887a1d34d50ea83a37..2c6cc3b565b3473ed2f9de6b96900bb77f6c6a62 100644 --- a/toardb/stationmeta/crud.py +++ b/toardb/stationmeta/crud.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Create, Read, Update, Delete functionality @@ -15,14 +14,13 @@ from fastapi import File, UploadFile from fastapi.responses import JSONResponse from . import models from .models import StationmetaCore, StationmetaChangelog, stationmeta_core_stationmeta_roles_table, \ - stationmeta_core_stationmeta_annotations_table, \ - CZ_enum, CV_enum, ST_enum, TA_enum, TC_enum, CN_enum, TZ_enum -from toardb.generic.models import RS_enum, RC_enum, AK_enum, CL_enum + stationmeta_core_stationmeta_annotations_table from .schemas import get_coordinates_from_geom, get_geom_from_coordinates, \ StationmetaCreate, StationmetaPatch, Coordinates from pydantic import ValidationError from toardb.utils.utils import get_value_from_str, get_str_from_value import json +import toardb def get_stationmeta_core(db: Session, station_code: str): @@ -182,11 +180,11 @@ def create_stationmeta(db: Session, engine: Engine, stationmeta: StationmetaCrea else: status_code=200 message=f'new station: {db_stationmeta.codes},{db_stationmeta.name},{db_stationmeta.coordinates}' - db_stationmeta.country = get_value_from_str(CN_enum,db_stationmeta.country) - db_stationmeta.timezone = get_value_from_str(TZ_enum,db_stationmeta.timezone) - 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) - db_stationmeta.coordinate_validation_status = get_value_from_str(CV_enum,db_stationmeta.coordinate_validation_status) + db_stationmeta.country = get_value_from_str(toardb.toardb.CN_vocabulary,db_stationmeta.country) + db_stationmeta.timezone = get_value_from_str(toardb.toardb.TZ_vocabulary,db_stationmeta.timezone) + db_stationmeta.type_of_environment = get_value_from_str(toardb.toardb.ST_vocabulary,db_stationmeta.type_of_environment) + db_stationmeta.type_of_area = get_value_from_str(toardb.toardb.TA_vocabulary,db_stationmeta.type_of_area) + db_stationmeta.coordinate_validation_status = get_value_from_str(toardb.toardb.CV_vocabulary,db_stationmeta.coordinate_validation_status) db.add(db_stationmeta) result = db.commit() db.refresh(db_stationmeta) @@ -196,8 +194,8 @@ def create_stationmeta(db: Session, engine: Engine, stationmeta: StationmetaCrea if roles_data: for r in roles_data: db_role = models.StationmetaRole(**r) - db_role.role = get_value_from_str(RC_enum,db_role.role) - db_role.status = get_value_from_str(RS_enum,db_role.status) + db_role.role = get_value_from_str(toardb.toardb.RC_vocabulary,db_role.role) + db_role.status = get_value_from_str(toardb.toardb.RS_vocabulary,db_role.status) # check whether role is already present in database db_object = get_unique_stationmeta_role(db, db_role.role, db_role.contact_id, db_role.status) if db_object: @@ -252,9 +250,9 @@ def create_stationmeta(db: Session, engine: Engine, stationmeta: StationmetaCrea if globalmeta_data: db_global = models.StationmetaGlobal(**globalmeta_data) if db_global.climatic_zone: - db_global.climatic_zone = get_value_from_str(CZ_enum,db_global.climatic_zone) + db_global.climatic_zone = get_value_from_str(toardb.toardb.CZ_vocabulary,db_global.climatic_zone) if db_global.toar1_category: - db_global.toar1_category = get_value_from_str(TC_enum,db_global.toar1_category) + db_global.toar1_category = get_value_from_str(toardb.toardb.TC_vocabulary,db_global.toar1_category) db_global.station_id = stationmeta_core_id db.add(db_global) db.commit() @@ -285,9 +283,9 @@ def patch_stationmeta(db: Session, description: str, station_id: int, stationmet stationmeta_dict2 = {k: v for k, v in stationmeta_dict.items() if v is not None} number_of_elements = len(stationmeta_dict2) if (number_of_elements == 1): - type_of_change = get_value_from_str(CL_enum,"SingleValue") + type_of_change = get_value_from_str(toardb.toardb.CL_vocabulary,"SingleValue") else: - type_of_change = get_value_from_str(CL_enum,"Comprehensive") + type_of_change = get_value_from_str(toardb.toardb.CL_vocabulary,"Comprehensive") roles_data = stationmeta_dict.pop('roles', None) annotations_data = stationmeta_dict.pop('annotations', None) aux_images_data = stationmeta_dict.pop('aux_images', None) @@ -324,8 +322,8 @@ def patch_stationmeta(db: Session, description: str, station_id: int, stationmet old_value = old_value + "'roles': {" for oldr in db_old_roles: old_role = get_stationmeta_role_by_id(db, oldr.role_id) - old_value=old_value + "{'role': '" + get_str_from_value(RC_enum,old_role.role) + \ - "', 'status': '" + get_str_from_value(RS_enum,old_role.status) + \ + old_value=old_value + "{'role': '" + get_str_from_value(toardb.toardb.RC_vocabulary,old_role.role) + \ + "', 'status': '" + get_str_from_value(toardb.toardb.RS_vocabulary,old_role.status) + \ "', 'contact_id': " + str(old_role.contact_id) + '}' if (number_of_commas == 0): old_value=old_value + '}' @@ -334,8 +332,8 @@ def patch_stationmeta(db: Session, description: str, station_id: int, stationmet number_of_commas = number_of_commas - 1 for r in roles_data: db_role = models.StationmetaRole(**r) - db_role.role = get_value_from_str(RC_enum,db_role.role) - db_role.status = get_value_from_str(RS_enum,db_role.status) + db_role.role = get_value_from_str(toardb.toardb.RC_vocabulary,db_role.role) + db_role.status = get_value_from_str(toardb.toardb.RS_vocabulary,db_role.status) # check whether role is already present in database db_object = get_unique_stationmeta_role(db, db_role.role, db_role.contact_id, db_role.status) if db_object: @@ -354,10 +352,10 @@ def patch_stationmeta(db: Session, description: str, station_id: int, stationmet db_old_annotations = get_stationmeta_annotations(db, station_id) for olda in db_old_annotations: old_annotation = get_stationmeta_annotation_by_id(db, olda.annotation_id) - old_value=old_value + "{'kind': '" + get_str_from_value(RC_enum,old_role.kind) + \ - "', 'text': '" + get_str_from_value(RS_enum,old_role.status) + \ - "', 'date_added': '" + get_str_from_value(RS_enum,old_role.status) + \ - "', 'approved': '" + get_str_from_value(RS_enum,old_role.status) + \ + old_value=old_value + "{'kind': '" + get_str_from_value(toardb.toardb.RC_vocabulary,old_role.kind) + \ + "', 'text': '" + get_str_from_value(toardb.toardb.RS_vocabulary,old_role.status) + \ + "', 'date_added': '" + get_str_from_value(toardb.toardb.RS_vocabulary,old_role.status) + \ + "', 'approved': '" + get_str_from_value(toardb.toardb.RS_vocabulary,old_role.status) + \ "', 'contributor_id': " + str(old_role.contact_id) + '}' if (number_of_commas == 0): old_value=old_value + '}' @@ -405,7 +403,7 @@ def patch_stationmeta(db: Session, description: str, station_id: int, stationmet if globalmeta_data: db_global = models.StationmetaGlobal(**globalmeta_data) if db_global.climatic_zone: - db_global.climatic_zone = get_value_from_str(CZ_enum,db_global.climatic_zone) + db_global.climatic_zone = get_value_from_str(toardb.toardb.CZ_vocabulary,db_global.climatic_zone) db_global.station_id = station_id db.add(db_global) db.commit() @@ -444,7 +442,7 @@ def delete_stationmeta_field(db: Session, station_id: int, field: str): tmp_coordinates = db_stationmeta.coordinates db_stationmeta.coordinates = get_geom_from_coordinates(db_stationmeta.coordinates) # also write changelog entry - type_of_change = get_value_from_str(CL_enum,"SingleValue") + type_of_change = get_value_from_str(toardb.toardb.CL_vocabulary,"SingleValue") description=f"delete field {field}" old_value = get_field_from_record(db, station_id, field, db_stationmeta) db_changelog = StationmetaChangelog(description=description, station_id=station_id, author_id=1, type_of_change=type_of_change, diff --git a/toardb/stationmeta/models.py b/toardb/stationmeta/models.py index 54c8a8fa0a9c8abc1c541791ca533c1aa597b7ce..5a529d68593002f1f6af10c64c924e76f21da7dc 100644 --- a/toardb/stationmeta/models.py +++ b/toardb/stationmeta/models.py @@ -20,35 +20,6 @@ CZ_enum_table = Table("cz_vocabulary", Column("enum_display_str", String) ) - -# After loosing one day without solution, the following workaround is introduced! -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -#def __get_enum_dict(table: Table, db: Session = Depends(get_db)): -# This is not working (whereever I put it!) -- I have to investigate, how to do testing -# (and using tables in my testing environment!)" -# AND (EVEN MORE IMPORTANT): -# How to load enum_dicts once?! -# This is important to be able to use the enum_dicts within the validator of the pydantic model -# The following code is just a workaround: -CZ_enum = ( - Enumdict(-1, 'Undefined', 'undefined'), - Enumdict( 0, 'Unclassified', 'unclassified'), - Enumdict( 1, 'WarmTemperateMoist', 'warm temperate moist'), - Enumdict( 2, 'WarmTemperateDry', 'warm temperate dry'), - Enumdict( 3, 'CoolTemperateMoist', 'cool temperate moist'), - Enumdict( 4, 'CoolTemperateDry', 'cool temperate dry'), - Enumdict( 5, 'PolarMoist', 'polar moist'), - Enumdict( 6, 'PolarDry', 'polar dry'), - Enumdict( 7, 'BorealMoist', 'boreal moist'), - Enumdict( 8, 'BorealDry', 'boreal dry'), - Enumdict( 9, 'TropicalMontane', 'tropical montane'), - Enumdict(10, 'TropicalWet', 'tropical wet'), - Enumdict(11, 'TropicalMoist', 'tropical moist'), - Enumdict(12, 'TropicalDry', 'tropical dry') - ) - - # Station Coordinate Validity CV_enum_table = Table("cv_vocabulary", Base.metadata, @@ -56,14 +27,6 @@ CV_enum_table = Table("cv_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -CV_enum = ( - Enumdict(0, 'NotChecked', 'not checked'), - Enumdict(1, 'Verified', 'verified'), - Enumdict(2, 'Plausible', 'plausible'), - Enumdict(3, 'Doubtful', 'doubtful'), - Enumdict(4, 'Unverifyable', 'not verifyable') - ) # Station Types ST_enum_table = Table("st_vocabulary", @@ -72,13 +35,6 @@ ST_enum_table = Table("st_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -ST_enum = ( - Enumdict(0, 'Unknown', 'unknown'), - Enumdict(1, 'Background', 'background'), - Enumdict(2, 'Traffic', 'traffic'), - Enumdict(3, 'Industrial', 'industrial') - ) # Station Types of Area TA_enum_table = Table("ta_vocabulary", @@ -87,13 +43,6 @@ TA_enum_table = Table("ta_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -TA_enum = ( - Enumdict(0, 'Unknown', 'unknown'), - Enumdict(1, 'Urban', 'urban'), - Enumdict(2, 'Suburban', 'suburban'), - Enumdict(3, 'Rural', 'rural') - ) # Station TOAR Categories TC_enum_table = Table("tc_vocabulary", @@ -102,14 +51,6 @@ TC_enum_table = Table("tc_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -TC_enum = ( - Enumdict(-1, 'Unknown', 'unknown'), - Enumdict( 0, 'Unclassified', 'unclassified'), - Enumdict( 1, 'RuralLowElevation', 'rural low elevation'), - Enumdict( 2, 'RuralHighElevation', 'rural high elevation'), - Enumdict( 3, 'Urban', 'urban') - ) # Station HTAP Regions (TIER1) TR_enum_table = Table("tr_vocabulary", @@ -118,27 +59,6 @@ TR_enum_table = Table("tr_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -TR_enum = ( - Enumdict(-1, 'HTAPTier1Undefined', '-1 (undefined)'), - Enumdict( 1, 'HTAPTier1World', '1 (World)'), - Enumdict( 2, 'HTAPTier1OCN', '2 (OCN Non-arctic/Antarctic Ocean)'), - Enumdict( 3, 'HTAPTier1NAM', '3 (NAM US+Canada (upto 66 N; polar circle))'), - Enumdict( 4, 'HTAPTier1EUR', '4 (EUR Western + Eastern EU+Turkey (upto 66 N polar circle))'), - Enumdict( 5, 'HTAPTier1SAS', '5 (SAS South Asia: India, Nepal, Pakistan, Afghanistan, Bangadesh, Sri Lanka)'), - Enumdict( 6, 'HTAPTier1EAS', '6 (EAS East Asia: China, Korea, Japan)'), - Enumdict( 7, 'HTAPTier1SEA', '7 (SEA South East Asia)'), - Enumdict( 8, 'HTAPTier1PAN', '8 (PAN Pacific, Australia+ New Zealand)'), - Enumdict( 9, 'HTAPTier1NAF', '9 (NAF Northern Africa+Sahara+Sahel)'), - Enumdict(10, 'HTAPTier1SAF', '10 (SAF Sub Saharan/sub Sahel Africa)'), - Enumdict(11, 'HTAPTier1MDE', '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)'), - Enumdict(12, 'HTAPTier1MCA', '12 (MCA Mexico, Central America, Caribbean, Guyanas, Venezuela, Columbia)'), - Enumdict(13, 'HTAPTier1SAM', '13 (SAM S. America)'), - Enumdict(14, 'HTAPTier1RBU', '14 (RBU Russia, Belarussia, Ukraine)'), - Enumdict(15, 'HTAPTier1CAS', '15 (CAS Central Asia)'), - Enumdict(16, 'HTAPTier1NPO', '16 (NPO Arctic Circle (North of 66 N) + Greenland)'), - Enumdict(17, 'HTAPTier1SPO', '17 (SPO Antarctic)') - ) # Station Dominant Landcover Types DL_enum_table = Table("dl_vocabulary", @@ -147,28 +67,6 @@ DL_enum_table = Table("dl_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -DL_enum = ( - Enumdict( -1, 'Undefined', '-1 (undefined)'), - Enumdict( 0, 'Water', '0 (Water)'), - Enumdict( 1, 'EGNeedleleaf', '1 (Evergreen Needleleaf forest)'), - Enumdict( 2, 'EGBroadleaf', '2 (Evergreen Broadleaf forest)'), - Enumdict( 3, 'DCNeedleleaf', '3 (Deciduous Needleleaf forest)'), - Enumdict( 4, 'DCBroadleaf', '4 (Deciduous Broadleaf forest)'), - Enumdict( 5, 'MixedForest', '5 (Mixed forest)'), - Enumdict( 6, 'ClosedShrublands', '6 (Closed shrublands)'), - Enumdict( 7, 'OpenShrublands', '7 (Open shrublands)'), - Enumdict( 8, 'WoodySavannas', '8 (Woody savannas)'), - Enumdict( 9, 'Savannas', '9 (Savannas)'), - Enumdict( 10, 'Grasslands', '10 (Grasslands)'), - Enumdict( 11, 'Wetlands', '11 (Permanent wetlands)'), - Enumdict( 12, 'Croplands', '12 (Croplands)'), - Enumdict( 13, 'Urban', '13 (Urban and built-up)'), - Enumdict( 14, 'Mosaic', '14 (Cropland/Natural vegetation mosaic)'), - Enumdict( 15, 'Snow', '15 (Snow and ice)'), - Enumdict( 16, 'Barren', '16 (Barren or sparsely vegetated)'), - Enumdict(255, 'Fill', '255 (Fill Value/Unclassified)') - ) # Result Types RT_enum_table = Table("rt_vocabulary", @@ -177,12 +75,6 @@ RT_enum_table = Table("rt_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -RT_enum = ( - Enumdict(0, 'String', 'str'), - Enumdict(1, 'Integer', 'int'), - Enumdict(2, 'Float', 'float') - ) # Country names CN_enum_table = Table("cn_vocabulary", @@ -191,260 +83,6 @@ CN_enum_table = Table("cn_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -CN_enum = ( - Enumdict(-1, 'N/A', 'N/A'), - Enumdict(0, 'AF', 'Afghanistan'), - Enumdict(1, 'AX', 'Åland Islands'), - Enumdict(2, 'AL', 'Albania'), - Enumdict(3, 'DZ', 'Algeria'), - Enumdict(4, 'AS', 'American Samoa'), - Enumdict(5, 'AD', 'Andorra'), - Enumdict(6, 'AO', 'Angola'), - Enumdict(7, 'AI', 'Anguilla'), - Enumdict(8, 'AQ', 'Antarctica'), - Enumdict(9, 'AG', 'Antigua and Barbuda'), - Enumdict(10, 'AR', 'Argentina'), - Enumdict(11, 'AM', 'Armenia'), - Enumdict(12, 'AW', 'Aruba'), - Enumdict(13, 'AU', 'Australia'), - Enumdict(14, 'AT', 'Austria'), - Enumdict(15, 'AZ', 'Azerbaijan'), - Enumdict(16, 'BS', 'Bahamas'), - Enumdict(17, 'BH', 'Bahrain'), - Enumdict(18, 'BD', 'Bangladesh'), - Enumdict(19, 'BB', 'Barbados'), - Enumdict(20, 'BY', 'Belarus'), - Enumdict(21, 'BE', 'Belgium'), - Enumdict(22, 'BZ', 'Belize'), - Enumdict(23, 'BJ', 'Benin'), - Enumdict(24, 'BM', 'Bermuda'), - Enumdict(25, 'BT', 'Bhutan'), - Enumdict(26, 'BO', 'Plurinational State of Bolivia'), - Enumdict(27, 'BQ', 'Bonaire, Sint Eustatius and Saba'), - Enumdict(28, 'BA', 'Bosnia and Herzegovina'), - Enumdict(29, 'BW', 'Botswana'), - Enumdict(30, 'BV', 'Bouvet Island'), - Enumdict(31, 'BR', 'Brazil'), - Enumdict(32, 'IO', 'British Indian Ocean Territory'), - Enumdict(33, 'UM', 'United States Minor Outlying Islands'), - Enumdict(34, 'VG', 'British Virgin Islands'), - Enumdict(35, 'VI', 'U.S. Virgin Islands'), - Enumdict(36, 'BN', 'Brunei Darussalam'), - Enumdict(37, 'BG', 'Bulgaria'), - Enumdict(38, 'BF', 'Burkina Faso'), - Enumdict(39, 'BI', 'Burundi'), - Enumdict(40, 'KH', 'Cambodia'), - Enumdict(41, 'CM', 'Cameroon'), - Enumdict(42, 'CA', 'Canada'), - Enumdict(43, 'CV', 'Cabo Verde'), - Enumdict(44, 'KY', 'Cayman Islands'), - Enumdict(45, 'CF', 'Central African Republic'), - Enumdict(46, 'TD', 'Chad'), - Enumdict(47, 'CL', 'Chile'), - Enumdict(48, 'CN', 'China'), - Enumdict(49, 'CX', 'Christmas Island'), - Enumdict(50, 'CC', 'Cocos (Keeling) Islands'), - Enumdict(51, 'CO', 'Colombia'), - Enumdict(52, 'KM', 'Comoros'), - Enumdict(53, 'CG', 'Congo'), - Enumdict(54, 'CD', 'Democratic Republic of the Congo'), - Enumdict(55, 'CK', 'Cook Islands'), - Enumdict(56, 'CR', 'Costa Rica'), - Enumdict(57, 'HR', 'Croatia'), - Enumdict(58, 'CU', 'Cuba'), - Enumdict(59, 'CW', 'Curaçao'), - Enumdict(60, 'CY', 'Cyprus'), - Enumdict(61, 'CZ', 'Czech Republic'), - Enumdict(62, 'DK', 'Denmark'), - Enumdict(63, 'DJ', 'Djibouti'), - Enumdict(64, 'DM', 'Dominica'), - Enumdict(65, 'DO', 'Dominican Republic'), - Enumdict(66, 'EC', 'Ecuador'), - Enumdict(67, 'EG', 'Egypt'), - Enumdict(68, 'SV', 'El Salvador'), - Enumdict(69, 'GQ', 'Equatorial Guinea'), - Enumdict(70, 'ER', 'Eritrea'), - Enumdict(71, 'EE', 'Estonia'), - Enumdict(72, 'ET', 'Ethiopia'), - Enumdict(73, 'FK', 'Falkland Islands (Malvinas)'), - Enumdict(74, 'FO', 'Faroe Islands'), - Enumdict(75, 'FJ', 'Fiji'), - Enumdict(76, 'FI', 'Finland'), - Enumdict(77, 'FR', 'France'), - Enumdict(78, 'GF', 'French Guiana'), - Enumdict(79, 'PF', 'French Polynesia'), - Enumdict(80, 'TF', 'French Southern Territories'), - Enumdict(81, 'GA', 'Gabon'), - Enumdict(82, 'GM', 'Gambia'), - Enumdict(83, 'GE', 'Georgia'), - Enumdict(84, 'DE', 'Germany'), - Enumdict(85, 'GH', 'Ghana'), - Enumdict(86, 'GI', 'Gibraltar'), - Enumdict(87, 'GR', 'Greece'), - Enumdict(88, 'GL', 'Greenland'), - Enumdict(89, 'GD', 'Grenada'), - Enumdict(90, 'GP', 'Guadeloupe'), - Enumdict(91, 'GU', 'Guam'), - Enumdict(92, 'GT', 'Guatemala'), - Enumdict(93, 'GG', 'Guernsey'), - Enumdict(94, 'GN', 'Guinea'), - Enumdict(95, 'GW', 'Guinea-Bissau'), - Enumdict(96, 'GY', 'Guyana'), - Enumdict(97, 'HT', 'Haiti'), - Enumdict(98, 'HM', 'Heard Island and McDonald Islands'), - Enumdict(99, 'VA', 'Holy See'), - Enumdict(100, 'HN', 'Honduras'), - Enumdict(101, 'HK', 'Hong Kong'), - Enumdict(102, 'HU', 'Hungary'), - Enumdict(103, 'IS', 'Iceland'), - Enumdict(104, 'IN', 'India'), - Enumdict(105, 'ID', 'Indonesia'), - Enumdict(106, 'CI', 'Côte d''Ivoire'), - Enumdict(107, 'IR', 'Islamic Republic of Iran'), - Enumdict(108, 'IQ', 'Iraq'), - Enumdict(109, 'IE', 'Ireland'), - Enumdict(110, 'IM', 'Isle of Man'), - Enumdict(111, 'IL', 'Israel'), - Enumdict(112, 'IT', 'Italy'), - Enumdict(113, 'JM', 'Jamaica'), - Enumdict(114, 'JP', 'Japan'), - Enumdict(115, 'JE', 'Jersey'), - Enumdict(116, 'JO', 'Jordan'), - Enumdict(117, 'KZ', 'Kazakhstan'), - Enumdict(118, 'KE', 'Kenya'), - Enumdict(119, 'KI', 'Kiribati'), - Enumdict(120, 'KW', 'Kuwait'), - Enumdict(121, 'KG', 'Kyrgyzstan'), - Enumdict(122, 'LA', 'Lao People''s Democratic Republic'), - Enumdict(123, 'LV', 'Latvia'), - Enumdict(124, 'LB', 'Lebanon'), - Enumdict(125, 'LS', 'Lesotho'), - Enumdict(126, 'LR', 'Liberia'), - Enumdict(127, 'LY', 'Libya'), - Enumdict(128, 'LI', 'Liechtenstein'), - Enumdict(129, 'LT', 'Lithuania'), - Enumdict(130, 'LU', 'Luxembourg'), - Enumdict(131, 'MO', 'Macao'), - Enumdict(132, 'MK', 'North Macedonia'), - Enumdict(133, 'MG', 'Madagascar'), - Enumdict(134, 'MW', 'Malawi'), - Enumdict(135, 'MY', 'Malaysia'), - Enumdict(136, 'MV', 'Maldives'), - Enumdict(137, 'ML', 'Mali'), - Enumdict(138, 'MT', 'Malta'), - Enumdict(139, 'MH', 'Marshall Islands'), - Enumdict(140, 'MQ', 'Martinique'), - Enumdict(141, 'MR', 'Mauritania'), - Enumdict(142, 'MU', 'Mauritius'), - Enumdict(143, 'YT', 'Mayotte'), - Enumdict(144, 'MX', 'Mexico'), - Enumdict(145, 'FM', 'Federated States of Micronesia'), - Enumdict(146, 'MD', 'Republic of Moldova'), - Enumdict(147, 'MC', 'Monaco'), - Enumdict(148, 'MN', 'Mongolia'), - Enumdict(149, 'ME', 'Montenegro'), - Enumdict(150, 'MS', 'Montserrat'), - Enumdict(151, 'MA', 'Morocco'), - Enumdict(152, 'MZ', 'Mozambique'), - Enumdict(153, 'MM', 'Myanmar'), - Enumdict(154, 'NA', 'Namibia'), - Enumdict(155, 'NR', 'Nauru'), - Enumdict(156, 'NP', 'Nepal'), - Enumdict(157, 'NL', 'Netherlands'), - Enumdict(158, 'NC', 'New Caledonia'), - Enumdict(159, 'NZ', 'New Zealand'), - Enumdict(160, 'NI', 'Nicaragua'), - Enumdict(161, 'NE', 'Niger'), - Enumdict(162, 'NG', 'Nigeria'), - Enumdict(163, 'NU', 'Niue'), - Enumdict(164, 'NF', 'Norfolk Island'), - Enumdict(165, 'KP', 'Democratic People''s Republic of Korea'), - Enumdict(166, 'MP', 'Northern Mariana Islands'), - Enumdict(167, 'NO', 'Norway'), - Enumdict(168, 'OM', 'Oman'), - Enumdict(169, 'PK', 'Pakistan'), - Enumdict(170, 'PW', 'Palau'), - Enumdict(171, 'PS', 'State of Palestine'), - Enumdict(172, 'PA', 'Panama'), - Enumdict(173, 'PG', 'Papua New Guinea'), - Enumdict(174, 'PY', 'Paraguay'), - Enumdict(175, 'PE', 'Peru'), - Enumdict(176, 'PH', 'Philippines'), - Enumdict(177, 'PN', 'Pitcairn'), - Enumdict(178, 'PL', 'Poland'), - Enumdict(179, 'PT', 'Portugal'), - Enumdict(180, 'PR', 'Puerto Rico'), - Enumdict(181, 'QA', 'Qatar'), - Enumdict(182, 'XK', 'Republic of Kosovo'), - Enumdict(183, 'RE', 'Réunion'), - Enumdict(184, 'RO', 'Romania'), - Enumdict(185, 'RU', 'Russian Federation'), - Enumdict(186, 'RW', 'Rwanda'), - Enumdict(187, 'BL', 'Saint Barthélemy'), - Enumdict(188, 'SH', 'Saint Helena, Ascension and Tristan da Cunha'), - Enumdict(189, 'KN', 'Saint Kitts and Nevis'), - Enumdict(190, 'LC', 'Saint Lucia'), - Enumdict(191, 'MF', 'Saint Martin (French part)'), - Enumdict(192, 'PM', 'Saint Pierre and Miquelon'), - Enumdict(193, 'VC', 'Saint Vincent and the Grenadines'), - Enumdict(194, 'WS', 'Samoa'), - Enumdict(195, 'SM', 'San Marino'), - Enumdict(196, 'ST', 'Sao Tome and Principe'), - Enumdict(197, 'SA', 'Saudi Arabia'), - Enumdict(198, 'SN', 'Senegal'), - Enumdict(199, 'RS', 'Serbia'), - Enumdict(200, 'SC', 'Seychelles'), - Enumdict(201, 'SL', 'Sierra Leone'), - Enumdict(202, 'SG', 'Singapore'), - Enumdict(203, 'SX', 'Sint Maarten (Dutch part)'), - Enumdict(204, 'SK', 'Slovakia'), - Enumdict(205, 'SI', 'Slovenia'), - Enumdict(206, 'SB', 'Solomon Islands'), - Enumdict(207, 'SO', 'Somalia'), - Enumdict(208, 'ZA', 'South Africa'), - Enumdict(209, 'GS', 'South Georgia and the South Sandwich Islands'), - Enumdict(210, 'KR', 'Republic of Korea'), - Enumdict(211, 'SS', 'South Sudan'), - Enumdict(212, 'ES', 'Spain'), - Enumdict(213, 'LK', 'Sri Lanka'), - Enumdict(214, 'SD', 'Sudan'), - Enumdict(215, 'SR', 'Suriname'), - Enumdict(216, 'SJ', 'Svalbard and Jan Mayen'), - Enumdict(217, 'SZ', 'Swaziland'), - Enumdict(218, 'SE', 'Sweden'), - Enumdict(219, 'CH', 'Switzerland'), - Enumdict(220, 'SY', 'Syrian Arab Republic'), - Enumdict(221, 'TW', 'Taiwan'), - Enumdict(222, 'TJ', 'Tajikistan'), - Enumdict(223, 'TZ', 'United Republic of Tanzania'), - Enumdict(224, 'TH', 'Thailand'), - Enumdict(225, 'TL', 'Timor-Leste'), - Enumdict(226, 'TG', 'Togo'), - Enumdict(227, 'TK', 'Tokelau'), - Enumdict(228, 'TO', 'Tonga'), - Enumdict(229, 'TT', 'Trinidad and Tobago'), - Enumdict(230, 'TN', 'Tunisia'), - Enumdict(231, 'TR', 'Turkey'), - Enumdict(232, 'TM', 'Turkmenistan'), - Enumdict(233, 'TC', 'Turks and Caicos Islands'), - Enumdict(234, 'TV', 'Tuvalu'), - Enumdict(235, 'UG', 'Uganda'), - Enumdict(236, 'UA', 'Ukraine'), - Enumdict(237, 'AE', 'United Arab Emirates'), - Enumdict(238, 'GB', 'United Kingdom of Great Britain and Northern Ireland'), - Enumdict(239, 'US', 'United States of America'), - Enumdict(240, 'UY', 'Uruguay'), - Enumdict(241, 'UZ', 'Uzbekistan'), - Enumdict(242, 'VU', 'Vanuatu'), - Enumdict(243, 'VE', 'Bolivarian Republic of Venezuela'), - Enumdict(244, 'VN', 'Viet Nam'), - Enumdict(245, 'WF', 'Wallis and Futuna'), - Enumdict(246, 'EH', 'Western Sahara'), - Enumdict(247, 'YE', 'Yemen'), - Enumdict(248, 'ZM', 'Zambia'), - Enumdict(249, 'ZW', 'Zimbabwe') - ) # Timezones TZ_enum_table = Table("tz_vocabulary", @@ -453,600 +91,4 @@ TZ_enum_table = Table("tz_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see above): -TZ_enum = ( - Enumdict(0, 'Africa/Abidjan', 'Africa/Abidjan'), - Enumdict(1, 'Africa/Accra', 'Africa/Accra'), - Enumdict(2, 'Africa/Addis_Ababa', 'Africa/Addis_Ababa'), - Enumdict(3, 'Africa/Algiers', 'Africa/Algiers'), - Enumdict(4, 'Africa/Asmara', 'Africa/Asmara'), - Enumdict(5, 'Africa/Asmera', 'Africa/Asmera'), - Enumdict(6, 'Africa/Bamako', 'Africa/Bamako'), - Enumdict(7, 'Africa/Bangui', 'Africa/Bangui'), - Enumdict(8, 'Africa/Banjul', 'Africa/Banjul'), - Enumdict(9, 'Africa/Bissau', 'Africa/Bissau'), - Enumdict(10, 'Africa/Blantyre', 'Africa/Blantyre'), - Enumdict(11, 'Africa/Brazzaville', 'Africa/Brazzaville'), - Enumdict(12, 'Africa/Bujumbura', 'Africa/Bujumbura'), - Enumdict(13, 'Africa/Cairo', 'Africa/Cairo'), - Enumdict(14, 'Africa/Casablanca', 'Africa/Casablanca'), - Enumdict(15, 'Africa/Ceuta', 'Africa/Ceuta'), - Enumdict(16, 'Africa/Conakry', 'Africa/Conakry'), - Enumdict(17, 'Africa/Dakar', 'Africa/Dakar'), - Enumdict(18, 'Africa/Dar_es_Salaam', 'Africa/Dar_es_Salaam'), - Enumdict(19, 'Africa/Djibouti', 'Africa/Djibouti'), - Enumdict(20, 'Africa/Douala', 'Africa/Douala'), - Enumdict(21, 'Africa/El_Aaiun', 'Africa/El_Aaiun'), - Enumdict(22, 'Africa/Freetown', 'Africa/Freetown'), - Enumdict(23, 'Africa/Gaborone', 'Africa/Gaborone'), - Enumdict(24, 'Africa/Harare', 'Africa/Harare'), - Enumdict(25, 'Africa/Johannesburg', 'Africa/Johannesburg'), - Enumdict(26, 'Africa/Juba', 'Africa/Juba'), - Enumdict(27, 'Africa/Kampala', 'Africa/Kampala'), - Enumdict(28, 'Africa/Khartoum', 'Africa/Khartoum'), - Enumdict(29, 'Africa/Kigali', 'Africa/Kigali'), - Enumdict(30, 'Africa/Kinshasa', 'Africa/Kinshasa'), - Enumdict(31, 'Africa/Lagos', 'Africa/Lagos'), - Enumdict(32, 'Africa/Libreville', 'Africa/Libreville'), - Enumdict(33, 'Africa/Lome', 'Africa/Lome'), - Enumdict(34, 'Africa/Luanda', 'Africa/Luanda'), - Enumdict(35, 'Africa/Lubumbashi', 'Africa/Lubumbashi'), - Enumdict(36, 'Africa/Lusaka', 'Africa/Lusaka'), - Enumdict(37, 'Africa/Malabo', 'Africa/Malabo'), - Enumdict(38, 'Africa/Maputo', 'Africa/Maputo'), - Enumdict(39, 'Africa/Maseru', 'Africa/Maseru'), - Enumdict(40, 'Africa/Mbabane', 'Africa/Mbabane'), - Enumdict(41, 'Africa/Mogadishu', 'Africa/Mogadishu'), - Enumdict(42, 'Africa/Monrovia', 'Africa/Monrovia'), - Enumdict(43, 'Africa/Nairobi', 'Africa/Nairobi'), - Enumdict(44, 'Africa/Ndjamena', 'Africa/Ndjamena'), - Enumdict(45, 'Africa/Niamey', 'Africa/Niamey'), - Enumdict(46, 'Africa/Nouakchott', 'Africa/Nouakchott'), - Enumdict(47, 'Africa/Ouagadougou', 'Africa/Ouagadougou'), - Enumdict(48, 'Africa/Porto-Novo', 'Africa/Porto-Novo'), - Enumdict(49, 'Africa/Sao_Tome', 'Africa/Sao_Tome'), - Enumdict(50, 'Africa/Timbuktu', 'Africa/Timbuktu'), - Enumdict(51, 'Africa/Tripoli', 'Africa/Tripoli'), - Enumdict(52, 'Africa/Tunis', 'Africa/Tunis'), - Enumdict(53, 'Africa/Windhoek', 'Africa/Windhoek'), - Enumdict(54, 'America/Adak', 'America/Adak'), - Enumdict(55, 'America/Anchorage', 'America/Anchorage'), - Enumdict(56, 'America/Anguilla', 'America/Anguilla'), - Enumdict(57, 'America/Antigua', 'America/Antigua'), - Enumdict(58, 'America/Araguaina', 'America/Araguaina'), - Enumdict(59, 'America/Argentina/Buenos_Aires', 'America/Argentina/Buenos_Aires'), - Enumdict(60, 'America/Argentina/Catamarca', 'America/Argentina/Catamarca'), - Enumdict(61, 'America/Argentina/ComodRivadavia', 'America/Argentina/ComodRivadavia'), - Enumdict(62, 'America/Argentina/Cordoba', 'America/Argentina/Cordoba'), - Enumdict(63, 'America/Argentina/Jujuy', 'America/Argentina/Jujuy'), - Enumdict(64, 'America/Argentina/La_Rioja', 'America/Argentina/La_Rioja'), - Enumdict(65, 'America/Argentina/Mendoza', 'America/Argentina/Mendoza'), - Enumdict(66, 'America/Argentina/Rio_Gallegos', 'America/Argentina/Rio_Gallegos'), - Enumdict(67, 'America/Argentina/Salta', 'America/Argentina/Salta'), - Enumdict(68, 'America/Argentina/San_Juan', 'America/Argentina/San_Juan'), - Enumdict(69, 'America/Argentina/San_Luis', 'America/Argentina/San_Luis'), - Enumdict(70, 'America/Argentina/Tucuman', 'America/Argentina/Tucuman'), - Enumdict(71, 'America/Argentina/Ushuaia', 'America/Argentina/Ushuaia'), - Enumdict(72, 'America/Aruba', 'America/Aruba'), - Enumdict(73, 'America/Asuncion', 'America/Asuncion'), - Enumdict(74, 'America/Atikokan', 'America/Atikokan'), - Enumdict(75, 'America/Atka', 'America/Atka'), - Enumdict(76, 'America/Bahia', 'America/Bahia'), - Enumdict(77, 'America/Bahia_Banderas', 'America/Bahia_Banderas'), - Enumdict(78, 'America/Barbados', 'America/Barbados'), - Enumdict(79, 'America/Belem', 'America/Belem'), - Enumdict(80, 'America/Belize', 'America/Belize'), - Enumdict(81, 'America/Blanc-Sablon', 'America/Blanc-Sablon'), - Enumdict(82, 'America/Boa_Vista', 'America/Boa_Vista'), - Enumdict(83, 'America/Bogota', 'America/Bogota'), - Enumdict(84, 'America/Boise', 'America/Boise'), - Enumdict(85, 'America/Buenos_Aires', 'America/Buenos_Aires'), - Enumdict(86, 'America/Cambridge_Bay', 'America/Cambridge_Bay'), - Enumdict(87, 'America/Campo_Grande', 'America/Campo_Grande'), - Enumdict(88, 'America/Cancun', 'America/Cancun'), - Enumdict(89, 'America/Caracas', 'America/Caracas'), - Enumdict(90, 'America/Catamarca', 'America/Catamarca'), - Enumdict(91, 'America/Cayenne', 'America/Cayenne'), - Enumdict(92, 'America/Cayman', 'America/Cayman'), - Enumdict(93, 'America/Chicago', 'America/Chicago'), - Enumdict(94, 'America/Chihuahua', 'America/Chihuahua'), - Enumdict(95, 'America/Coral_Harbour', 'America/Coral_Harbour'), - Enumdict(96, 'America/Cordoba', 'America/Cordoba'), - Enumdict(97, 'America/Costa_Rica', 'America/Costa_Rica'), - Enumdict(98, 'America/Creston', 'America/Creston'), - Enumdict(99, 'America/Cuiaba', 'America/Cuiaba'), - Enumdict(100, 'America/Curacao', 'America/Curacao'), - Enumdict(101, 'America/Danmarkshavn', 'America/Danmarkshavn'), - Enumdict(102, 'America/Dawson', 'America/Dawson'), - Enumdict(103, 'America/Dawson_Creek', 'America/Dawson_Creek'), - Enumdict(104, 'America/Denver', 'America/Denver'), - Enumdict(105, 'America/Detroit', 'America/Detroit'), - Enumdict(106, 'America/Dominica', 'America/Dominica'), - Enumdict(107, 'America/Edmonton', 'America/Edmonton'), - Enumdict(108, 'America/Eirunepe', 'America/Eirunepe'), - Enumdict(109, 'America/El_Salvador', 'America/El_Salvador'), - Enumdict(110, 'America/Ensenada', 'America/Ensenada'), - Enumdict(111, 'America/Fort_Nelson', 'America/Fort_Nelson'), - Enumdict(112, 'America/Fort_Wayne', 'America/Fort_Wayne'), - Enumdict(113, 'America/Fortaleza', 'America/Fortaleza'), - Enumdict(114, 'America/Glace_Bay', 'America/Glace_Bay'), - Enumdict(115, 'America/Godthab', 'America/Godthab'), - Enumdict(116, 'America/Goose_Bay', 'America/Goose_Bay'), - Enumdict(117, 'America/Grand_Turk', 'America/Grand_Turk'), - Enumdict(118, 'America/Grenada', 'America/Grenada'), - Enumdict(119, 'America/Guadeloupe', 'America/Guadeloupe'), - Enumdict(120, 'America/Guatemala', 'America/Guatemala'), - Enumdict(121, 'America/Guayaquil', 'America/Guayaquil'), - Enumdict(122, 'America/Guyana', 'America/Guyana'), - Enumdict(123, 'America/Halifax', 'America/Halifax'), - Enumdict(124, 'America/Havana', 'America/Havana'), - Enumdict(125, 'America/Hermosillo', 'America/Hermosillo'), - Enumdict(126, 'America/Indiana/Indianapolis', 'America/Indiana/Indianapolis'), - Enumdict(127, 'America/Indiana/Knox', 'America/Indiana/Knox'), - Enumdict(128, 'America/Indiana/Marengo', 'America/Indiana/Marengo'), - Enumdict(129, 'America/Indiana/Petersburg', 'America/Indiana/Petersburg'), - Enumdict(130, 'America/Indiana/Tell_City', 'America/Indiana/Tell_City'), - Enumdict(131, 'America/Indiana/Vevay', 'America/Indiana/Vevay'), - Enumdict(132, 'America/Indiana/Vincennes', 'America/Indiana/Vincennes'), - Enumdict(133, 'America/Indiana/Winamac', 'America/Indiana/Winamac'), - Enumdict(134, 'America/Indianapolis', 'America/Indianapolis'), - Enumdict(135, 'America/Inuvik', 'America/Inuvik'), - Enumdict(136, 'America/Iqaluit', 'America/Iqaluit'), - Enumdict(137, 'America/Jamaica', 'America/Jamaica'), - Enumdict(138, 'America/Jujuy', 'America/Jujuy'), - Enumdict(139, 'America/Juneau', 'America/Juneau'), - Enumdict(140, 'America/Kentucky/Louisville', 'America/Kentucky/Louisville'), - Enumdict(141, 'America/Kentucky/Monticello', 'America/Kentucky/Monticello'), - Enumdict(142, 'America/Knox_IN', 'America/Knox_IN'), - Enumdict(143, 'America/Kralendijk', 'America/Kralendijk'), - Enumdict(144, 'America/La_Paz', 'America/La_Paz'), - Enumdict(145, 'America/Lima', 'America/Lima'), - Enumdict(146, 'America/Los_Angeles', 'America/Los_Angeles'), - Enumdict(147, 'America/Louisville', 'America/Louisville'), - Enumdict(148, 'America/Lower_Princes', 'America/Lower_Princes'), - Enumdict(149, 'America/Maceio', 'America/Maceio'), - Enumdict(150, 'America/Managua', 'America/Managua'), - Enumdict(151, 'America/Manaus', 'America/Manaus'), - Enumdict(152, 'America/Marigot', 'America/Marigot'), - Enumdict(153, 'America/Martinique', 'America/Martinique'), - Enumdict(154, 'America/Matamoros', 'America/Matamoros'), - Enumdict(155, 'America/Mazatlan', 'America/Mazatlan'), - Enumdict(156, 'America/Mendoza', 'America/Mendoza'), - Enumdict(157, 'America/Menominee', 'America/Menominee'), - Enumdict(158, 'America/Merida', 'America/Merida'), - Enumdict(159, 'America/Metlakatla', 'America/Metlakatla'), - Enumdict(160, 'America/Mexico_City', 'America/Mexico_City'), - Enumdict(161, 'America/Miquelon', 'America/Miquelon'), - Enumdict(162, 'America/Moncton', 'America/Moncton'), - Enumdict(163, 'America/Monterrey', 'America/Monterrey'), - Enumdict(164, 'America/Montevideo', 'America/Montevideo'), - Enumdict(165, 'America/Montreal', 'America/Montreal'), - Enumdict(166, 'America/Montserrat', 'America/Montserrat'), - Enumdict(167, 'America/Nassau', 'America/Nassau'), - Enumdict(168, 'America/New_York', 'America/New_York'), - Enumdict(169, 'America/Nipigon', 'America/Nipigon'), - Enumdict(170, 'America/Nome', 'America/Nome'), - Enumdict(171, 'America/Noronha', 'America/Noronha'), - Enumdict(172, 'America/North_Dakota/Beulah', 'America/North_Dakota/Beulah'), - Enumdict(173, 'America/North_Dakota/Center', 'America/North_Dakota/Center'), - Enumdict(174, 'America/North_Dakota/New_Salem', 'America/North_Dakota/New_Salem'), - Enumdict(175, 'America/Nuuk', 'America/Nuuk'), - Enumdict(176, 'America/Ojinaga', 'America/Ojinaga'), - Enumdict(177, 'America/Panama', 'America/Panama'), - Enumdict(178, 'America/Pangnirtung', 'America/Pangnirtung'), - Enumdict(179, 'America/Paramaribo', 'America/Paramaribo'), - Enumdict(180, 'America/Phoenix', 'America/Phoenix'), - Enumdict(181, 'America/Port-au-Prince', 'America/Port-au-Prince'), - Enumdict(182, 'America/Port_of_Spain', 'America/Port_of_Spain'), - Enumdict(183, 'America/Porto_Acre', 'America/Porto_Acre'), - Enumdict(184, 'America/Porto_Velho', 'America/Porto_Velho'), - Enumdict(185, 'America/Puerto_Rico', 'America/Puerto_Rico'), - Enumdict(186, 'America/Punta_Arenas', 'America/Punta_Arenas'), - Enumdict(187, 'America/Rainy_River', 'America/Rainy_River'), - Enumdict(188, 'America/Rankin_Inlet', 'America/Rankin_Inlet'), - Enumdict(189, 'America/Recife', 'America/Recife'), - Enumdict(190, 'America/Regina', 'America/Regina'), - Enumdict(191, 'America/Resolute', 'America/Resolute'), - Enumdict(192, 'America/Rio_Branco', 'America/Rio_Branco'), - Enumdict(193, 'America/Rosario', 'America/Rosario'), - Enumdict(194, 'America/Santa_Isabel', 'America/Santa_Isabel'), - Enumdict(195, 'America/Santarem', 'America/Santarem'), - Enumdict(196, 'America/Santiago', 'America/Santiago'), - Enumdict(197, 'America/Santo_Domingo', 'America/Santo_Domingo'), - Enumdict(198, 'America/Sao_Paulo', 'America/Sao_Paulo'), - Enumdict(199, 'America/Scoresbysund', 'America/Scoresbysund'), - Enumdict(200, 'America/Shiprock', 'America/Shiprock'), - Enumdict(201, 'America/Sitka', 'America/Sitka'), - Enumdict(202, 'America/St_Barthelemy', 'America/St_Barthelemy'), - Enumdict(203, 'America/St_Johns', 'America/St_Johns'), - Enumdict(204, 'America/St_Kitts', 'America/St_Kitts'), - Enumdict(205, 'America/St_Lucia', 'America/St_Lucia'), - Enumdict(206, 'America/St_Thomas', 'America/St_Thomas'), - Enumdict(207, 'America/St_Vincent', 'America/St_Vincent'), - Enumdict(208, 'America/Swift_Current', 'America/Swift_Current'), - Enumdict(209, 'America/Tegucigalpa', 'America/Tegucigalpa'), - Enumdict(210, 'America/Thule', 'America/Thule'), - Enumdict(211, 'America/Thunder_Bay', 'America/Thunder_Bay'), - Enumdict(212, 'America/Tijuana', 'America/Tijuana'), - Enumdict(213, 'America/Toronto', 'America/Toronto'), - Enumdict(214, 'America/Tortola', 'America/Tortola'), - Enumdict(215, 'America/Vancouver', 'America/Vancouver'), - Enumdict(216, 'America/Virgin', 'America/Virgin'), - Enumdict(217, 'America/Whitehorse', 'America/Whitehorse'), - Enumdict(218, 'America/Winnipeg', 'America/Winnipeg'), - Enumdict(219, 'America/Yakutat', 'America/Yakutat'), - Enumdict(220, 'America/Yellowknife', 'America/Yellowknife'), - Enumdict(221, 'Antarctica/Casey', 'Antarctica/Casey'), - Enumdict(222, 'Antarctica/Davis', 'Antarctica/Davis'), - Enumdict(223, 'Antarctica/DumontDUrville', 'Antarctica/DumontDUrville'), - Enumdict(224, 'Antarctica/Macquarie', 'Antarctica/Macquarie'), - Enumdict(225, 'Antarctica/Mawson', 'Antarctica/Mawson'), - Enumdict(226, 'Antarctica/McMurdo', 'Antarctica/McMurdo'), - Enumdict(227, 'Antarctica/Palmer', 'Antarctica/Palmer'), - Enumdict(228, 'Antarctica/Rothera', 'Antarctica/Rothera'), - Enumdict(229, 'Antarctica/South_Pole', 'Antarctica/South_Pole'), - Enumdict(230, 'Antarctica/Syowa', 'Antarctica/Syowa'), - Enumdict(231, 'Antarctica/Troll', 'Antarctica/Troll'), - Enumdict(232, 'Antarctica/Vostok', 'Antarctica/Vostok'), - Enumdict(233, 'Arctic/Longyearbyen', 'Arctic/Longyearbyen'), - Enumdict(234, 'Asia/Aden', 'Asia/Aden'), - Enumdict(235, 'Asia/Almaty', 'Asia/Almaty'), - Enumdict(236, 'Asia/Amman', 'Asia/Amman'), - Enumdict(237, 'Asia/Anadyr', 'Asia/Anadyr'), - Enumdict(238, 'Asia/Aqtau', 'Asia/Aqtau'), - Enumdict(239, 'Asia/Aqtobe', 'Asia/Aqtobe'), - Enumdict(240, 'Asia/Ashgabat', 'Asia/Ashgabat'), - Enumdict(241, 'Asia/Ashkhabad', 'Asia/Ashkhabad'), - Enumdict(242, 'Asia/Atyrau', 'Asia/Atyrau'), - Enumdict(243, 'Asia/Baghdad', 'Asia/Baghdad'), - Enumdict(244, 'Asia/Bahrain', 'Asia/Bahrain'), - Enumdict(245, 'Asia/Baku', 'Asia/Baku'), - Enumdict(246, 'Asia/Bangkok', 'Asia/Bangkok'), - Enumdict(247, 'Asia/Barnaul', 'Asia/Barnaul'), - Enumdict(248, 'Asia/Beirut', 'Asia/Beirut'), - Enumdict(249, 'Asia/Bishkek', 'Asia/Bishkek'), - Enumdict(250, 'Asia/Brunei', 'Asia/Brunei'), - Enumdict(251, 'Asia/Calcutta', 'Asia/Calcutta'), - Enumdict(252, 'Asia/Chita', 'Asia/Chita'), - Enumdict(253, 'Asia/Choibalsan', 'Asia/Choibalsan'), - Enumdict(254, 'Asia/Chongqing', 'Asia/Chongqing'), - Enumdict(255, 'Asia/Chungking', 'Asia/Chungking'), - Enumdict(256, 'Asia/Colombo', 'Asia/Colombo'), - Enumdict(257, 'Asia/Dacca', 'Asia/Dacca'), - Enumdict(258, 'Asia/Damascus', 'Asia/Damascus'), - Enumdict(259, 'Asia/Dhaka', 'Asia/Dhaka'), - Enumdict(260, 'Asia/Dili', 'Asia/Dili'), - Enumdict(261, 'Asia/Dubai', 'Asia/Dubai'), - Enumdict(262, 'Asia/Dushanbe', 'Asia/Dushanbe'), - Enumdict(263, 'Asia/Famagusta', 'Asia/Famagusta'), - Enumdict(264, 'Asia/Gaza', 'Asia/Gaza'), - Enumdict(265, 'Asia/Harbin', 'Asia/Harbin'), - Enumdict(266, 'Asia/Hebron', 'Asia/Hebron'), - Enumdict(267, 'Asia/Ho_Chi_Minh', 'Asia/Ho_Chi_Minh'), - Enumdict(268, 'Asia/Hong_Kong', 'Asia/Hong_Kong'), - Enumdict(269, 'Asia/Hovd', 'Asia/Hovd'), - Enumdict(270, 'Asia/Irkutsk', 'Asia/Irkutsk'), - Enumdict(271, 'Asia/Istanbul', 'Asia/Istanbul'), - Enumdict(272, 'Asia/Jakarta', 'Asia/Jakarta'), - Enumdict(273, 'Asia/Jayapura', 'Asia/Jayapura'), - Enumdict(274, 'Asia/Jerusalem', 'Asia/Jerusalem'), - Enumdict(275, 'Asia/Kabul', 'Asia/Kabul'), - Enumdict(276, 'Asia/Kamchatka', 'Asia/Kamchatka'), - Enumdict(277, 'Asia/Karachi', 'Asia/Karachi'), - Enumdict(278, 'Asia/Kashgar', 'Asia/Kashgar'), - Enumdict(279, 'Asia/Kathmandu', 'Asia/Kathmandu'), - Enumdict(280, 'Asia/Katmandu', 'Asia/Katmandu'), - Enumdict(281, 'Asia/Khandyga', 'Asia/Khandyga'), - Enumdict(282, 'Asia/Kolkata', 'Asia/Kolkata'), - Enumdict(283, 'Asia/Krasnoyarsk', 'Asia/Krasnoyarsk'), - Enumdict(284, 'Asia/Kuala_Lumpur', 'Asia/Kuala_Lumpur'), - Enumdict(285, 'Asia/Kuching', 'Asia/Kuching'), - Enumdict(286, 'Asia/Kuwait', 'Asia/Kuwait'), - Enumdict(287, 'Asia/Macao', 'Asia/Macao'), - Enumdict(288, 'Asia/Macau', 'Asia/Macau'), - Enumdict(289, 'Asia/Magadan', 'Asia/Magadan'), - Enumdict(290, 'Asia/Makassar', 'Asia/Makassar'), - Enumdict(291, 'Asia/Manila', 'Asia/Manila'), - Enumdict(292, 'Asia/Muscat', 'Asia/Muscat'), - Enumdict(293, 'Asia/Nicosia', 'Asia/Nicosia'), - Enumdict(294, 'Asia/Novokuznetsk', 'Asia/Novokuznetsk'), - Enumdict(295, 'Asia/Novosibirsk', 'Asia/Novosibirsk'), - Enumdict(296, 'Asia/Omsk', 'Asia/Omsk'), - Enumdict(297, 'Asia/Oral', 'Asia/Oral'), - Enumdict(298, 'Asia/Phnom_Penh', 'Asia/Phnom_Penh'), - Enumdict(299, 'Asia/Pontianak', 'Asia/Pontianak'), - Enumdict(300, 'Asia/Pyongyang', 'Asia/Pyongyang'), - Enumdict(301, 'Asia/Qatar', 'Asia/Qatar'), - Enumdict(302, 'Asia/Qostanay', 'Asia/Qostanay'), - Enumdict(303, 'Asia/Qyzylorda', 'Asia/Qyzylorda'), - Enumdict(304, 'Asia/Rangoon', 'Asia/Rangoon'), - Enumdict(305, 'Asia/Riyadh', 'Asia/Riyadh'), - Enumdict(306, 'Asia/Saigon', 'Asia/Saigon'), - Enumdict(307, 'Asia/Sakhalin', 'Asia/Sakhalin'), - Enumdict(308, 'Asia/Samarkand', 'Asia/Samarkand'), - Enumdict(309, 'Asia/Seoul', 'Asia/Seoul'), - Enumdict(310, 'Asia/Shanghai', 'Asia/Shanghai'), - Enumdict(311, 'Asia/Singapore', 'Asia/Singapore'), - Enumdict(312, 'Asia/Srednekolymsk', 'Asia/Srednekolymsk'), - Enumdict(313, 'Asia/Taipei', 'Asia/Taipei'), - Enumdict(314, 'Asia/Tashkent', 'Asia/Tashkent'), - Enumdict(315, 'Asia/Tbilisi', 'Asia/Tbilisi'), - Enumdict(316, 'Asia/Tehran', 'Asia/Tehran'), - Enumdict(317, 'Asia/Tel_Aviv', 'Asia/Tel_Aviv'), - Enumdict(318, 'Asia/Thimbu', 'Asia/Thimbu'), - Enumdict(319, 'Asia/Thimphu', 'Asia/Thimphu'), - Enumdict(320, 'Asia/Tokyo', 'Asia/Tokyo'), - Enumdict(321, 'Asia/Tomsk', 'Asia/Tomsk'), - Enumdict(322, 'Asia/Ujung_Pandang', 'Asia/Ujung_Pandang'), - Enumdict(323, 'Asia/Ulaanbaatar', 'Asia/Ulaanbaatar'), - Enumdict(324, 'Asia/Ulan_Bator', 'Asia/Ulan_Bator'), - Enumdict(325, 'Asia/Urumqi', 'Asia/Urumqi'), - Enumdict(326, 'Asia/Ust-Nera', 'Asia/Ust-Nera'), - Enumdict(327, 'Asia/Vientiane', 'Asia/Vientiane'), - Enumdict(328, 'Asia/Vladivostok', 'Asia/Vladivostok'), - Enumdict(329, 'Asia/Yakutsk', 'Asia/Yakutsk'), - Enumdict(330, 'Asia/Yangon', 'Asia/Yangon'), - Enumdict(331, 'Asia/Yekaterinburg', 'Asia/Yekaterinburg'), - Enumdict(332, 'Asia/Yerevan', 'Asia/Yerevan'), - Enumdict(333, 'Atlantic/Azores', 'Atlantic/Azores'), - Enumdict(334, 'Atlantic/Bermuda', 'Atlantic/Bermuda'), - Enumdict(335, 'Atlantic/Canary', 'Atlantic/Canary'), - Enumdict(336, 'Atlantic/Cape_Verde', 'Atlantic/Cape_Verde'), - Enumdict(337, 'Atlantic/Faeroe', 'Atlantic/Faeroe'), - Enumdict(338, 'Atlantic/Faroe', 'Atlantic/Faroe'), - Enumdict(339, 'Atlantic/Jan_Mayen', 'Atlantic/Jan_Mayen'), - Enumdict(340, 'Atlantic/Madeira', 'Atlantic/Madeira'), - Enumdict(341, 'Atlantic/Reykjavik', 'Atlantic/Reykjavik'), - Enumdict(342, 'Atlantic/South_Georgia', 'Atlantic/South_Georgia'), - Enumdict(343, 'Atlantic/St_Helena', 'Atlantic/St_Helena'), - Enumdict(344, 'Atlantic/Stanley', 'Atlantic/Stanley'), - Enumdict(345, 'Australia/ACT', 'Australia/ACT'), - Enumdict(346, 'Australia/Adelaide', 'Australia/Adelaide'), - Enumdict(347, 'Australia/Brisbane', 'Australia/Brisbane'), - Enumdict(348, 'Australia/Broken_Hill', 'Australia/Broken_Hill'), - Enumdict(349, 'Australia/Canberra', 'Australia/Canberra'), - Enumdict(350, 'Australia/Currie', 'Australia/Currie'), - Enumdict(351, 'Australia/Darwin', 'Australia/Darwin'), - Enumdict(352, 'Australia/Eucla', 'Australia/Eucla'), - Enumdict(353, 'Australia/Hobart', 'Australia/Hobart'), - Enumdict(354, 'Australia/LHI', 'Australia/LHI'), - Enumdict(355, 'Australia/Lindeman', 'Australia/Lindeman'), - Enumdict(356, 'Australia/Lord_Howe', 'Australia/Lord_Howe'), - Enumdict(357, 'Australia/Melbourne', 'Australia/Melbourne'), - Enumdict(358, 'Australia/NSW', 'Australia/NSW'), - Enumdict(359, 'Australia/North', 'Australia/North'), - Enumdict(360, 'Australia/Perth', 'Australia/Perth'), - Enumdict(361, 'Australia/Queensland', 'Australia/Queensland'), - Enumdict(362, 'Australia/South', 'Australia/South'), - Enumdict(363, 'Australia/Sydney', 'Australia/Sydney'), - Enumdict(364, 'Australia/Tasmania', 'Australia/Tasmania'), - Enumdict(365, 'Australia/Victoria', 'Australia/Victoria'), - Enumdict(366, 'Australia/West', 'Australia/West'), - Enumdict(367, 'Australia/Yancowinna', 'Australia/Yancowinna'), - Enumdict(368, 'Brazil/Acre', 'Brazil/Acre'), - Enumdict(369, 'Brazil/DeNoronha', 'Brazil/DeNoronha'), - Enumdict(370, 'Brazil/East', 'Brazil/East'), - Enumdict(371, 'Brazil/West', 'Brazil/West'), - Enumdict(372, 'CET', 'CET'), - Enumdict(373, 'CST6CDT', 'CST6CDT'), - Enumdict(374, 'Canada/Atlantic', 'Canada/Atlantic'), - Enumdict(375, 'Canada/Central', 'Canada/Central'), - Enumdict(376, 'Canada/Eastern', 'Canada/Eastern'), - Enumdict(377, 'Canada/Mountain', 'Canada/Mountain'), - Enumdict(378, 'Canada/Newfoundland', 'Canada/Newfoundland'), - Enumdict(379, 'Canada/Pacific', 'Canada/Pacific'), - Enumdict(380, 'Canada/Saskatchewan', 'Canada/Saskatchewan'), - Enumdict(381, 'Canada/Yukon', 'Canada/Yukon'), - Enumdict(382, 'Chile/Continental', 'Chile/Continental'), - Enumdict(383, 'Chile/EasterIsland', 'Chile/EasterIsland'), - Enumdict(384, 'Cuba', 'Cuba'), - Enumdict(385, 'EET', 'EET'), - Enumdict(386, 'EST', 'EST'), - Enumdict(387, 'EST5EDT', 'EST5EDT'), - Enumdict(388, 'Egypt', 'Egypt'), - Enumdict(389, 'Eire', 'Eire'), - Enumdict(390, 'Etc/GMT', 'Etc/GMT'), - Enumdict(391, 'Etc/GMT+0', 'Etc/GMT+0'), - Enumdict(392, 'Etc/GMT+1', 'Etc/GMT+1'), - Enumdict(393, 'Etc/GMT+10', 'Etc/GMT+10'), - Enumdict(394, 'Etc/GMT+11', 'Etc/GMT+11'), - Enumdict(395, 'Etc/GMT+12', 'Etc/GMT+12'), - Enumdict(396, 'Etc/GMT+2', 'Etc/GMT+2'), - Enumdict(397, 'Etc/GMT+3', 'Etc/GMT+3'), - Enumdict(398, 'Etc/GMT+4', 'Etc/GMT+4'), - Enumdict(399, 'Etc/GMT+5', 'Etc/GMT+5'), - Enumdict(400, 'Etc/GMT+6', 'Etc/GMT+6'), - Enumdict(401, 'Etc/GMT+7', 'Etc/GMT+7'), - Enumdict(402, 'Etc/GMT+8', 'Etc/GMT+8'), - Enumdict(403, 'Etc/GMT+9', 'Etc/GMT+9'), - Enumdict(404, 'Etc/GMT-0', 'Etc/GMT-0'), - Enumdict(405, 'Etc/GMT-1', 'Etc/GMT-1'), - Enumdict(406, 'Etc/GMT-10', 'Etc/GMT-10'), - Enumdict(407, 'Etc/GMT-11', 'Etc/GMT-11'), - Enumdict(408, 'Etc/GMT-12', 'Etc/GMT-12'), - Enumdict(409, 'Etc/GMT-13', 'Etc/GMT-13'), - Enumdict(410, 'Etc/GMT-14', 'Etc/GMT-14'), - Enumdict(411, 'Etc/GMT-2', 'Etc/GMT-2'), - Enumdict(412, 'Etc/GMT-3', 'Etc/GMT-3'), - Enumdict(413, 'Etc/GMT-4', 'Etc/GMT-4'), - Enumdict(414, 'Etc/GMT-5', 'Etc/GMT-5'), - Enumdict(415, 'Etc/GMT-6', 'Etc/GMT-6'), - Enumdict(416, 'Etc/GMT-7', 'Etc/GMT-7'), - Enumdict(417, 'Etc/GMT-8', 'Etc/GMT-8'), - Enumdict(418, 'Etc/GMT-9', 'Etc/GMT-9'), - Enumdict(419, 'Etc/GMT0', 'Etc/GMT0'), - Enumdict(420, 'Etc/Greenwich', 'Etc/Greenwich'), - Enumdict(421, 'Etc/UCT', 'Etc/UCT'), - Enumdict(422, 'Etc/UTC', 'Etc/UTC'), - Enumdict(423, 'Etc/Universal', 'Etc/Universal'), - Enumdict(424, 'Etc/Zulu', 'Etc/Zulu'), - Enumdict(425, 'Europe/Amsterdam', 'Europe/Amsterdam'), - Enumdict(426, 'Europe/Andorra', 'Europe/Andorra'), - Enumdict(427, 'Europe/Astrakhan', 'Europe/Astrakhan'), - Enumdict(428, 'Europe/Athens', 'Europe/Athens'), - Enumdict(429, 'Europe/Belfast', 'Europe/Belfast'), - Enumdict(430, 'Europe/Belgrade', 'Europe/Belgrade'), - Enumdict(431, 'Europe/Berlin', 'Europe/Berlin'), - Enumdict(432, 'Europe/Bratislava', 'Europe/Bratislava'), - Enumdict(433, 'Europe/Brussels', 'Europe/Brussels'), - Enumdict(434, 'Europe/Bucharest', 'Europe/Bucharest'), - Enumdict(435, 'Europe/Budapest', 'Europe/Budapest'), - Enumdict(436, 'Europe/Busingen', 'Europe/Busingen'), - Enumdict(437, 'Europe/Chisinau', 'Europe/Chisinau'), - Enumdict(438, 'Europe/Copenhagen', 'Europe/Copenhagen'), - Enumdict(439, 'Europe/Dublin', 'Europe/Dublin'), - Enumdict(440, 'Europe/Gibraltar', 'Europe/Gibraltar'), - Enumdict(441, 'Europe/Guernsey', 'Europe/Guernsey'), - Enumdict(442, 'Europe/Helsinki', 'Europe/Helsinki'), - Enumdict(443, 'Europe/Isle_of_Man', 'Europe/Isle_of_Man'), - Enumdict(444, 'Europe/Istanbul', 'Europe/Istanbul'), - Enumdict(445, 'Europe/Jersey', 'Europe/Jersey'), - Enumdict(446, 'Europe/Kaliningrad', 'Europe/Kaliningrad'), - Enumdict(447, 'Europe/Kiev', 'Europe/Kiev'), - Enumdict(448, 'Europe/Kirov', 'Europe/Kirov'), - Enumdict(449, 'Europe/Lisbon', 'Europe/Lisbon'), - Enumdict(450, 'Europe/Ljubljana', 'Europe/Ljubljana'), - Enumdict(451, 'Europe/London', 'Europe/London'), - Enumdict(452, 'Europe/Luxembourg', 'Europe/Luxembourg'), - Enumdict(453, 'Europe/Madrid', 'Europe/Madrid'), - Enumdict(454, 'Europe/Malta', 'Europe/Malta'), - Enumdict(455, 'Europe/Mariehamn', 'Europe/Mariehamn'), - Enumdict(456, 'Europe/Minsk', 'Europe/Minsk'), - Enumdict(457, 'Europe/Monaco', 'Europe/Monaco'), - Enumdict(458, 'Europe/Moscow', 'Europe/Moscow'), - Enumdict(459, 'Europe/Nicosia', 'Europe/Nicosia'), - Enumdict(460, 'Europe/Oslo', 'Europe/Oslo'), - Enumdict(461, 'Europe/Paris', 'Europe/Paris'), - Enumdict(462, 'Europe/Podgorica', 'Europe/Podgorica'), - Enumdict(463, 'Europe/Prague', 'Europe/Prague'), - Enumdict(464, 'Europe/Riga', 'Europe/Riga'), - Enumdict(465, 'Europe/Rome', 'Europe/Rome'), - Enumdict(466, 'Europe/Samara', 'Europe/Samara'), - Enumdict(467, 'Europe/San_Marino', 'Europe/San_Marino'), - Enumdict(468, 'Europe/Sarajevo', 'Europe/Sarajevo'), - Enumdict(469, 'Europe/Saratov', 'Europe/Saratov'), - Enumdict(470, 'Europe/Simferopol', 'Europe/Simferopol'), - Enumdict(471, 'Europe/Skopje', 'Europe/Skopje'), - Enumdict(472, 'Europe/Sofia', 'Europe/Sofia'), - Enumdict(473, 'Europe/Stockholm', 'Europe/Stockholm'), - Enumdict(474, 'Europe/Tallinn', 'Europe/Tallinn'), - Enumdict(475, 'Europe/Tirane', 'Europe/Tirane'), - Enumdict(476, 'Europe/Tiraspol', 'Europe/Tiraspol'), - Enumdict(477, 'Europe/Ulyanovsk', 'Europe/Ulyanovsk'), - Enumdict(478, 'Europe/Uzhgorod', 'Europe/Uzhgorod'), - Enumdict(479, 'Europe/Vaduz', 'Europe/Vaduz'), - Enumdict(480, 'Europe/Vatican', 'Europe/Vatican'), - Enumdict(481, 'Europe/Vienna', 'Europe/Vienna'), - Enumdict(482, 'Europe/Vilnius', 'Europe/Vilnius'), - Enumdict(483, 'Europe/Volgograd', 'Europe/Volgograd'), - Enumdict(484, 'Europe/Warsaw', 'Europe/Warsaw'), - Enumdict(485, 'Europe/Zagreb', 'Europe/Zagreb'), - Enumdict(486, 'Europe/Zaporozhye', 'Europe/Zaporozhye'), - Enumdict(487, 'Europe/Zurich', 'Europe/Zurich'), - Enumdict(488, 'GB', 'GB'), - Enumdict(489, 'GB-Eire', 'GB-Eire'), - Enumdict(490, 'GMT', 'GMT'), - Enumdict(491, 'GMT+0', 'GMT+0'), - Enumdict(492, 'GMT-0', 'GMT-0'), - Enumdict(493, 'GMT0', 'GMT0'), - Enumdict(494, 'Greenwich', 'Greenwich'), - Enumdict(495, 'HST', 'HST'), - Enumdict(496, 'Hongkong', 'Hongkong'), - Enumdict(497, 'Iceland', 'Iceland'), - Enumdict(498, 'Indian/Antananarivo', 'Indian/Antananarivo'), - Enumdict(499, 'Indian/Chagos', 'Indian/Chagos'), - Enumdict(500, 'Indian/Christmas', 'Indian/Christmas'), - Enumdict(501, 'Indian/Cocos', 'Indian/Cocos'), - Enumdict(502, 'Indian/Comoro', 'Indian/Comoro'), - Enumdict(503, 'Indian/Kerguelen', 'Indian/Kerguelen'), - Enumdict(504, 'Indian/Mahe', 'Indian/Mahe'), - Enumdict(505, 'Indian/Maldives', 'Indian/Maldives'), - Enumdict(506, 'Indian/Mauritius', 'Indian/Mauritius'), - Enumdict(507, 'Indian/Mayotte', 'Indian/Mayotte'), - Enumdict(508, 'Indian/Reunion', 'Indian/Reunion'), - Enumdict(509, 'Iran', 'Iran'), - Enumdict(510, 'Israel', 'Israel'), - Enumdict(511, 'Jamaica', 'Jamaica'), - Enumdict(512, 'Japan', 'Japan'), - Enumdict(513, 'Kwajalein', 'Kwajalein'), - Enumdict(514, 'Libya', 'Libya'), - Enumdict(515, 'MET', 'MET'), - Enumdict(516, 'MST', 'MST'), - Enumdict(517, 'MST7MDT', 'MST7MDT'), - Enumdict(518, 'Mexico/BajaNorte', 'Mexico/BajaNorte'), - Enumdict(519, 'Mexico/BajaSur', 'Mexico/BajaSur'), - Enumdict(520, 'Mexico/General', 'Mexico/General'), - Enumdict(521, 'NZ', 'NZ'), - Enumdict(522, 'NZ-CHAT', 'NZ-CHAT'), - Enumdict(523, 'Navajo', 'Navajo'), - Enumdict(524, 'PRC', 'PRC'), - Enumdict(525, 'PST8PDT', 'PST8PDT'), - Enumdict(526, 'Pacific/Apia', 'Pacific/Apia'), - Enumdict(527, 'Pacific/Auckland', 'Pacific/Auckland'), - Enumdict(528, 'Pacific/Bougainville', 'Pacific/Bougainville'), - Enumdict(529, 'Pacific/Chatham', 'Pacific/Chatham'), - Enumdict(530, 'Pacific/Chuuk', 'Pacific/Chuuk'), - Enumdict(531, 'Pacific/Easter', 'Pacific/Easter'), - Enumdict(532, 'Pacific/Efate', 'Pacific/Efate'), - Enumdict(533, 'Pacific/Enderbury', 'Pacific/Enderbury'), - Enumdict(534, 'Pacific/Fakaofo', 'Pacific/Fakaofo'), - Enumdict(535, 'Pacific/Fiji', 'Pacific/Fiji'), - Enumdict(536, 'Pacific/Funafuti', 'Pacific/Funafuti'), - Enumdict(537, 'Pacific/Galapagos', 'Pacific/Galapagos'), - Enumdict(538, 'Pacific/Gambier', 'Pacific/Gambier'), - Enumdict(539, 'Pacific/Guadalcanal', 'Pacific/Guadalcanal'), - Enumdict(540, 'Pacific/Guam', 'Pacific/Guam'), - Enumdict(541, 'Pacific/Honolulu', 'Pacific/Honolulu'), - Enumdict(542, 'Pacific/Johnston', 'Pacific/Johnston'), - Enumdict(543, 'Pacific/Kiritimati', 'Pacific/Kiritimati'), - Enumdict(544, 'Pacific/Kosrae', 'Pacific/Kosrae'), - Enumdict(545, 'Pacific/Kwajalein', 'Pacific/Kwajalein'), - Enumdict(546, 'Pacific/Majuro', 'Pacific/Majuro'), - Enumdict(547, 'Pacific/Marquesas', 'Pacific/Marquesas'), - Enumdict(548, 'Pacific/Midway', 'Pacific/Midway'), - Enumdict(549, 'Pacific/Nauru', 'Pacific/Nauru'), - Enumdict(550, 'Pacific/Niue', 'Pacific/Niue'), - Enumdict(551, 'Pacific/Norfolk', 'Pacific/Norfolk'), - Enumdict(552, 'Pacific/Noumea', 'Pacific/Noumea'), - Enumdict(553, 'Pacific/Pago_Pago', 'Pacific/Pago_Pago'), - Enumdict(554, 'Pacific/Palau', 'Pacific/Palau'), - Enumdict(555, 'Pacific/Pitcairn', 'Pacific/Pitcairn'), - Enumdict(556, 'Pacific/Pohnpei', 'Pacific/Pohnpei'), - Enumdict(557, 'Pacific/Ponape', 'Pacific/Ponape'), - Enumdict(558, 'Pacific/Port_Moresby', 'Pacific/Port_Moresby'), - Enumdict(559, 'Pacific/Rarotonga', 'Pacific/Rarotonga'), - Enumdict(560, 'Pacific/Saipan', 'Pacific/Saipan'), - Enumdict(561, 'Pacific/Samoa', 'Pacific/Samoa'), - Enumdict(562, 'Pacific/Tahiti', 'Pacific/Tahiti'), - Enumdict(563, 'Pacific/Tarawa', 'Pacific/Tarawa'), - Enumdict(564, 'Pacific/Tongatapu', 'Pacific/Tongatapu'), - Enumdict(565, 'Pacific/Truk', 'Pacific/Truk'), - Enumdict(566, 'Pacific/Wake', 'Pacific/Wake'), - Enumdict(567, 'Pacific/Wallis', 'Pacific/Wallis'), - Enumdict(568, 'Pacific/Yap', 'Pacific/Yap'), - Enumdict(569, 'Poland', 'Poland'), - Enumdict(570, 'Portugal', 'Portugal'), - Enumdict(571, 'ROC', 'ROC'), - Enumdict(572, 'ROK', 'ROK'), - Enumdict(573, 'Singapore', 'Singapore'), - Enumdict(574, 'Turkey', 'Turkey'), - Enumdict(575, 'UCT', 'UCT'), - Enumdict(576, 'US/Alaska', 'US/Alaska'), - Enumdict(577, 'US/Aleutian', 'US/Aleutian'), - Enumdict(578, 'US/Arizona', 'US/Arizona'), - Enumdict(579, 'US/Central', 'US/Central'), - Enumdict(580, 'US/East-Indiana', 'US/East-Indiana'), - Enumdict(581, 'US/Eastern', 'US/Eastern'), - Enumdict(582, 'US/Hawaii', 'US/Hawaii'), - Enumdict(583, 'US/Indiana-Starke', 'US/Indiana-Starke'), - Enumdict(584, 'US/Michigan', 'US/Michigan'), - Enumdict(585, 'US/Mountain', 'US/Mountain'), - Enumdict(586, 'US/Pacific', 'US/Pacific'), - Enumdict(587, 'US/Samoa', 'US/Samoa'), - Enumdict(588, 'UTC', 'UTC'), - Enumdict(589, 'Universal', 'Universal'), - Enumdict(590, 'W-SU', 'W-SU'), - Enumdict(591, 'WET', 'WET'), - Enumdict(592, 'Zulu', 'Zulu') - ) diff --git a/toardb/stationmeta/models_annotation.py b/toardb/stationmeta/models_annotation.py index 64f0dcca64a91fd39e33a35071fe4d20cf53c57f..62ee472927bcd52130d0e834c67320569b417430 100644 --- a/toardb/stationmeta/models_annotation.py +++ b/toardb/stationmeta/models_annotation.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationmetaAnnotation (Base) ================================== @@ -8,6 +7,7 @@ from sqlalchemy import Column, DateTime, Float, ForeignKey, Integer, String, \ from sqlalchemy.orm import relationship from toardb.auth_user.models import AuthUser from toardb.base import Base +from toardb.generic import models # many-to-many relationships diff --git a/toardb/stationmeta/models_aux.py b/toardb/stationmeta/models_aux.py index 57c88dac1722fa129eb4f385ec9c42d092655ca9..d22701081bcfabebc8ef106f22358a5dfbee858c 100644 --- a/toardb/stationmeta/models_aux.py +++ b/toardb/stationmeta/models_aux.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationMetaAux (Base) =========================== diff --git a/toardb/stationmeta/models_changelog.py b/toardb/stationmeta/models_changelog.py index 387c70abe9030f1578ff5925717c4c02a4e23031..ffb90a0d8dc0ff1ec4eb5f02f8187dccb9502888 100644 --- a/toardb/stationmeta/models_changelog.py +++ b/toardb/stationmeta/models_changelog.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationmetaChangelog(Base) ================================ diff --git a/toardb/stationmeta/models_core.py b/toardb/stationmeta/models_core.py index 6a7115fc5bb5d6a2828d26c7f0a8828cb96c7eea..0c01b821fcaae324dd2e8d238cd52c53e53218fc 100644 --- a/toardb/stationmeta/models_core.py +++ b/toardb/stationmeta/models_core.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationmetaCore (Base) ============================ diff --git a/toardb/stationmeta/models_global.py b/toardb/stationmeta/models_global.py index 14fc8b8bab609c532a58c55da1ff72ce65291830..c5c627850a08c2f156b4701c9245f94aa5f7b1db 100644 --- a/toardb/stationmeta/models_global.py +++ b/toardb/stationmeta/models_global.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationmetaGlobal (Base) ============================== diff --git a/toardb/stationmeta/models_global_services.py b/toardb/stationmeta/models_global_services.py index 2fdbcc0d6850b02da5f8c8372325e6ad54daa9ab..213f6e56632f38440d9aa4c86ef3538262c4700e 100644 --- a/toardb/stationmeta/models_global_services.py +++ b/toardb/stationmeta/models_global_services.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationmetaGlobalService (Base) ===================================== diff --git a/toardb/stationmeta/models_role.py b/toardb/stationmeta/models_role.py index acd45d8a10b85dbafb82654229ff73f8089cdca1..3c5396f2337a73f40018109b2221049ad1bee020 100644 --- a/toardb/stationmeta/models_role.py +++ b/toardb/stationmeta/models_role.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class StationmetaRole (Base) ============================ diff --git a/toardb/stationmeta/schemas.py b/toardb/stationmeta/schemas.py index 4f9e401d3f8c619ce35b6c1b865e43895fb6058b..fcc2b65c1d9792c261ee5b3e2df407d942f25c77 100644 --- a/toardb/stationmeta/schemas.py +++ b/toardb/stationmeta/schemas.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Pydantic schemas for TOAR database @@ -9,10 +8,8 @@ from pydantic import BaseModel, Field, BaseConfig, Json, validator from geoalchemy2 import WKTElement from geoalchemy2.shape import to_shape import datetime as dt -from .models import CZ_enum, CV_enum, ST_enum, TA_enum, TC_enum, \ - TR_enum, DL_enum, CN_enum, TZ_enum -from toardb.generic.models import RC_enum, RS_enum, AK_enum, CL_enum from toardb.contacts.schemas import Contact +import toardb # the following class was taken from: @@ -42,23 +39,23 @@ class StationmetaCoreBase(BaseModel): @validator('coordinate_validation_status') def check_coordinate_validation_status(cls, v): - return tuple(filter(lambda x: x.value == int(v), CV_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CV_vocabulary))[0].display_str @validator('country') def check_country(cls, v): - return tuple(filter(lambda x: x.value == int(v), CN_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CN_vocabulary))[0].display_str @validator('type_of_environment') def check_type_of_environment(cls, v): - return tuple(filter(lambda x: x.value == int(v), ST_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.ST_vocabulary))[0].display_str @validator('type_of_area') def check_type_of_area(cls, v): - return tuple(filter(lambda x: x.value == int(v), TA_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TA_vocabulary))[0].display_str @validator('timezone') def check_timezone(cls, v): - return tuple(filter(lambda x: x.value == int(v), TZ_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TZ_vocabulary))[0].display_str class StationmetaCorePatch(BaseModel): @@ -79,27 +76,27 @@ class StationmetaCorePatch(BaseModel): @validator('coordinate_validation_status') def check_coordinate_validation_status(cls, v): if v: - return tuple(filter(lambda x: x.value == int(v), CV_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CV_vocabulary))[0].display_str @validator('country') def check_country(cls, v): if v: - return tuple(filter(lambda x: x.value == int(v), CN_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CN_vocabulary))[0].display_str @validator('type_of_environment') def check_type_of_environment(cls, v): if v: - return tuple(filter(lambda x: x.value == int(v), ST_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.ST_vocabulary))[0].display_str @validator('type_of_area') def check_type_of_area(cls, v): if v: - return tuple(filter(lambda x: x.value == int(v), TA_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TA_vocabulary))[0].display_str @validator('timezone') def check_timezone(cls, v): if v: - return tuple(filter(lambda x: x.value == int(v), TZ_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TZ_vocabulary))[0].display_str class StationmetaCoreCreate(StationmetaCoreBase): @@ -107,35 +104,35 @@ class StationmetaCoreCreate(StationmetaCoreBase): @validator('coordinate_validation_status') def check_coordinate_validation_status(cls, v): - if tuple(filter(lambda x: x.string == v, CV_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.CV_vocabulary)): return v else: raise ValueError(f"coordinate validation status not known: {v}") @validator('country') def check_country(cls, v): - if tuple(filter(lambda x: x.string == v, CN_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.CN_vocabulary)): return v else: raise ValueError(f"country not known: {v}") @validator('type_of_environment') def check_type_of_environment(cls, v): - if tuple(filter(lambda x: x.string == v, ST_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.ST_vocabulary)): return v else: raise ValueError(f"type of environment not known: {v}") @validator('type_of_area') def check_type_of_area(cls, v): - if tuple(filter(lambda x: x.string == v, TA_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.TA_vocabulary)): return v else: raise ValueError(f"type of area not known: {v}") @validator('timezone') def check_timezone(cls, v): - if tuple(filter(lambda x: x.string == v, TZ_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.TZ_vocabulary)): return v else: raise ValueError(f"timezone not known: {v}") @@ -170,7 +167,7 @@ class StationmetaAnnotationBase(BaseModel): @validator('kind') def check_kind(cls, v): - return tuple(filter(lambda x: x.value == int(v), AK_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.AK_vocabulary))[0].display_str class StationmetaAnnotationPatch(BaseModel): @@ -182,7 +179,7 @@ class StationmetaAnnotationPatch(BaseModel): @validator('kind') def check_kind(cls, v): - return tuple(filter(lambda x: x.value == int(v), AK_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.AK_vocabulary))[0].display_str class StationmetaAnnotationCreate(StationmetaAnnotationBase): @@ -305,19 +302,19 @@ class StationmetaGlobalBase(BaseModel): @validator('climatic_zone') def check_climatic_zone(cls, v): - return tuple(filter(lambda x: x.value == int(v), CZ_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CZ_vocabulary))[0].display_str @validator('toar1_category') def check_toar1_category(cls, v): - return tuple(filter(lambda x: x.value == int(v), TC_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TC_vocabulary))[0].display_str @validator('htap_region_tier1') def check_htap_region_tier1(cls, v): - return tuple(filter(lambda x: x.value == int(v), TR_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TR_vocabulary))[0].display_str @validator('dominant_landcover_year2012') def check_dominant_landcover_year2012(cls, v): - return tuple(filter(lambda x: x.value == int(v), DL_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.DL_vocabulary))[0].display_str class StationmetaGlobalPatch(BaseModel): @@ -341,19 +338,19 @@ class StationmetaGlobalPatch(BaseModel): @validator('climatic_zone') def check_climatic_zone(cls, v): - return tuple(filter(lambda x: x.value == int(v), CZ_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CZ_vocabulary))[0].display_str @validator('toar1_category') def check_toar1_category(cls, v): - return tuple(filter(lambda x: x.value == int(v), TC_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TC_vocabulary))[0].display_str @validator('htap_region_tier1') def check_htap_region_tier1(cls, v): - return tuple(filter(lambda x: x.value == int(v), TR_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.TR_vocabulary))[0].display_str @validator('dominant_landcover_year2012') def check_dominant_landcover_year2012(cls, v): - return tuple(filter(lambda x: x.value == int(v), DL_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.DL_vocabulary))[0].display_str class StationmetaGlobalCreate(StationmetaGlobalBase): @@ -361,28 +358,28 @@ class StationmetaGlobalCreate(StationmetaGlobalBase): @validator('climatic_zone') def check_climatic_zone(cls, v): - if tuple(filter(lambda x: x.string == v, CZ_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.CZ_vocabulary)): return v else: raise ValueError(f"climatic zone not known: {v}") @validator('toar1_category') def check_toar1_category(cls, v): - if tuple(filter(lambda x: x.string == v, TC_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.TC_vocabulary)): return v else: raise ValueError(f"TOAR1 category not known: {v}") @validator('htap_region_tier1') def check_htap_region_tier1(cls, v): - if tuple(filter(lambda x: x.string == v, TR_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.TR_vocabulary)): return v else: raise ValueError(f"HTAP region TIER1 not known: {v}") @validator('dominant_landcover_year2012') def check_dominant_landcover_year2012(cls, v): - if tuple(filter(lambda x: x.string == v, DL_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.DL_vocabulary)): return v else: raise ValueError(f"dominant landcover (year2012) not known: {v}") @@ -457,11 +454,11 @@ class StationmetaRoleBase(BaseModel): @validator('role') def check_role(cls, v): - return tuple(filter(lambda x: x.value == int(v), RC_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.RC_vocabulary))[0].display_str @validator('status') def check_status(cls, v): - return tuple(filter(lambda x: x.value == int(v), RS_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.RS_vocabulary))[0].display_str class Config: orm_mode = True @@ -485,14 +482,14 @@ class StationmetaRoleCreate(StationmetaRoleBase): @validator('role') def check_role(cls, v): - if tuple(filter(lambda x: x.string == v, RC_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.RC_vocabulary)): return v else: raise ValueError(f"role code not known: {v}") @validator('status') def check_status(cls, v): - if tuple(filter(lambda x: x.string == v, RS_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.RS_vocabulary)): return v else: raise ValueError(f"role status not known: {v}") @@ -520,7 +517,7 @@ class StationmetaChangelogBase(BaseModel): @validator('type_of_change') def check_role(cls, v): - return tuple(filter(lambda x: x.value == int(v), CL_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.CL_vocabulary))[0].display_str class Config: orm_mode = True diff --git a/toardb/test_base.py b/toardb/test_base.py index 16c2797f88bbe7443bf5283c544dcd6eae0f50ee..de99c4b09f1812b295f9f60064110aaeb5743a6d 100644 --- a/toardb/test_base.py +++ b/toardb/test_base.py @@ -10,7 +10,8 @@ from toardb.base import Base from toardb.toardb import app from toardb.utils.database import DATABASE_URL, get_db, get_engine -url = "postgresql://toaradmin:toar2@localhost:5432/toardb_test" +#url = "postgresql://toaradmin:???@localhost:5432/toardb_test" +url = "postgresql://toardb_pytest:???@zam10116.zam.kfa-juelich.de:5433/toardb_test" _db_conn = create_engine(url) def get_test_engine() -> Engine: @@ -33,26 +34,28 @@ def create_test_database(): We use the `sqlalchemy_utils` package here for a few helpers in consistently creating and dropping the database. """ - if database_exists(url): - drop_database(url) - create_database(url) # Create the test database. +# if database_exists(url): +# drop_database(url) +# create_database(url) # Create the test database. #'create_all' does not work (because of undefined 'Geometry')! #declare PostGIS extension! (and toar_controlled_vocabulary) - fake_conn = _db_conn.raw_connection() - fake_cur = fake_conn.cursor() - fake_cur.execute("CREATE EXTENSION IF NOT EXISTS postgis") - fake_conn.commit() - fake_cur.execute("CREATE EXTENSION IF NOT EXISTS toar_controlled_vocabulary") - fake_conn.commit() +# fake_conn = _db_conn.raw_connection() +# fake_cur = fake_conn.cursor() +# fake_cur.execute("CREATE EXTENSION IF NOT EXISTS postgis") +# fake_conn.commit() +# fake_cur.execute("CREATE EXTENSION IF NOT EXISTS toar_controlled_vocabulary") +# fake_conn.commit() +# fake_cur.execute("SET TIMEZONE='UTC'") +# fake_conn.commit() Base.metadata.create_all(_db_conn) # Create the tables. #try with the basics app.dependency_overrides[get_db] = get_test_db # Mock the Database Dependency app.dependency_overrides[get_engine] = get_test_engine # Mock the Database Dependency yield # Run the tests. - drop_database(url) # Drop the test database. +# drop_database(url) # Drop the test database. -@pytest.yield_fixture +@pytest.fixture def test_db_session(): """Returns an sqlalchemy session, and after the test tears down everything properly.""" diff --git a/toardb/timeseries/crud.py b/toardb/timeseries/crud.py index 8e2a81d9e13b1a0023646f3657b40d34c13e598a..b289c618975de8f41e51811edb06d80eb2477e02 100644 --- a/toardb/timeseries/crud.py +++ b/toardb/timeseries/crud.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Create, Read, Update, Delete functionality @@ -10,14 +9,13 @@ from geoalchemy2.elements import WKBElement, WKTElement from fastapi.responses import JSONResponse from . import models from .models import TimeseriesChangelog, timeseries_timeseries_roles_table, \ - timeseries_timeseries_annotations_table, \ - DA_enum, SF_enum, AT_enum, DS_enum, MM_enum + timeseries_timeseries_annotations_table from toardb.stationmeta.models import StationmetaCore from toardb.stationmeta.schemas import get_coordinates_from_geom, get_geom_from_coordinates -from toardb.generic.models import RS_enum, RC_enum from toardb.contacts.crud import get_organisation_by_name, get_contact from .schemas import TimeseriesCreate, TimeseriesPatch, TimeseriesRoleNoCreate from toardb.utils.utils import get_value_from_str, get_str_from_value +import toardb def get_timeseries(db: Session, timeseries_id: int): @@ -50,7 +48,7 @@ def get_timeseries_by_unique_constraints(db: Session, station_id: int, variable_ .filter(models.Timeseries.variable_id == variable_id) \ .filter(models.Timeseries.label == label.strip()).all() if resource_provider != '': - role_num = get_value_from_str(RC_enum,'ResourceProvider') + role_num = get_value_from_str(toardb.toardb.RC_vocabulary,'ResourceProvider') for db_object in db_objects: for role in db_object.roles: contact = get_contact(db, contact_id=role.contact_id) @@ -118,11 +116,11 @@ def create_timeseries(db: Session, timeseries: TimeseriesCreate): roles_data = timeseries_dict.pop('roles', None) annotations_data = timeseries_dict.pop('annotations', None) db_timeseries = models.Timeseries(**timeseries_dict) - db_timeseries.access_rights = get_value_from_str(DA_enum,db_timeseries.access_rights) - db_timeseries.sampling_frequency = get_value_from_str(SF_enum,db_timeseries.sampling_frequency) - db_timeseries.aggregation = get_value_from_str(AT_enum,db_timeseries.aggregation) - db_timeseries.source = get_value_from_str(DS_enum,db_timeseries.source) - db_timeseries.measurement_method= get_value_from_str(MM_enum,db_timeseries.measurement_method) + db_timeseries.access_rights = get_value_from_str(toardb.toardb.DA_vocabulary,db_timeseries.access_rights) + db_timeseries.sampling_frequency = get_value_from_str(toardb.toardb.SF_vocabulary,db_timeseries.sampling_frequency) + db_timeseries.aggregation = get_value_from_str(toardb.toardb.AT_vocabulary,db_timeseries.aggregation) + db_timeseries.source = get_value_from_str(toardb.toardb.DS_vocabulary,db_timeseries.source) + db_timeseries.measurement_method= get_value_from_str(toardb.toardb.MM_vocabulary,db_timeseries.measurement_method) db.add(db_timeseries) result = db.commit() db.refresh(db_timeseries) @@ -132,8 +130,8 @@ def create_timeseries(db: Session, timeseries: TimeseriesCreate): if roles_data: for r in roles_data: db_role = models.TimeseriesRole(**r) - db_role.role = get_value_from_str(RC_enum,db_role.role) - db_role.status = get_value_from_str(RS_enum,db_role.status) + db_role.role = get_value_from_str(toardb.toardb.RC_vocabulary,db_role.role) + db_role.status = get_value_from_str(toardb.toardb.RS_vocabulary,db_role.status) # check whether role is already present in database db_object = get_unique_timeseries_role(db, db_role.role, db_role.contact_id, db_role.status) if db_object: @@ -195,8 +193,8 @@ def patch_timeseries(db: Session, description: str, timeseries_id: int, timeseri if roles_data: for r in roles_data: db_role = models.TimeseriesRoleNoCreate(**r) - db_role.role = get_value_from_str(RC_enum,db_role.role) - db_role.status = get_value_from_str(RS_enum,db_role.status) + db_role.role = get_value_from_str(toardb.toardb.RC_vocabulary,db_role.role) + db_role.status = get_value_from_str(toardb.toardb.RS_vocabulary,db_role.status) # check whether role is already present in database db_object = get_unique_timeseries_role(db, db_role.role, db_role.contact_id, db_role.status) if db_object: diff --git a/toardb/timeseries/fixtures/timeseries.json b/toardb/timeseries/fixtures/timeseries.json index 167f2dd40f607cbf4f02e68b5a4a7a5653a56859..efdcda1334ed588870d89beaf1da5cb404436c93 100644 --- a/toardb/timeseries/fixtures/timeseries.json +++ b/toardb/timeseries/fixtures/timeseries.json @@ -7,12 +7,12 @@ "access_rights": 0, "sampling_frequency": 0, "aggregation": 0, - "data_start_date": "2003-09-07 15:30:00", - "data_end_date": "2016-12-31 14:30:00", + "data_start_date": "2003-09-07 15:30:00+00:00", + "data_end_date": "2016-12-31 14:30:00+00:00", "measurement_method": 0, "sampling_height": 7, "additional_metadata": "{}", - "date_added": "2020-05-15 15:30:00", - "date_modified": "2020-05-16 09:30:00" + "date_added": "2020-05-15 15:30:00+00:00", + "date_modified": "2020-05-16 09:30:00+00:00" } ] diff --git a/toardb/timeseries/models.py b/toardb/timeseries/models.py index 19cbb5214132047867ebf1793827cfe42d580e40..815a73d7e8101c245679ab7998e2ceef975e6827 100644 --- a/toardb/timeseries/models.py +++ b/toardb/timeseries/models.py @@ -17,14 +17,6 @@ DA_enum_table = Table("da_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -from collections import namedtuple -Enumdict=namedtuple("Dict",["value","string","display_str"]) -DA_enum = ( - Enumdict(0, 'ByAttribution', 'by attribution'), - Enumdict(1, 'ShareAlike', 'share alike'), - Enumdict(2, 'Restricted', 'restricted') - ) # Sampling Frequencies SF_enum_table = Table("sf_vocabulary", @@ -33,19 +25,6 @@ SF_enum_table = Table("sf_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -SF_enum = ( - Enumdict(0, 'Hourly', 'hourly'), - Enumdict(1, 'ThreeHourly', '3-hourly'), - Enumdict(2, 'SixHourly', '6-hourly'), - Enumdict(3, 'Daily', 'daily'), - Enumdict(4, 'Weekly', 'weekly'), - Enumdict(5, 'Monthly', 'monthly'), - Enumdict(6, 'Yearly', 'yearly'), - Enumdict(7, 'Irregular', 'irregular data samples of constant length'), - Enumdict(8, 'Irregular2', 'irregular data samples of varying length') - ) - # Aggregation Types AT_enum_table = Table("at_vocabulary", @@ -54,16 +33,6 @@ AT_enum_table = Table("at_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -AT_enum = ( - Enumdict(0, 'Mean', 'mean'), - Enumdict(1, 'Mean1Of2', 'mean of two values'), - Enumdict(2, 'Mean1OfWeek', 'weekly mean'), - Enumdict(3, 'Mean4Samples', 'mean out of 4 samples'), - Enumdict(4, 'MeanMonth', 'monthly mean'), - Enumdict(5, 'None', 'none'), - Enumdict(6, 'Unknown', 'unknown') - ) # Data Sources DS_enum_table = Table("ds_vocabulary", @@ -72,11 +41,6 @@ DS_enum_table = Table("ds_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -DS_enum = ( - Enumdict(0, 'Model', 'model'), - Enumdict(1, 'Measurement', 'measurement') - ) # Measurement Methods MM_enum_table = Table("mm_vocabulary", @@ -85,9 +49,4 @@ MM_enum_table = Table("mm_vocabulary", Column("enum_str", String), Column("enum_display_str", String) ) -# The following code is just a workaround (see stationmeta/models.py): -MM_enum = ( - Enumdict(0, 'UVAbsorption', 'UV absorption'), - Enumdict(1, 'UnknownInstrument', 'unknown instrument') - ) diff --git a/toardb/timeseries/models_annotation.py b/toardb/timeseries/models_annotation.py index ccec7bd923f9eef4eb4e563e29587dc2c551355a..47201fb6e2a67eaad50e405649e536fb101f364a 100644 --- a/toardb/timeseries/models_annotation.py +++ b/toardb/timeseries/models_annotation.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class TimeseriesAnnotation(Base) ================================ diff --git a/toardb/timeseries/models_changelog.py b/toardb/timeseries/models_changelog.py index 1c150db13635a79e850864fb30833b6735287df1..74e515836fd5b1ce1cff084f870d8f3f261f72e7 100644 --- a/toardb/timeseries/models_changelog.py +++ b/toardb/timeseries/models_changelog.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class TimeseriesChangelog(Base) =============================== diff --git a/toardb/timeseries/models_core.py b/toardb/timeseries/models_core.py index 81a7450b8de28b7bf63d629df85c5f619c69052f..070d542ca4ac04929548e94067f57d23cc895a44 100644 --- a/toardb/timeseries/models_core.py +++ b/toardb/timeseries/models_core.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class Timeseries (Base) ======================= diff --git a/toardb/timeseries/models_programme.py b/toardb/timeseries/models_programme.py index 60056a4b27076c1acf6c91678418b1bc0c48716a..a11498d93a2fda5f2cce0fa076c06a9c2f29b1bb 100644 --- a/toardb/timeseries/models_programme.py +++ b/toardb/timeseries/models_programme.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class TimeseriesProgramme (Base) ================================ diff --git a/toardb/timeseries/models_role.py b/toardb/timeseries/models_role.py index 35ee72a70ec0a6680f682353a0c6aba1f10ef4d8..10474f0dafd052bbf2ff07a16c77924a50bf0552 100644 --- a/toardb/timeseries/models_role.py +++ b/toardb/timeseries/models_role.py @@ -1,4 +1,3 @@ -# coding: utf-8 """ class TimeseriesRole (Base) =========================== diff --git a/toardb/timeseries/schemas.py b/toardb/timeseries/schemas.py index 2b8806f7e02c72de9c946930d28860ba5c95b757..f6a67f540ebde60b09a9b88a8801f9a2b0235e24 100644 --- a/toardb/timeseries/schemas.py +++ b/toardb/timeseries/schemas.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Pydantic schemas for TOAR database @@ -8,9 +7,7 @@ from typing import List, Any from pydantic import BaseModel, Json, validator, Field import datetime as dt -from toardb.generic.models import RS_enum, RC_enum from toardb.contacts.schemas import Contact -from .models import DA_enum, SF_enum, AT_enum, DS_enum, MM_enum from toardb.variables.schemas import Variable #from toardb.stationmeta.schemas import StationmetaCoreCreate from toardb.stationmeta.schemas import StationmetaCoreBase @@ -18,6 +15,7 @@ from toardb.stationmeta.schemas import StationmetaCoreBase #from toardb.stationmeta.schemas import StationmetaCreate #from toardb.stationmeta.schemas import StationmetaBase #from toardb.stationmeta.schemas import Stationmeta +import toardb # ======== Timeseries ========= @@ -43,23 +41,23 @@ class TimeseriesCoreBase(BaseModel): @validator('access_rights') def check_access_rights(cls, v): - return tuple(filter(lambda x: x.value == int(v), DA_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.DA_vocabulary))[0].display_str @validator('sampling_frequency') def check_sampling_frequency(cls, v): - return tuple(filter(lambda x: x.value == int(v), SF_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.SF_vocabulary))[0].display_str @validator('aggregation') def check_aggregation(cls, v): - return tuple(filter(lambda x: x.value == int(v), AT_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.AT_vocabulary))[0].display_str @validator('source') def check_source(cls, v): - return tuple(filter(lambda x: x.value == int(v), DS_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.DS_vocabulary))[0].display_str @validator('measurement_method') def check_measurement_method(cls, v): - return tuple(filter(lambda x: x.value == int(v), MM_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.MM_vocabulary))[0].display_str class TimeseriesCoreCreate(TimeseriesCoreBase): @@ -69,35 +67,35 @@ class TimeseriesCoreCreate(TimeseriesCoreBase): @validator('access_rights') def check_access_rights(cls, v): - if tuple(filter(lambda x: x.string == v, DA_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.DA_vocabulary)): return v else: raise ValueError(f"data access right not known: {v}") @validator('sampling_frequency') def check_sampling_frequency(cls, v): - if tuple(filter(lambda x: x.string == v, SF_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.SF_vocabulary)): return v else: raise ValueError(f"sampling frequency not known: {v}") @validator('aggregation') def check_aggregation(cls, v): - if tuple(filter(lambda x: x.string == v, AT_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.AT_vocabulary)): return v else: raise ValueError(f"aggregation type not known: {v}") @validator('source') def check_source(cls, v): - if tuple(filter(lambda x: x.string == v, DS_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.DS_vocabulary)): return v else: raise ValueError(f"data source not known: {v}") @validator('measurement_method') def check_measurement_method(cls, v): - if tuple(filter(lambda x: x.string == v, MM_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.MM_vocabulary)): return v else: raise ValueError(f"measurement method not known: {v}") @@ -120,11 +118,11 @@ class TimeseriesRoleBase(BaseModel): @validator('role') def check_role(cls, v): - return tuple(filter(lambda x: x.value == int(v), RC_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.RC_vocabulary))[0].display_str @validator('status') def check_status(cls, v): - return tuple(filter(lambda x: x.value == int(v), RS_enum))[0].display_str + return tuple(filter(lambda x: x.value == int(v), toardb.toardb.RS_vocabulary))[0].display_str class Config: orm_mode = True @@ -135,14 +133,14 @@ class TimeseriesRoleCreate(TimeseriesRoleBase): @validator('role') def check_role(cls, v): - if tuple(filter(lambda x: x.string == v, RC_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.RC_vocabulary)): return v else: raise ValueError(f"role code not known: {v}") @validator('status') def check_status(cls, v): - if tuple(filter(lambda x: x.string == v, RS_enum)): + if tuple(filter(lambda x: x.string == v, toardb.toardb.RS_vocabulary)): return v else: raise ValueError(f"role status not known: {v}") diff --git a/toardb/timeseries/test_timeseries.py b/toardb/timeseries/test_timeseries.py index a71bda8a0b1e7318b14f9bcbc29dfbecccb1ce9f..086e5d1907dafbedbe7e8a6b8089070230ffc8d7 100644 --- a/toardb/timeseries/test_timeseries.py +++ b/toardb/timeseries/test_timeseries.py @@ -146,9 +146,9 @@ class TestApps: assert response.status_code == expected_status_code expected_resp = [{'id': 1, 'label': 'CMA', 'order': 1, 'access_rights': 'by attribution', 'sampling_frequency': 'hourly', 'aggregation': 'mean', 'source': 'measurement', - 'data_start_date': '2003-09-07T15:30:00+02:00', 'data_end_date': '2016-12-31T14:30:00+01:00', + 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00: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', + 'date_added': '2020-05-15T15:30:00+00:00', 'date_modified': '2020-05-16T09:30:00+00:00', 'additional_metadata': {}, 'roles': [], 'annotations': [], 'changelog': [], 'variable': {'name': 'toluene', 'longname': 'toluene', 'displayname': 'Toluene', 'cf_standardname': 'mole_fraction_of_toluene_in_air', 'units': 'nmol mol-1', @@ -169,9 +169,9 @@ class TestApps: assert response.status_code == expected_status_code expected_resp = {'id': 1, 'label': 'CMA', 'order': 1, 'access_rights': 'by attribution', 'sampling_frequency': 'hourly', 'aggregation': 'mean', 'source': 'measurement', - 'data_start_date': '2003-09-07T15:30:00+02:00', 'data_end_date': '2016-12-31T14:30:00+01:00', + 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00: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', + 'date_added': '2020-05-15T15:30:00+00:00', 'date_modified': '2020-05-16T09:30:00+00:00', 'additional_metadata': {}, 'roles': [], 'annotations': [], 'changelog': [], 'variable': {'name': 'toluene', 'longname': 'toluene', 'displayname': 'Toluene', 'cf_standardname': 'mole_fraction_of_toluene_in_air', 'units': 'nmol mol-1', diff --git a/toardb/timeseries/timeseries.py b/toardb/timeseries/timeseries.py index eba50f1183c4257c337d80c87d67fb99f9094c2a..05c2831b4a748ae005414ec3e9ae7ac20a056300 100644 --- a/toardb/timeseries/timeseries.py +++ b/toardb/timeseries/timeseries.py @@ -7,7 +7,6 @@ from fastapi import APIRouter, Depends, HTTPException, Body from sqlalchemy.orm import Session from . import crud, schemas from toardb.utils.database import ToarDbSession, get_db -from toardb.generic.models import RC_enum, RS_enum from toardb.utils.utils import get_str_from_value from toardb.contacts.crud import get_contact diff --git a/toardb/toardb.py b/toardb/toardb.py index a004f1374c5dc414c4493741a4285d1dfa3dd66b..ae25b1ca2ae5edfc44a227f3e15d4a4c88ba1c52 100644 --- a/toardb/toardb.py +++ b/toardb/toardb.py @@ -20,6 +20,28 @@ from toardb.data import data from collections import namedtuple from pydantic import BaseSettings +RC_vocabulary = 0 +RS_vocabulary = 0 +AK_vocabulary = 0 +OK_vocabulary = 0 +DA_vocabulary = 0 +SF_vocabulary = 0 +AT_vocabulary = 0 +DS_vocabulary = 0 +MM_vocabulary = 0 +CZ_vocabulary = 0 +CV_vocabulary = 0 +CN_vocabulary = 0 +TZ_vocabulary = 0 +ST_vocabulary = 0 +TA_vocabulary = 0 +TC_vocabulary = 0 +TR_vocabulary = 0 +DL_vocabulary = 0 +RT_vocabulary = 0 +DF_vocabulary = 0 +CL_vocabulary = 0 + app = FastAPI() app.mount("/static", StaticFiles(directory="static"), name="static") @@ -138,6 +160,28 @@ def __get_enum_dict(fake_cur, table_name): async def startup_event(): fake_conn = engine.raw_connection() fake_cur = fake_conn.cursor() + global RC_vocabulary + global RS_vocabulary + global AK_vocabulary + global OK_vocabulary + global DA_vocabulary + global SF_vocabulary + global AT_vocabulary + global DS_vocabulary + global MM_vocabulary + global CZ_vocabulary + global CV_vocabulary + global CN_vocabulary + global TZ_vocabulary + global ST_vocabulary + global TA_vocabulary + global TC_vocabulary + global TR_vocabulary + global DL_vocabulary + global RT_vocabulary + global DF_vocabulary + global CL_vocabulary + RC_vocabulary = __get_enum_dict(fake_cur, "rc_vocabulary") RS_vocabulary = __get_enum_dict(fake_cur, "rs_vocabulary") AK_vocabulary = __get_enum_dict(fake_cur, "ak_vocabulary") @@ -161,34 +205,7 @@ async def startup_event(): CL_vocabulary = __get_enum_dict(fake_cur, "cl_vocabulary") -Enumdict=namedtuple("Dict",["value","string","display_str"]) -fake_conn = engine.raw_connection() -fake_cur = fake_conn.cursor() -RC_vocabulary = __get_enum_dict(fake_cur, "rc_vocabulary") -RS_vocabulary = __get_enum_dict(fake_cur, "rs_vocabulary") -AK_vocabulary = __get_enum_dict(fake_cur, "ak_vocabulary") -OK_vocabulary = __get_enum_dict(fake_cur, "ok_vocabulary") -DA_vocabulary = __get_enum_dict(fake_cur, "da_vocabulary") -SF_vocabulary = __get_enum_dict(fake_cur, "sf_vocabulary") -AT_vocabulary = __get_enum_dict(fake_cur, "at_vocabulary") -DS_vocabulary = __get_enum_dict(fake_cur, "ds_vocabulary") -MM_vocabulary = __get_enum_dict(fake_cur, "mm_vocabulary") -CZ_vocabulary = __get_enum_dict(fake_cur, "cz_vocabulary") -CV_vocabulary = __get_enum_dict(fake_cur, "cv_vocabulary") -CN_vocabulary = __get_enum_dict(fake_cur, "cn_vocabulary") -TZ_vocabulary = __get_enum_dict(fake_cur, "tz_vocabulary") -ST_vocabulary = __get_enum_dict(fake_cur, "st_vocabulary") -TA_vocabulary = __get_enum_dict(fake_cur, "ta_vocabulary") -TC_vocabulary = __get_enum_dict(fake_cur, "tc_vocabulary") -TR_vocabulary = __get_enum_dict(fake_cur, "tr_vocabulary") -DL_vocabulary = __get_enum_dict(fake_cur, "dl_vocabulary") -RT_vocabulary = __get_enum_dict(fake_cur, "rt_vocabulary") -DF_vocabulary = __get_enum_dict(fake_cur, "df_vocabulary") -CL_vocabulary = __get_enum_dict(fake_cur, "cl_vocabulary") - - class Settings(BaseSettings): - Enumdict=namedtuple("Dict",["value","string","display_str"]) RC_vocab = RC_vocabulary RS_vocab = RS_vocabulary AK_vocab = AK_vocabulary diff --git a/toardb/utils/utils.py b/toardb/utils/utils.py index bd90ddd45a9a547dc712d01ca5be4a155f9d911d..fa753533a3e7a6234631e2f3a62e16558db90645 100644 --- a/toardb/utils/utils.py +++ b/toardb/utils/utils.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- """ Helper functions for TOAR database @@ -7,28 +6,11 @@ from sqlalchemy import Table from sqlalchemy.orm import Session from collections import namedtuple -# get the controlled vocabulary from table -def __get_enum_dict(db: Session, table: Table): - Enumdict=namedtuple("Dict",["value","string","display_str"]) - enum_dict = [] - for entry in db.query(table).all(): - enum_dict.append(Enumdict(*entry)) - return enum_dict - # function to return code for given value -#def get_str_from_value(db: Session, table: Table, value: int) -> str: def get_str_from_value(enum_dict, value) -> str: -# enum_error = "Invalid " + table.name -# enum_dict = __get_enum_dict(db, table) return tuple(filter(lambda x: x.value == value, enum_dict))[0].string -# raise ValueError(enum_error) - # function to return value for given code -#def get_value_from_str(db: Session, table: Table, string: str) -> int: def get_value_from_str(enum_dict, string) -> int: -# enum_error = "Invalid " + table.name -# enum_dict = __get_enum_dict(db, table) return tuple(filter(lambda x: x.string == string, enum_dict))[0].value -# raise ValueError(enum_error) diff --git a/toardb/variables/models.py b/toardb/variables/models.py index da657f0eef16cd0a637d47817846e0f04af1fe4d..7ed3a8313491d4d46d29197aac0d90b3fef7e82c 100644 --- a/toardb/variables/models.py +++ b/toardb/variables/models.py @@ -1,4 +1,3 @@ -# coding: utf-8 from sqlalchemy import Column, Integer, String, Sequence from sqlalchemy.orm import relationship from sqlalchemy.sql.sqltypes import NullType