From 3e38c13c7eaa89ac6e0cb474b158eca9eb271a88 Mon Sep 17 00:00:00 2001 From: Anis Koubaa <mohamed.koubaa@kit.edu> Date: Mon, 27 Jan 2025 16:32:00 +0100 Subject: [PATCH] create <oe_section>.py using datamodel-codegen from <oe_section>.json. --- .../latest/build_source/schemas/collection.py | 36 ++++ .../latest/build_source/schemas/context.py | 84 ++++++++ .../latest/build_source/schemas/fields.py | 185 ++++++++++++++++++ .../latest/build_source/schemas/general.py | 109 +++++++++++ .../latest/build_source/schemas/licenses.py | 47 +++++ .../build_source/schemas/linked_data.py | 30 +++ .../latest/build_source/schemas/meta.py | 50 +++++ .../latest/build_source/schemas/provenance.py | 62 ++++++ .../latest/build_source/schemas/review.py | 32 +++ .../latest/build_source/schemas/sources.py | 93 +++++++++ .../latest/build_source/schemas/spatial.py | 100 ++++++++++ .../latest/build_source/schemas/temporal.py | 63 ++++++ 12 files changed, 891 insertions(+) create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/collection.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/context.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/fields.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/general.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/licenses.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/linked_data.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/meta.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/provenance.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/review.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/sources.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/spatial.py create mode 100644 services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/temporal.py diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/collection.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/collection.py new file mode 100644 index 0000000..f312160 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/collection.py @@ -0,0 +1,36 @@ +# generated by datamodel-codegen: +# filename: collection.json +# timestamp: 2025-01-27T15:24:04+00:00 + +from __future__ import annotations + +from typing import Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class Model(BaseModel): + name: Optional[str] = Field( + ..., + description='A filename or database conform dataset name.', + examples=['oep_oemetadata'], + title='Dataset Name', + ) + title: Optional[str] = Field( + None, + description='A human readable dataset name.', + examples=['OEP OEMetadata'], + title='Dataset Title', + ) + description: Optional[str] = Field( + None, + description='A free text description of the dataset.', + examples=['A dataset for the OEMetadata examples.'], + title='Dataset Description', + ) + id: Optional[AnyUrl] = Field( + None, + description='A unique identifier (UUID/DOI) for the dataset.', + examples=['https://databus.openenergyplatform.org/oeplatform/reference'], + title='Dataset Identifier', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/context.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/context.py new file mode 100644 index 0000000..2644432 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/context.py @@ -0,0 +1,84 @@ +# generated by datamodel-codegen: +# filename: context.json +# timestamp: 2025-01-27T15:24:27+00:00 + +from __future__ import annotations + +from typing import Optional + +from pydantic import AnyUrl, BaseModel, EmailStr, Field + + +class Context(BaseModel): + title: Optional[str] = Field( + None, + description='A title of the associated project.', + examples=['NFDI4Energy'], + title='Context Title', + ) + homepage: Optional[AnyUrl] = Field( + None, + description='A URL of the project.', + examples=['https://nfdi4energy.uol.de/'], + title='Homepage', + ) + documentation: Optional[str] = Field( + None, + description='A URL of the project documentation.', + examples=['https://nfdi4energy.uol.de/sites/about_us/'], + title='Documentation', + ) + sourceCode: Optional[str] = Field( + None, + description='A URL of the source code of the project.', + examples=['https://github.com/NFDI4Energy'], + title='Source Code', + ) + publisher: Optional[str] = Field( + None, + description='The publishing agency of the data. This can be the OEP.', + examples=['Open Energy Platform (OEP)'], + title='Publisher', + ) + publisherLogo: Optional[AnyUrl] = Field( + None, + description='A URL to the logo of the publishing agency of data.', + examples=[ + 'https://github.com/OpenEnergyPlatform/organisation/blob/production/logo/OpenEnergyFamily_Logo_OpenEnergyPlatform.svg' + ], + title='Publisher Logo', + ) + contact: Optional[EmailStr] = Field( + None, + description='A reference to the creator or maintainer of the data set. This can be an email address or a GitHub handle.', + examples=['contact@example.com'], + title='E-Mail Contact', + ) + fundingAgency: Optional[str] = Field( + None, + description='A name of the entity providing the funding. This can be a government agency or a company.', + examples=[' Deutsche Forschungsgemeinschaft (DFG)'], + title='Funding Agency', + ) + fundingAgencyLogo: Optional[AnyUrl] = Field( + None, + description='A URL to the logo or image of the funding agency.', + examples=[ + 'https://upload.wikimedia.org/wikipedia/commons/8/86/DFG-logo-blau.svg' + ], + title='Funding Agency Logo', + ) + grantNo: Optional[str] = Field( + None, + description='An identifying grant number. In case of a publicly funded project, this number is assigned by the funding agency.', + examples=['501865131'], + title='Grant Number', + ) + + +class Model(BaseModel): + context: Optional[Context] = Field( + None, + description='An Object that describes the general setting, environment or project leading to the creation or maintenance of this dataset. In science this can be the research project.', + title='Context', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/fields.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/fields.py new file mode 100644 index 0000000..41e09d2 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/fields.py @@ -0,0 +1,185 @@ +# generated by datamodel-codegen: +# filename: fields.json +# timestamp: 2025-01-27T15:02:42+00:00 + +from __future__ import annotations + +from typing import List, Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class IsAboutItem(BaseModel): + name: Optional[str] = Field( + None, + description='The class label of the ontology term.', + examples=['wind energy converting unit'], + title='Is About Name', + ) + field_id: Optional[AnyUrl] = Field( + None, + alias='@id', + description='The path of the ontology term (IRI).', + examples=['https://openenergyplatform.org/ontology/oeo/OEO_00000044'], + title='Is About Identifier', + ) + + +class ValueReferenceItem(BaseModel): + value: Optional[str] = Field( + None, + description='The name of the value in the column.', + examples=['onshore'], + title='Value', + ) + name: Optional[str] = Field( + None, + description='The class label of the ontology term in the column.', + examples=['onshore wind farm'], + title='Value Reference Name', + ) + field_id: Optional[AnyUrl] = Field( + None, + alias='@id', + description='The path of the ontology term (IRI) in the column.', + examples=['https://openenergyplatform.org/ontology/oeo/OEO_00000311'], + title='Value Reference Identifier', + ) + + +class FieldModel(BaseModel): + name: Optional[str] = Field( + ..., + description='The name of the field. The name may only consist of lowercase alphanumeric characters or underscores. It must not begin with a number or an underscore.', + examples=['year'], + title='Column Name', + ) + description: Optional[str] = Field( + None, + description='A text describing the field.', + examples=['Reference year for which the data was collected.'], + title='Description', + ) + type: Optional[str] = Field( + ..., + description='The data type of the field. In case of a geom column in a database, ' + 'also indicate the shape and CRS.', + examples=['geometry(Point, 4326)'], + title='Type', + ) + nullable: Optional[bool] = Field( + ..., + description='A boolean key to specify that a column can be nullable. True is the default value.', + examples=[True], + title='Nullable', + ) + unit: Optional[str] = Field( + None, + description="The unit of a field. If it does not apply, use 'null'. If the unit is given in a separate field, " + "reference this field (e.g. 'unit'). Use a space between numbers and units (100 m).", + examples=['MW'], + title='Unit', + ) + isAbout: Optional[List[IsAboutItem]] = Field( + None, + description='An array of objects that describes the field in ontology terms.', + title='isAbout', + ) + valueReference: Optional[List[ValueReferenceItem]] = Field( + None, + description='An array of objects for an extended description of the values in the column in ontology terms.', + title='valueReference', + ) + + +class Reference(BaseModel): + resource: Optional[str] = Field( + ..., + description='The referenced foreign table.', + examples=['model_draft.oep_oemetadata_table_example_version'], + title='Foreign Resource', + ) + fields: List[Optional[str]] = Field( + ..., description='The foreign resource column.', title='Field' + ) + + +class ForeignKey(BaseModel): + fields: List[Optional[str]] = Field( + ..., + description='An array of fields in the table that is constrained by the foreign key.', + title='Fields', + ) + reference: Optional[Reference] = Field( + None, description='The reference to the foreign table.', title='Reference' + ) + + +class Schema(BaseModel): + fields: Optional[List[FieldModel]] = Field( + None, + description='An array of objects that describes a field (column) and its detailed information.', + title='Field', + ) + primaryKey: List[Optional[str]] = Field( + ..., + description='An array of fields that uniquely identifies each row in the table.', + title='Primary key', + ) + foreignKeys: Optional[List[ForeignKey]] = Field( + None, description='List of foreign keys.', title='Foreign Keys' + ) + + +class Dialect(BaseModel): + delimiter: Optional[str] = Field( + None, + description="The delimiter specifies the character sequence which should separate fields (columns). " + "Common characters are ',' (comma), ';' (semicolon), '.' (point) and '\\t' (tab).", + examples=[';'], + title='Delimiter', + ) + decimalSeparator: Optional[str] = Field( + None, + description="The symbol used to separate the integer part from the fractional part of a number written in " + "decimal form. Depending on language and region this symbol can be '.' or ','.", + examples=['.'], + title='Decimal separator', + ) + + +class Model(BaseModel): + type: Optional[str] = Field( + None, + description="The 'table' type indicates that the resource is tabular " + "as per 'Frictionless Tabular Data' definition.", + examples=['table'], + title='Type', + ) + format: Optional[str] = Field( + None, + description="A file extension format. Possible options are 'csv', 'xlsx', 'json', 'PostgreSQL', " + "'SQLite' and other standard file extensions.", + examples=['CSV'], + title='Format', + ) + encoding: Optional[str] = Field( + None, + description="Specifies the character encoding of the resource's data file. The default is 'UTF-8'. " + "The values should be one of the 'Preferred MIME Names'.", + examples=['UTF-8'], + title='Encoding', + ) + schema_: Optional[Schema] = Field( + None, + alias='schema', + description='An object that describes the structure of a table. It contains all fields (columns of the table), ' + 'the primary key and optional foreign keys.', + title='Schema', + ) + dialect: Optional[Dialect] = Field( + None, + description="The Dialect defines a simple format for describing the various dialects of CSV files in" + "a language-independent manner. In a database, the values in the fields are 'null'.", + title='Dialect', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/general.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/general.py new file mode 100644 index 0000000..390b2e9 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/general.py @@ -0,0 +1,109 @@ +# generated by datamodel-codegen: +# filename: general.json +# timestamp: 2025-01-27T15:24:49+00:00 + +from __future__ import annotations + +from datetime import date +from typing import List, Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class SubjectItem(BaseModel): + name: Optional[str] = Field( + None, + description='A class label of the ontology term.', + examples=['energy'], + title='Subject Name', + ) + field_id: Optional[AnyUrl] = Field( + None, + alias='@id', + description='A unique identifier (URI/IRI) of the ontology class.', + examples=['https://openenergyplatform.org/ontology/oeo/OEO_00000150'], + title='Subject Identifier', + ) + + +class EmbargoPeriod(BaseModel): + start: Optional[date] = Field( + None, + description='The start date of the embargo period. The date of the data (metadata) upload.', + examples=['2024-10-11'], + title='Embargo Period Start', + ) + end: Optional[date] = Field( + None, + description='The end date of the embargo period. This is the intended publication date.', + examples=['2025-01-01'], + title='Embargo Period End (Publication Date)', + ) + isActive: Optional[bool] = Field( + None, + description='A boolean key that indicates if the embargo period is currently active. Must be changed to False on the embargo period end date.', + examples=[True], + title='Embargo Period is Active ', + ) + + +class Model(BaseModel): + name: Optional[str] = Field( + ..., + description='A filename or database conform table name.', + examples=['oep_oemetadata_table_example'], + title='Name', + ) + topics: Optional[List[Optional[str]]] = Field( + None, + description='An array of predefined topics that correspond to the database schemas of the OEP.', + title='Keywords', + ) + title: Optional[str] = Field( + None, + description='A human readable table name.', + examples=['OEP OEMetadata Example Table'], + title='Title', + ) + path: Optional[str] = Field( + None, + description='A unique identifier (URI/UUID/DOI) for the table or file.', + examples=[ + 'http://openenergyplatform.org/dataedit/view/model_draft/oep_oemetadata_table_example' + ], + title='Path', + ) + description: Optional[str] = Field( + None, + description='A description of the table. It should be usable as summary information for the table that is described by the metadata.', + examples=[ + 'Example table used to illustrate the OEMetadata structure and meaning.' + ], + title='Description', + ) + languages: Optional[List[Optional[str]]] = Field( + None, + description='An array of languages used within the described data structures (e.g. titles, descriptions) or metadata.', + title='Languages', + ) + subject: Optional[List[SubjectItem]] = Field( + None, + description='An array of objects that references to the subjects of the resource in ontology terms.', + title='Subject', + ) + keywords: Optional[List[Optional[str]]] = Field( + None, + description='An array of freely selectable keywords that help with searching and structuring.', + title='Keywords', + ) + publicationDate: Optional[date] = Field( + None, + description='A date of publication of the data or metadata. The date format is ISO 8601 (YYYY-MM-DD).', + examples=['2024-10-15'], + title='Publication Date', + ) + embargoPeriod: Optional[EmbargoPeriod] = Field( + None, + description='An object that describes the embargo period during which public access to the data is not allowed.', + title='Embargo Period', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/licenses.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/licenses.py new file mode 100644 index 0000000..8fcc1b7 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/licenses.py @@ -0,0 +1,47 @@ +# generated by datamodel-codegen: +# filename: licenses.json +# timestamp: 2025-01-27T15:25:21+00:00 + +from __future__ import annotations + +from typing import List, Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class License(BaseModel): + name: Optional[str] = Field( + None, description='The SPDX identifier.', example='ODbL-1.0', title='Name' + ) + title: Optional[str] = Field( + None, + description='The official (human readable) title of the license.', + example='Open Data Commons Open Database License 1.0', + title='Title', + ) + path: Optional[AnyUrl] = Field( + None, + description='A link or path to the license text.', + example='https://opendatacommons.org/licenses/odbl/1-0/index.html', + title='Path', + ) + instruction: Optional[str] = Field( + None, + description='A short description of rights and obligations. The use of tl;drLegal is recommended.', + example='You are free to share and change, but you must attribute, and share derivations under the same license. See https://tldrlegal.com/license/odc-open-database-license-(odbl) for further information.', + title='Instruction', + ) + attribution: Optional[str] = Field( + None, + description='A copyright holder of the data. Must be provided if attribution licenses are used.', + example='© Reiner Lemoine Institut', + title='Attribution', + ) + + +class Model(BaseModel): + licenses: Optional[List[License]] = Field( + None, + description='An array of objects of licenses under which the described data is provided.', + title='Licenses', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/linked_data.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/linked_data.py new file mode 100644 index 0000000..35bed76 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/linked_data.py @@ -0,0 +1,30 @@ +# generated by datamodel-codegen: +# filename: linked_data.json +# timestamp: 2025-01-27T15:28:04+00:00 + +from __future__ import annotations + +from typing import Optional + +from pydantic import BaseModel, Field + + +class Model(BaseModel): + field_id: Optional[str] = Field( + None, + alias='@id', + description='A Uniform Resource Identifier (URI) that links the resource via the OpenEnergyDatabus (DBpedia Databus).', + examples=[ + 'https://databus.openenergyplatform.org/oeplatform/supply/wri_global_power_plant_database/2022-11-07' + ], + title='@Id', + ) + field_context: Optional[str] = Field( + None, + alias='@context', + description='Explanation of metadata keys in ontology terms.', + examples=[ + 'https://raw.githubusercontent.com/OpenEnergyPlatform/oemetadata/production/metadata/latest/context.json' + ], + title='@context', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/meta.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/meta.py new file mode 100644 index 0000000..f155f9b --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/meta.py @@ -0,0 +1,50 @@ +# generated by datamodel-codegen: +# filename: meta.json +# timestamp: 2025-01-27T15:28:23+00:00 + +from __future__ import annotations + +from typing import Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class MetadataLicense(BaseModel): + name: Optional[str] = Field( + None, + description='The SPDX identifier.', + examples=['CC0-1.0'], + title='License Name', + ) + title: Optional[str] = Field( + None, + description='The official (human readable) title of the license.', + examples=['Creative Commons Zero v1.0 Universal'], + title='License Title', + ) + path: Optional[AnyUrl] = Field( + None, + description='A link or path to the license text.', + examples=['https://creativecommons.org/publicdomain/zero/1.0'], + title='License Path', + ) + + +class MetaMetadata(BaseModel): + metadataVersion: Optional[str] = Field( + None, + description='Type and version number of the metadata.', + examples=['OEMetadata-2.0.1'], + title='Metadata Version', + ) + metadataLicense: Optional[MetadataLicense] = Field( + None, description='The license of the OEMetadata. ', title='Metadata License' + ) + + +class Model(BaseModel): + metaMetadata: Optional[MetaMetadata] = Field( + None, + description='An object that describes the metadata themselves, their format, version and license.', + title='Meta Metadata', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/provenance.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/provenance.py new file mode 100644 index 0000000..a714d30 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/provenance.py @@ -0,0 +1,62 @@ +# generated by datamodel-codegen: +# filename: provenance.json +# timestamp: 2025-01-27T15:28:56+00:00 + +from __future__ import annotations + +from datetime import date +from typing import List, Optional + +from pydantic import BaseModel, Field + + +class Contributor(BaseModel): + title: Optional[str] = Field( + None, + description='A full name of the contributor.', + examples=['Ludwig Hülk'], + title='Contributor Title', + ) + path: Optional[str] = Field( + None, + description='A qualified link or path pointing to a relevant location online for the contributor. This can be the GitHub page or ORCID.', + examples=['https://github.com/Ludee'], + title='Path', + ) + organization: Optional[str] = Field( + None, + description='A string describing the organization this contributor is affiliated to. This can be relevant for the copyright.', + examples=['Reiner Lemoine Institut'], + title='Organization', + ) + roles: Optional[List[Optional[str]]] = Field( + None, + description='An array describing the roles of the contributor.', + title='Roles', + ) + date: Optional[date] = Field( + None, + description='The date of the final contribution. Date Format is ISO 8601.', + examples=['2024-10-21'], + title='Date', + ) + object: Optional[str] = Field( + None, + description='The object of the contribution. Which part of the package was supplied or changed.', + examples=['data and metadata'], + title='Object', + ) + comment: Optional[str] = Field( + None, + description='A free-text commentary on what has been done.', + examples=['Add metadata example.'], + title='Comment', + ) + + +class Model(BaseModel): + contributors: Optional[List[Contributor]] = Field( + None, + description='An array of objects of contributors and contributions to the data or metadata.', + title='Contributors', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/review.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/review.py new file mode 100644 index 0000000..634588d --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/review.py @@ -0,0 +1,32 @@ +# generated by datamodel-codegen: +# filename: review.json +# timestamp: 2025-01-27T15:29:23+00:00 + +from __future__ import annotations + +from typing import Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class Review(BaseModel): + path: Optional[AnyUrl] = Field( + None, + description='A link or path to the documented open peer review.', + examples=['https://www.example.com'], + title='Path', + ) + badge: Optional[str] = Field( + None, + description='A badge of either Iron, Bronze, Silver, Gold or Platinum is used to label the quality of the metadata.', + examples=['Platinum'], + title='Badge', + ) + + +class Model(BaseModel): + review: Optional[Review] = Field( + None, + description='The metadata on the OEP can go through an open peer review process. See the Academy course [Open Peer Review](https://openenergyplatform.github.io/academy/courses/09_peer_review/) for further information.', + title='Review', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/sources.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/sources.py new file mode 100644 index 0000000..0a8e9f4 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/sources.py @@ -0,0 +1,93 @@ +# generated by datamodel-codegen: +# filename: sources.json +# timestamp: 2025-01-27T15:30:05+00:00 + +from __future__ import annotations + +from typing import List, Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class SourceLicense(BaseModel): + name: Optional[str] = Field( + None, description='The SPDX identifier.', examples=['ODbL-1.0'], title='Name' + ) + title: Optional[str] = Field( + None, + description='The official (human readable) title of the license.', + examples=['Open Data Commons Open Database License 1.0'], + title='Title', + ) + path: Optional[AnyUrl] = Field( + None, + description='A link or path to the license text.', + examples=['https://opendatacommons.org/licenses/odbl/1-0/index.html'], + title='License Identifier', + ) + instruction: Optional[str] = Field( + None, + description='A short description of rights and obligations. The use of tl;drLegal is recommended.', + examples=[ + 'You are free to share and change, but you must attribute, and share derivations under the same license. See https://tldrlegal.com/license/odc-open-database-license-odbl for further information.' + ], + title='Instruction', + ) + attribution: Optional[str] = Field( + None, + description='A copyright owner of the source. Must be provided if attribution licenses are used.', + examples=['© Intergovernmental Panel on Climate Change 2023'], + title='Attribution', + ) + copyrightStatement: Optional[str] = Field( + None, + description='A link or path that proves that the source or data has the appropriate license. This can be a page number or website imprint.', + examples=['https://www.ipcc.ch/copyright/'], + title='Copyright Statement', + ) + + +class Source(BaseModel): + title: Optional[str] = Field( + None, + description='A human readable title of the source, a document title or organisation name.', + examples=[ + 'IPCC Sixth Assessment Report (AR6) - Climate Change 2023 - Synthesis Report' + ], + title='Source Title', + ) + authors: Optional[List[Optional[str]]] = Field( + None, + description='An array of the full names of the authors of the source material.', + title='Keywords', + ) + description: Optional[str] = Field( + None, + description='A free text description of the source.', + examples=['A Report of the Intergovernmental Panel on Climate Change.'], + title='Source Description', + ) + publicationYear: Optional[str] = Field( + None, + description='Indicates the year when the work was published.', + examples=['2023'], + title='Publication Year', + ) + field_id: Optional[AnyUrl] = Field( + None, + alias='@id', + description='A URL to the original source.', + examples=[ + 'https://www.ipcc.ch/report/ar6/syr/downloads/report/IPCC_AR6_SYR_FullVolume.pdf' + ], + title='Source Identifier', + ) + sourceLicenses: Optional[List[SourceLicense]] = Field(None, title='Licenses') + + +class Model(BaseModel): + sources: Optional[List[Source]] = Field( + None, + description='An array of objects with the used and underlying sources of the data and metadata.', + title='Sources', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/spatial.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/spatial.py new file mode 100644 index 0000000..38d2152 --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/spatial.py @@ -0,0 +1,100 @@ +# generated by datamodel-codegen: +# filename: spatial.json +# timestamp: 2025-01-27T15:27:16+00:00 + +from __future__ import annotations + +from typing import List, Optional + +from pydantic import AnyUrl, BaseModel, Field + + +class Location(BaseModel): + address: Optional[str] = Field( + None, + description='An address of the location of the data. May be specified with street name, house number, zip code, and city name.', + examples=['Rudower Chaussee 12, 12489 Berlin'], + title='Address', + ) + field_id: Optional[str] = Field( + None, + alias='@id', + description='A path or URI to a specific location. It can use Wikidata or OpenStreetMap.', + examples=['https://www.wikidata.org/wiki/Q77077223'], + title='Address Identifier', + ) + latitude: Optional[str] = Field( + None, + description='The latitude (lat) information of the location. Specifies the north / south position of the geometry.', + examples=['52.432822'], + title='Latitude', + ) + longitude: Optional[str] = Field( + None, + description='The longitude (lon) information of the location. Specifies the east / west position of the geometry.', + examples=['13.5351004'], + title='Longitude', + ) + + +class Extent(BaseModel): + name: Optional[str] = Field( + None, + description='The name of the region.', + examples=['Berlin'], + title='Extent Name', + ) + field_id: Optional[AnyUrl] = Field( + None, + alias='@id', + description='A URI reference for the region.', + examples=['https://www.wikidata.org/wiki/Q64'], + title='Extent Identifier', + ) + resolutionValue: Optional[str] = Field( + None, + description='The value of the resolution.', + examples=['100'], + title='Resolution Value', + ) + resolutionUnit: Optional[str] = Field( + None, + description='The unit of the resolution.', + examples=['m'], + title='Resolution Unit', + ) + boundingBox: Optional[List[float]] = Field( + None, + description='The covered area specified by the coordinates of a bounding box. The format is [minLon, minLat, maxLon, maxLat] or [W,S,E,N].', + examples=[13.08825, 52.33859, 13.76104, 52.6754], + max_items=4, + min_items=4, + title='Bounding Box', + ) + crs: Optional[str] = Field( + None, + description='The Coordinate Reference System, specified as an EPSG code.', + examples=['EPSG:4326'], + title=' Coordinate Reference System (CRS)', + ) + + +class Spatial(BaseModel): + location: Optional[Location] = Field( + None, + description='An object that describes a covered area or region.', + title='Extent', + ) + extent: Optional[Extent] = Field( + None, + description='An object that describes a covered area or region.', + title='Extent', + ) + + +class Model(BaseModel): + spatial: Optional[Spatial] = Field( + None, + description='An object that describes the spatial context of the data.', + title='Spatial', + ) diff --git a/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/temporal.py b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/temporal.py new file mode 100644 index 0000000..451880c --- /dev/null +++ b/services/backend_regimo/components/oep_access/oemeta/latest/build_source/schemas/temporal.py @@ -0,0 +1,63 @@ +# generated by datamodel-codegen: +# filename: temporal.json +# timestamp: 2025-01-27T15:30:28+00:00 + +from __future__ import annotations + +from datetime import date, datetime +from typing import List, Optional + +from pydantic import BaseModel, Field + + +class Timesery(BaseModel): + start: Optional[datetime] = Field( + None, + description='The start time of a time series.', + examples=['2020-01-01T00:00:00+00:00'], + title='Timeseries Start', + ) + end: Optional[datetime] = Field( + None, + description='The temporal end point of a time series.', + examples=['2020-01-01T23:59:30+00:00'], + title='Timeseries End', + ) + resolution: Optional[str] = Field( + None, + description='The time span between individual information points in a time series.', + examples=['30 s'], + title='Timeseries Resolution', + ) + alignment: Optional[str] = Field( + None, + description='An indicator of whether timestamps in a time series are to the left, right or in the centre.', + examples=['left'], + title='Timeseries Alignment', + ) + aggregationType: Optional[str] = Field( + None, + description='An indicator of whether the values are a sum, an average or a current value.', + examples=['current'], + title='Timeseries Aggregation Type', + ) + + +class Temporal(BaseModel): + referenceDate: Optional[date] = Field( + None, + description='A base year, month or day. The time for which the data is should be accurate. Date Format is ISO 8601.', + examples=['2020-01-01'], + title='Reference Date', + ) + timeseries: Optional[List[Timesery]] = Field( + None, description='An array that describe the timeseries.', title='Timeseries' + ) + + +class Model(BaseModel): + temporal: Optional[Temporal] = Field( + None, + description='An object with the time period covered in the data. Temporal information should contain either a "referenceDate" or the keys that describe a time series, in rare cases both.', + title='Temporal', + ) -- GitLab