esgvoc 2.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esgvoc/__init__.py +3 -0
- esgvoc/api/__init__.py +91 -0
- esgvoc/api/data_descriptors/EMD_models/__init__.py +66 -0
- esgvoc/api/data_descriptors/EMD_models/arrangement.py +21 -0
- esgvoc/api/data_descriptors/EMD_models/calendar.py +5 -0
- esgvoc/api/data_descriptors/EMD_models/cell_variable_type.py +20 -0
- esgvoc/api/data_descriptors/EMD_models/component_type.py +5 -0
- esgvoc/api/data_descriptors/EMD_models/coordinate.py +52 -0
- esgvoc/api/data_descriptors/EMD_models/grid_mapping.py +19 -0
- esgvoc/api/data_descriptors/EMD_models/grid_region.py +19 -0
- esgvoc/api/data_descriptors/EMD_models/grid_type.py +19 -0
- esgvoc/api/data_descriptors/EMD_models/horizontal_computational_grid.py +56 -0
- esgvoc/api/data_descriptors/EMD_models/horizontal_grid_cells.py +230 -0
- esgvoc/api/data_descriptors/EMD_models/horizontal_subgrid.py +41 -0
- esgvoc/api/data_descriptors/EMD_models/horizontal_units.py +5 -0
- esgvoc/api/data_descriptors/EMD_models/model.py +139 -0
- esgvoc/api/data_descriptors/EMD_models/model_component.py +115 -0
- esgvoc/api/data_descriptors/EMD_models/reference.py +61 -0
- esgvoc/api/data_descriptors/EMD_models/resolution.py +48 -0
- esgvoc/api/data_descriptors/EMD_models/temporal_refinement.py +19 -0
- esgvoc/api/data_descriptors/EMD_models/truncation_method.py +17 -0
- esgvoc/api/data_descriptors/EMD_models/vertical_computational_grid.py +91 -0
- esgvoc/api/data_descriptors/EMD_models/vertical_coordinate.py +5 -0
- esgvoc/api/data_descriptors/EMD_models/vertical_units.py +19 -0
- esgvoc/api/data_descriptors/__init__.py +159 -0
- esgvoc/api/data_descriptors/activity.py +72 -0
- esgvoc/api/data_descriptors/archive.py +5 -0
- esgvoc/api/data_descriptors/area_label.py +30 -0
- esgvoc/api/data_descriptors/branded_suffix.py +30 -0
- esgvoc/api/data_descriptors/branded_variable.py +21 -0
- esgvoc/api/data_descriptors/citation_url.py +5 -0
- esgvoc/api/data_descriptors/contact.py +5 -0
- esgvoc/api/data_descriptors/conventions.py +28 -0
- esgvoc/api/data_descriptors/creation_date.py +18 -0
- esgvoc/api/data_descriptors/data_descriptor.py +127 -0
- esgvoc/api/data_descriptors/data_specs_version.py +25 -0
- esgvoc/api/data_descriptors/date.py +5 -0
- esgvoc/api/data_descriptors/directory_date.py +22 -0
- esgvoc/api/data_descriptors/drs_specs.py +38 -0
- esgvoc/api/data_descriptors/experiment.py +215 -0
- esgvoc/api/data_descriptors/forcing_index.py +21 -0
- esgvoc/api/data_descriptors/frequency.py +48 -0
- esgvoc/api/data_descriptors/further_info_url.py +5 -0
- esgvoc/api/data_descriptors/grid.py +43 -0
- esgvoc/api/data_descriptors/horizontal_label.py +20 -0
- esgvoc/api/data_descriptors/initialization_index.py +27 -0
- esgvoc/api/data_descriptors/institution.py +80 -0
- esgvoc/api/data_descriptors/known_branded_variable.py +75 -0
- esgvoc/api/data_descriptors/license.py +31 -0
- esgvoc/api/data_descriptors/member_id.py +9 -0
- esgvoc/api/data_descriptors/mip_era.py +26 -0
- esgvoc/api/data_descriptors/model_component.py +32 -0
- esgvoc/api/data_descriptors/models_test/models.py +17 -0
- esgvoc/api/data_descriptors/nominal_resolution.py +50 -0
- esgvoc/api/data_descriptors/obs_type.py +5 -0
- esgvoc/api/data_descriptors/organisation.py +22 -0
- esgvoc/api/data_descriptors/physics_index.py +21 -0
- esgvoc/api/data_descriptors/product.py +16 -0
- esgvoc/api/data_descriptors/publication_status.py +5 -0
- esgvoc/api/data_descriptors/realization_index.py +24 -0
- esgvoc/api/data_descriptors/realm.py +16 -0
- esgvoc/api/data_descriptors/regex.py +5 -0
- esgvoc/api/data_descriptors/region.py +35 -0
- esgvoc/api/data_descriptors/resolution.py +7 -0
- esgvoc/api/data_descriptors/source.py +120 -0
- esgvoc/api/data_descriptors/source_type.py +5 -0
- esgvoc/api/data_descriptors/sub_experiment.py +5 -0
- esgvoc/api/data_descriptors/table.py +28 -0
- esgvoc/api/data_descriptors/temporal_label.py +20 -0
- esgvoc/api/data_descriptors/time_range.py +17 -0
- esgvoc/api/data_descriptors/title.py +5 -0
- esgvoc/api/data_descriptors/tracking_id.py +67 -0
- esgvoc/api/data_descriptors/variable.py +56 -0
- esgvoc/api/data_descriptors/variant_label.py +25 -0
- esgvoc/api/data_descriptors/vertical_label.py +20 -0
- esgvoc/api/project_specs.py +143 -0
- esgvoc/api/projects.py +1253 -0
- esgvoc/api/py.typed +0 -0
- esgvoc/api/pydantic_handler.py +146 -0
- esgvoc/api/report.py +127 -0
- esgvoc/api/search.py +171 -0
- esgvoc/api/universe.py +434 -0
- esgvoc/apps/__init__.py +6 -0
- esgvoc/apps/cmor_tables/__init__.py +7 -0
- esgvoc/apps/cmor_tables/cvs_table.py +948 -0
- esgvoc/apps/drs/__init__.py +0 -0
- esgvoc/apps/drs/constants.py +2 -0
- esgvoc/apps/drs/generator.py +429 -0
- esgvoc/apps/drs/report.py +540 -0
- esgvoc/apps/drs/validator.py +312 -0
- esgvoc/apps/ga/__init__.py +104 -0
- esgvoc/apps/ga/example_usage.py +315 -0
- esgvoc/apps/ga/models/__init__.py +47 -0
- esgvoc/apps/ga/models/netcdf_header.py +306 -0
- esgvoc/apps/ga/models/validator.py +491 -0
- esgvoc/apps/ga/test_ga.py +161 -0
- esgvoc/apps/ga/validator.py +277 -0
- esgvoc/apps/jsg/json_schema_generator.py +341 -0
- esgvoc/apps/jsg/templates/template.jinja +241 -0
- esgvoc/apps/test_cv/README.md +214 -0
- esgvoc/apps/test_cv/__init__.py +0 -0
- esgvoc/apps/test_cv/cv_tester.py +1611 -0
- esgvoc/apps/test_cv/example_usage.py +216 -0
- esgvoc/apps/vr/__init__.py +12 -0
- esgvoc/apps/vr/build_variable_registry.py +71 -0
- esgvoc/apps/vr/example_usage.py +60 -0
- esgvoc/apps/vr/vr_app.py +333 -0
- esgvoc/cli/clean.py +304 -0
- esgvoc/cli/cmor.py +46 -0
- esgvoc/cli/config.py +1300 -0
- esgvoc/cli/drs.py +267 -0
- esgvoc/cli/find.py +138 -0
- esgvoc/cli/get.py +155 -0
- esgvoc/cli/install.py +41 -0
- esgvoc/cli/main.py +60 -0
- esgvoc/cli/offline.py +269 -0
- esgvoc/cli/status.py +79 -0
- esgvoc/cli/test_cv.py +258 -0
- esgvoc/cli/valid.py +147 -0
- esgvoc/core/constants.py +17 -0
- esgvoc/core/convert.py +0 -0
- esgvoc/core/data_handler.py +206 -0
- esgvoc/core/db/__init__.py +3 -0
- esgvoc/core/db/connection.py +40 -0
- esgvoc/core/db/models/mixins.py +25 -0
- esgvoc/core/db/models/project.py +102 -0
- esgvoc/core/db/models/universe.py +98 -0
- esgvoc/core/db/project_ingestion.py +231 -0
- esgvoc/core/db/universe_ingestion.py +172 -0
- esgvoc/core/exceptions.py +33 -0
- esgvoc/core/logging_handler.py +26 -0
- esgvoc/core/repo_fetcher.py +345 -0
- esgvoc/core/service/__init__.py +41 -0
- esgvoc/core/service/configuration/config_manager.py +196 -0
- esgvoc/core/service/configuration/setting.py +363 -0
- esgvoc/core/service/data_merger.py +634 -0
- esgvoc/core/service/esg_voc.py +77 -0
- esgvoc/core/service/resolver_config.py +56 -0
- esgvoc/core/service/state.py +324 -0
- esgvoc/core/service/string_heuristics.py +98 -0
- esgvoc/core/service/term_cache.py +108 -0
- esgvoc/core/service/uri_resolver.py +133 -0
- esgvoc-2.0.2.dist-info/METADATA +82 -0
- esgvoc-2.0.2.dist-info/RECORD +147 -0
- esgvoc-2.0.2.dist-info/WHEEL +4 -0
- esgvoc-2.0.2.dist-info/entry_points.txt +2 -0
- esgvoc-2.0.2.dist-info/licenses/LICENSE.txt +519 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"""URI resolution and path normalization for JSON-LD references."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
from typing import Dict
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class URIResolver:
|
|
9
|
+
"""
|
|
10
|
+
Handles URI normalization and conversion between remote URLs and local paths.
|
|
11
|
+
|
|
12
|
+
This class centralizes all URI-related operations, making it easy to:
|
|
13
|
+
- Convert remote URIs to local file paths
|
|
14
|
+
- Normalize URIs (e.g., ensure .json extension)
|
|
15
|
+
- Check if resolved paths exist
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, locally_available: Dict[str, str]):
|
|
19
|
+
"""
|
|
20
|
+
Initialize the URI resolver.
|
|
21
|
+
|
|
22
|
+
Args:
|
|
23
|
+
locally_available: Mapping from remote base URIs to local directory paths.
|
|
24
|
+
Example: {"https://example.com/data": "/local/cache/data"}
|
|
25
|
+
"""
|
|
26
|
+
self.locally_available = locally_available
|
|
27
|
+
|
|
28
|
+
def to_local_path(self, uri: str) -> str:
|
|
29
|
+
"""
|
|
30
|
+
Convert a remote URI to a local file path if a mapping exists.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
uri: The URI to resolve (remote or already local)
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Local file path if a mapping exists, otherwise the original URI
|
|
37
|
+
|
|
38
|
+
Example:
|
|
39
|
+
>>> resolver = URIResolver({"https://example.com": "/local/cache"})
|
|
40
|
+
>>> resolver.to_local_path("https://example.com/data/term.json")
|
|
41
|
+
'/local/cache/data/term.json'
|
|
42
|
+
"""
|
|
43
|
+
for remote_base, local_base in self.locally_available.items():
|
|
44
|
+
if uri.startswith(remote_base):
|
|
45
|
+
return uri.replace(remote_base, local_base)
|
|
46
|
+
return uri
|
|
47
|
+
|
|
48
|
+
def ensure_json_extension(self, uri: str) -> str:
|
|
49
|
+
"""
|
|
50
|
+
Ensure the URI ends with .json extension.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
uri: The URI to normalize
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
URI with .json extension
|
|
57
|
+
|
|
58
|
+
Example:
|
|
59
|
+
>>> resolver = URIResolver({})
|
|
60
|
+
>>> resolver.ensure_json_extension("https://example.com/term")
|
|
61
|
+
'https://example.com/term.json'
|
|
62
|
+
"""
|
|
63
|
+
return uri if uri.endswith(".json") else f"{uri}.json"
|
|
64
|
+
|
|
65
|
+
def normalize(self, uri: str) -> str:
|
|
66
|
+
"""
|
|
67
|
+
Fully normalize a URI: convert to local path and ensure .json extension.
|
|
68
|
+
|
|
69
|
+
Args:
|
|
70
|
+
uri: The URI to normalize
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
Normalized local path with .json extension
|
|
74
|
+
|
|
75
|
+
Example:
|
|
76
|
+
>>> resolver = URIResolver({"https://example.com": "/local"})
|
|
77
|
+
>>> resolver.normalize("https://example.com/term")
|
|
78
|
+
'/local/term.json'
|
|
79
|
+
"""
|
|
80
|
+
uri = self.ensure_json_extension(uri)
|
|
81
|
+
return self.to_local_path(uri)
|
|
82
|
+
|
|
83
|
+
def exists(self, uri: str) -> bool:
|
|
84
|
+
"""
|
|
85
|
+
Check if a URI resolves to an existing local file.
|
|
86
|
+
|
|
87
|
+
Args:
|
|
88
|
+
uri: The URI to check
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
True if the resolved path exists as a file
|
|
92
|
+
|
|
93
|
+
Example:
|
|
94
|
+
>>> resolver = URIResolver({"https://example.com": "/tmp"})
|
|
95
|
+
>>> resolver.exists("https://example.com/nonexistent")
|
|
96
|
+
False
|
|
97
|
+
"""
|
|
98
|
+
local_path = self.normalize(uri)
|
|
99
|
+
return os.path.isfile(local_path)
|
|
100
|
+
|
|
101
|
+
def get_filename(self, uri: str) -> str:
|
|
102
|
+
"""
|
|
103
|
+
Extract the filename from a URI.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
uri: The URI to extract from
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
The filename component
|
|
110
|
+
|
|
111
|
+
Example:
|
|
112
|
+
>>> resolver = URIResolver({})
|
|
113
|
+
>>> resolver.get_filename("https://example.com/data/term.json")
|
|
114
|
+
'term.json'
|
|
115
|
+
"""
|
|
116
|
+
return Path(uri).name
|
|
117
|
+
|
|
118
|
+
def get_parent_dir(self, uri: str) -> Path:
|
|
119
|
+
"""
|
|
120
|
+
Get the parent directory of a URI's resolved path.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
uri: The URI to extract from
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
Path object representing the parent directory
|
|
127
|
+
|
|
128
|
+
Example:
|
|
129
|
+
>>> resolver = URIResolver({})
|
|
130
|
+
>>> resolver.get_parent_dir("/local/data/term.json")
|
|
131
|
+
PosixPath('/local/data')
|
|
132
|
+
"""
|
|
133
|
+
return Path(self.to_local_path(uri)).parent
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: esgvoc
|
|
3
|
+
Version: 2.0.2
|
|
4
|
+
Summary: python library and CLI to interact with WCRP CVs
|
|
5
|
+
Project-URL: Repository, https://github.com/ESGF/esgf-vocab
|
|
6
|
+
Author-email: Sébastien Gardoll <sebastien@gardoll.fr>, Guillaume Levavasseur <guillaume.levavasseur@ipsl.fr>, Laurent Troussellier <laurent.troussellier@ipsl.fr>
|
|
7
|
+
License: CECILL-2.1
|
|
8
|
+
Requires-Python: <3.14,>=3.12
|
|
9
|
+
Requires-Dist: idna>=3.10
|
|
10
|
+
Requires-Dist: jinja2>=3.1.6
|
|
11
|
+
Requires-Dist: platformdirs>=4.3.6
|
|
12
|
+
Requires-Dist: pydantic>=2.9.2
|
|
13
|
+
Requires-Dist: pyld>=2.0.4
|
|
14
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
15
|
+
Requires-Dist: requests>=2.32.3
|
|
16
|
+
Requires-Dist: sqlalchemy>=2.0.36
|
|
17
|
+
Requires-Dist: sqlmodel>=0.0.22
|
|
18
|
+
Requires-Dist: toml>=0.10.2
|
|
19
|
+
Requires-Dist: typer>=0.15.0
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# ESGVOC Library
|
|
23
|
+
|
|
24
|
+
ESGVOC is a Python library designed to simplify interaction with controlled vocabularies (CVs) used in WCRP climate data projects. It supports querying, caching, and validating terms across various CV repositories like the [universe](https://github.com/WCRP-CMIP/WCRP-universe/tree/esgvoc) and project-specific repositories (e.g., [CMIP6Plus](https://github.com/WCRP-CMIP/CMIP6Plus_CVs/tree/esgvoc), [CMIP6](https://github.com/WCRP-CMIP/CMIP6_CVs/tree/esgvoc), etc.).
|
|
25
|
+
|
|
26
|
+
Full documentation is available at [https://esgf.github.io/esgf-vocab/](https://esgf.github.io/esgf-vocab/).
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- **Query controlled vocabularies**:
|
|
33
|
+
- Retrieve terms, collections, or descriptors.
|
|
34
|
+
- Perform cross-validation and search operations.
|
|
35
|
+
- Supports case-sensitive, wildcard, and approximate matching.
|
|
36
|
+
|
|
37
|
+
- **Caching**:
|
|
38
|
+
- Download CVs to a local database for offline use.
|
|
39
|
+
- Keep the local cache up-to-date.
|
|
40
|
+
- Note: at present, this is a design choice.
|
|
41
|
+
You can't use esgvoc without this cache,
|
|
42
|
+
it always downloads the CVs to a local database first
|
|
43
|
+
|
|
44
|
+
- **Validation**:
|
|
45
|
+
- Validate strings against CV terms and templates.
|
|
46
|
+
|
|
47
|
+
- **Apps**:
|
|
48
|
+
- Ease some treatment using the CV.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## Installation
|
|
52
|
+
|
|
53
|
+
ESGVOC is available on PyPI. Install it with pip:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pip install esgvoc
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
After installing ESGVOC,
|
|
60
|
+
use this command to install the latest CVs
|
|
61
|
+
(or update them if you have already installed ESGVOC).
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
esgvoc install
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### For developers
|
|
68
|
+
|
|
69
|
+
* with pip
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pip install -e .
|
|
73
|
+
pip install pre-commit
|
|
74
|
+
pre-commit install
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
* with uv
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
uv sync
|
|
81
|
+
uv run pre-commit install
|
|
82
|
+
```
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
esgvoc/__init__.py,sha256=7eC8qPIlBApL95flwVy-OGVzl6hUFFu0pPPTPUtd7k0,66
|
|
2
|
+
esgvoc/api/__init__.py,sha256=5MK2lhD2L8DC_qlVjj5KNJNQ90UkX60eoPJOBuSG18A,3916
|
|
3
|
+
esgvoc/api/project_specs.py,sha256=-kjNx6EcFRKJrMU7yy_0YmMqTv4Crvh4e2fPI2wGrbI,4285
|
|
4
|
+
esgvoc/api/projects.py,sha256=dhvBhAAokptUvkA3B9tPfoQsD4F-jGCSA4t5tThXcgw,59018
|
|
5
|
+
esgvoc/api/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
esgvoc/api/pydantic_handler.py,sha256=vWNBlzkQu_fx1bbfmAcFZts9C36VfBd-9yge5q54TLQ,6058
|
|
7
|
+
esgvoc/api/report.py,sha256=OlK5ApnaikMKmC6FyJ1uTSBeTezZe85yTCJwsk14uZE,3526
|
|
8
|
+
esgvoc/api/search.py,sha256=W0RHTymqn67exjp0DJWNMC9mxX4EpMgLKEdMXsOYeLw,6665
|
|
9
|
+
esgvoc/api/universe.py,sha256=K0BbX8bCM2x0OY_-fkd0UCEj4_Vq4hRE7UVn43OvEKw,21257
|
|
10
|
+
esgvoc/api/data_descriptors/__init__.py,sha256=yqTDrr7VydWPUUkoZ3EC9c4xclHrKXKscSDB8cnELmM,8090
|
|
11
|
+
esgvoc/api/data_descriptors/activity.py,sha256=ZJ5_jHNaFcX78Hho_ve-G7YiArSm_-U7wVd0rtnKzoE,2179
|
|
12
|
+
esgvoc/api/data_descriptors/archive.py,sha256=5tmY5AsKAvyoU8839VdzLCbvP0pAhrCYP6EggZXFMTY,131
|
|
13
|
+
esgvoc/api/data_descriptors/area_label.py,sha256=9VGaNA6Ht-y5NVGXkbvhhyMinNhVRYaw6-G-NZpAMVk,976
|
|
14
|
+
esgvoc/api/data_descriptors/branded_suffix.py,sha256=a6xrpIk3qv-EarGQaoezpCAMrEsJqTup4SS7ZxwYAqg,1047
|
|
15
|
+
esgvoc/api/data_descriptors/branded_variable.py,sha256=3D9ELpQJ_znAeUA2HLPG7x6UBgJW4cuVYyhKrH8ej5w,829
|
|
16
|
+
esgvoc/api/data_descriptors/citation_url.py,sha256=R0bjM8MU6IdqvLzc4q0aeAbndmRodAcLu_YJVD-BhBA,139
|
|
17
|
+
esgvoc/api/data_descriptors/contact.py,sha256=q1tNm8VcG7xvv4ophVIuy58_2y-rSozs86c7_gMupdk,135
|
|
18
|
+
esgvoc/api/data_descriptors/conventions.py,sha256=U3qugWG1KRIqxQqvUTFFc5v9DtTdxNAIQxc_bZAA6ns,1072
|
|
19
|
+
esgvoc/api/data_descriptors/creation_date.py,sha256=QftPsJwoEmpitTs6xnWHVGZytppYymiouD33Vanp8gM,566
|
|
20
|
+
esgvoc/api/data_descriptors/data_descriptor.py,sha256=p-ACPn8gRfZ4N7TK2Vno95KHr-WOKjSNhX_oDdfi0g0,3281
|
|
21
|
+
esgvoc/api/data_descriptors/data_specs_version.py,sha256=Sy1JI2bZOP0RNylkGMfJveV-OhSQgyPYCwkhUuKDHyo,1003
|
|
22
|
+
esgvoc/api/data_descriptors/date.py,sha256=mkWivY0orl0wha38sMamrVbUbdZks-iUS_Wf6Gqz0-4,132
|
|
23
|
+
esgvoc/api/data_descriptors/directory_date.py,sha256=lq50IGnUrgWstPHjwW0w0_DMFDYDet19BesZWly9nQE,743
|
|
24
|
+
esgvoc/api/data_descriptors/drs_specs.py,sha256=jF8VIPmUJjhzqpuutaClmsh7GVahlqqFulrFgLerq10,1637
|
|
25
|
+
esgvoc/api/data_descriptors/experiment.py,sha256=7kbU8V2TfKFc8WApRoLwAzWbZj1fr4o71qs1T-_gzek,7402
|
|
26
|
+
esgvoc/api/data_descriptors/forcing_index.py,sha256=UQldrxm3hCHhSmP-DB22AYRgwwPVT3np4Q7_zi_opc0,808
|
|
27
|
+
esgvoc/api/data_descriptors/frequency.py,sha256=rXnTMgyuc5NRv_rNtV-x_8-Y7ibBno3TH_NqA0NzCu0,1816
|
|
28
|
+
esgvoc/api/data_descriptors/further_info_url.py,sha256=9z8_WNjcUm1XTEe7WpBUZmgoQ8EosjkVPw-AP_993cA,142
|
|
29
|
+
esgvoc/api/data_descriptors/grid.py,sha256=rdBTuAesqx9Dw370opSV0CE1R_3NBPnGNKImm1pzYHs,1642
|
|
30
|
+
esgvoc/api/data_descriptors/horizontal_label.py,sha256=OQ-p8FfNA70WTGoiKfcCwDfH0PqYP8vckHtrQn9PZUc,712
|
|
31
|
+
esgvoc/api/data_descriptors/initialization_index.py,sha256=tidOHV9Mnlw1vgn086d-Gy0uEZelsApIYWso0IvvDAk,1129
|
|
32
|
+
esgvoc/api/data_descriptors/institution.py,sha256=pJ-AfYO6r22gaR8Pejpt0XrLnFjvjjT3bmOuTmn_yBA,1873
|
|
33
|
+
esgvoc/api/data_descriptors/known_branded_variable.py,sha256=vCdhvRzweywrPjx9UcsdUq5ElDBb4AnwEta14f9h6rU,3457
|
|
34
|
+
esgvoc/api/data_descriptors/license.py,sha256=oeEZ-CDhhGfpLR2X0WZEBUxkO8V2sbMHe0V_5gqHh7E,755
|
|
35
|
+
esgvoc/api/data_descriptors/member_id.py,sha256=DJzVit-ZzX_yX2xWg6ef4TT_Xj4eBkG70hwJMU9CMIc,691
|
|
36
|
+
esgvoc/api/data_descriptors/mip_era.py,sha256=PNoOioTdFvuLsYH-MjZQuCfNwq_PlBUrwaK3e_A4pbs,793
|
|
37
|
+
esgvoc/api/data_descriptors/model_component.py,sha256=bbTJ7cha5Nkt3QjIPxonXlupygOBwWc_0rT4NGiU0dU,1229
|
|
38
|
+
esgvoc/api/data_descriptors/nominal_resolution.py,sha256=rF36zpsz011AU0y1pJqo4KK1oPLJkIiiQvGbCbehbnY,1449
|
|
39
|
+
esgvoc/api/data_descriptors/obs_type.py,sha256=sB5MVlK6s8HkJCLBSbRNtcmFvS65hJMu-qL-2N3Bkrc,131
|
|
40
|
+
esgvoc/api/data_descriptors/organisation.py,sha256=zXwuN4I_x-XxubNbdgxNh7-7ElEk0Hd4kKe0xTnquh0,612
|
|
41
|
+
esgvoc/api/data_descriptors/physics_index.py,sha256=smKZwisVLa72VZHfv8bHe6ve2ziu2r2INRub3nEwl-s,814
|
|
42
|
+
esgvoc/api/data_descriptors/product.py,sha256=W191mjXMUznnsyRw-SvHGuCgoAe7OKqiadbrfdKSdgQ,392
|
|
43
|
+
esgvoc/api/data_descriptors/publication_status.py,sha256=sLFJ_DR0E1SPmlYQGxSiYvoO_aCP9VoptYDLiZqtc3Y,141
|
|
44
|
+
esgvoc/api/data_descriptors/realization_index.py,sha256=p71eeQVtAT495M0KBzyuN3i6g4PWVg3fteiphFk186o,1005
|
|
45
|
+
esgvoc/api/data_descriptors/realm.py,sha256=hW79NKvrBc2Ym6lcUjbms_n60vJDOn4oMPqFjODbzu8,383
|
|
46
|
+
esgvoc/api/data_descriptors/regex.py,sha256=Tdb6JwpKF7sKwlJR5Vj5cKyUHjO2wvyyIX-QGdwaNyA,133
|
|
47
|
+
esgvoc/api/data_descriptors/region.py,sha256=0ENRNsBz4J5z9LuxCJOJDHCUT5fHxGbTT5FJwXn3u_g,876
|
|
48
|
+
esgvoc/api/data_descriptors/resolution.py,sha256=OP2J0zPuHot_YjgVbML9tOrWudTKuMTeexY6n_hbqKE,168
|
|
49
|
+
esgvoc/api/data_descriptors/source.py,sha256=sVZD0U5fZLeelj1GD8C1pioU0SHc8yaT2xqvuw3dRCg,4155
|
|
50
|
+
esgvoc/api/data_descriptors/source_type.py,sha256=S-jTiLOTBhGhe3F-I0hffPHFRmLCnXQFmwBqbSdbepA,134
|
|
51
|
+
esgvoc/api/data_descriptors/sub_experiment.py,sha256=mmzZr-ZqTW4YbZidKw4umYXI-DI4LVzwqT2E2Ax0F_Y,137
|
|
52
|
+
esgvoc/api/data_descriptors/table.py,sha256=3z2uuwb-MLht9Qt4z2Upm2bZGKKma5azlHYC1nXMjSw,885
|
|
53
|
+
esgvoc/api/data_descriptors/temporal_label.py,sha256=uUSdSmoPJ9f_Y0BworrtcxH9cE0Lzs04_x6hXmX3EI4,704
|
|
54
|
+
esgvoc/api/data_descriptors/time_range.py,sha256=jR25MuxIP3rq02BSm3ioPMDGJtLEYTWKcuW9YC4dXHo,556
|
|
55
|
+
esgvoc/api/data_descriptors/title.py,sha256=9lqRLAN3MTLYpdZ62MI3oXVFlWzD7rJEUFxe7AapYqM,133
|
|
56
|
+
esgvoc/api/data_descriptors/tracking_id.py,sha256=HrgRmiqDOleNMf-wYJp0zWEcyBd5_AYabWQw4S7pxzA,3324
|
|
57
|
+
esgvoc/api/data_descriptors/variable.py,sha256=BF899BkNM7iHL5x_ChjwiBimNEqnGLNv8ey2oBG_32A,1852
|
|
58
|
+
esgvoc/api/data_descriptors/variant_label.py,sha256=h7NPEOcCE_5_F7u3xgTdO_y6gyAOz_rUBtam8LWqU0Y,799
|
|
59
|
+
esgvoc/api/data_descriptors/vertical_label.py,sha256=sx8-aVDDSGMjFUcgn3BW9monhYVWdOLV_bunG1vMEmc,708
|
|
60
|
+
esgvoc/api/data_descriptors/EMD_models/__init__.py,sha256=EuFC6tzICa1UMmd55WceabL3YexQOG0GOVOwJU0e8hg,2074
|
|
61
|
+
esgvoc/api/data_descriptors/EMD_models/arrangement.py,sha256=W8PR1dJ4DJTKDIY2h-zXLELE8P3wV7wzV8R9a4lSUpY,590
|
|
62
|
+
esgvoc/api/data_descriptors/EMD_models/calendar.py,sha256=jBLtjK5aQBoPPnWzPse6ZDRhlcBAjvEAJitBvm1kmZU,132
|
|
63
|
+
esgvoc/api/data_descriptors/EMD_models/cell_variable_type.py,sha256=T12HPRU1l3HGoQEkfMLee7NQjwE_nOyBIU5mIk6hd1I,488
|
|
64
|
+
esgvoc/api/data_descriptors/EMD_models/component_type.py,sha256=3oMEtc9DMqHnN09zbRNKN6FEHub5i4O_Umw_5j0of6E,137
|
|
65
|
+
esgvoc/api/data_descriptors/EMD_models/coordinate.py,sha256=siYPtEeyBfrXnwIIyVKYYlhlFQQTjOu0yKMeHG11lgU,2795
|
|
66
|
+
esgvoc/api/data_descriptors/EMD_models/grid_mapping.py,sha256=dI0tH5Ag36af-39OYNuKKKoF52xyxRhtN8Xd3z3D6F4,436
|
|
67
|
+
esgvoc/api/data_descriptors/EMD_models/grid_region.py,sha256=GUaJwSidLHVCdKNJetPgAAoqyBqMfyRWx9495Y1-T7k,445
|
|
68
|
+
esgvoc/api/data_descriptors/EMD_models/grid_type.py,sha256=Z4MFHr8WWIVskv8w9JsjtFeaSaAyWYfjuNdCuxt52_Y,444
|
|
69
|
+
esgvoc/api/data_descriptors/EMD_models/horizontal_computational_grid.py,sha256=FJtvZuWNBalHvVkUlrf3OCYzzHIA2MjvUoxmbj6O_es,2287
|
|
70
|
+
esgvoc/api/data_descriptors/EMD_models/horizontal_grid_cells.py,sha256=0iFP2L7WNvC0SFcWDH9SCZE4fbxHSRtNkbHlpL2pj1U,9019
|
|
71
|
+
esgvoc/api/data_descriptors/EMD_models/horizontal_subgrid.py,sha256=vSUsrDhRX6VV1YkEnDcbPpBeI2TtzOjMJg83IKOtNuY,1595
|
|
72
|
+
esgvoc/api/data_descriptors/EMD_models/horizontal_units.py,sha256=npSeoQNf0-OqFCzhLGwZGXIjoTK2R7DE288o3-qPYLQ,139
|
|
73
|
+
esgvoc/api/data_descriptors/EMD_models/model.py,sha256=CGQ9iosUqHr0zboJnugEsPJxMBgWiOp7WX6dxE8dCfw,5031
|
|
74
|
+
esgvoc/api/data_descriptors/EMD_models/model_component.py,sha256=Cy3kF2HccH5VObes3AWcEdimOw5JSBMGhP3Yr8-Op4c,4629
|
|
75
|
+
esgvoc/api/data_descriptors/EMD_models/reference.py,sha256=ZjNsbXQkcAMFsLSPVbQG_5sq2ovBhKa-309yRLydkOY,2517
|
|
76
|
+
esgvoc/api/data_descriptors/EMD_models/resolution.py,sha256=CcBUAzeYSkvVjeCfhFSwTND6atldZQxS3rzNZqldmjI,1162
|
|
77
|
+
esgvoc/api/data_descriptors/EMD_models/temporal_refinement.py,sha256=7vSJb5kUkoH_0AWKOLO-MsuJ9JCYGsuE0ts4CbQm09A,421
|
|
78
|
+
esgvoc/api/data_descriptors/EMD_models/truncation_method.py,sha256=TBKVGeha7Tjg2xSrLVRzhCQdQc5Y14Vx-aoVjJRz1eQ,383
|
|
79
|
+
esgvoc/api/data_descriptors/EMD_models/vertical_computational_grid.py,sha256=3EQtYfLI8ncYkxrvnPgaoPvdNTqdzLNcjW8AkSjlG9U,4176
|
|
80
|
+
esgvoc/api/data_descriptors/EMD_models/vertical_coordinate.py,sha256=P5paTvumxVFqLYcHZl5m5qLI1qZI2eCTpG7rsy1fveA,142
|
|
81
|
+
esgvoc/api/data_descriptors/EMD_models/vertical_units.py,sha256=nrsca6EhdpU7D80CcDTNMQi7KsEIfVIN4HNFILxkdCs,443
|
|
82
|
+
esgvoc/api/data_descriptors/models_test/models.py,sha256=q6Dzw9X4ZdxKaJTuk417iFVjSuFWlPQXLCWYWtv3DqE,336
|
|
83
|
+
esgvoc/apps/__init__.py,sha256=Kyq36qRjvTWN7gu4_iFaLOjNUYvW0k1xp8bvkgJlQ5w,269
|
|
84
|
+
esgvoc/apps/cmor_tables/__init__.py,sha256=CuMogbcqRRPP2x9ah78zs95XMAOOr2hxfmrMl3RXpgc,143
|
|
85
|
+
esgvoc/apps/cmor_tables/cvs_table.py,sha256=-MmWzM3yvOC-Z8JuJ5m57vq8nhUb3Qt0XF1tcC3qKsk,28917
|
|
86
|
+
esgvoc/apps/drs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
87
|
+
esgvoc/apps/drs/constants.py,sha256=rVWq1QQwAFgISjvl3YzJDLLPNUPXHpqgv66spmjyPMQ,96
|
|
88
|
+
esgvoc/apps/drs/generator.py,sha256=BTXMO_MpeBnvIoMkBFbQaUAc1sCd9qiKR8tpzQ0ng3M,22255
|
|
89
|
+
esgvoc/apps/drs/report.py,sha256=JWdkw293av3cCpb3HxbnW0S_s84rP5IjegO21TLiHps,17458
|
|
90
|
+
esgvoc/apps/drs/validator.py,sha256=VZQRH9HlCzVNCexqr-8KpIySxDfKCrGoMLiSi7bc6M4,12930
|
|
91
|
+
esgvoc/apps/ga/__init__.py,sha256=KqARBuvJZhas46uxuMhhYCnnlgmXv-3Wu7dr0on8jYw,2616
|
|
92
|
+
esgvoc/apps/ga/example_usage.py,sha256=u94hod4RgPaizSKehK_W3MjmdzkxPfWKApkVms-LfIU,12483
|
|
93
|
+
esgvoc/apps/ga/test_ga.py,sha256=knfEba-Jy_23MKZ1aKCt5wqOaI8h2u6Apx4PYu52EvI,5496
|
|
94
|
+
esgvoc/apps/ga/validator.py,sha256=jzjj5GBum1cbGFGjjrs1Foq8PQBAdnb4FeNTEbxngkw,9496
|
|
95
|
+
esgvoc/apps/ga/models/__init__.py,sha256=QQ2y4Fi4NUk2hTb_xXetcE2pDI6Qq--YNRlM5CttnPM,1209
|
|
96
|
+
esgvoc/apps/ga/models/netcdf_header.py,sha256=dzERdqj-U6VcHBrxCrUTwGHZp76zyeqBxSIMWfHHPRk,11210
|
|
97
|
+
esgvoc/apps/ga/models/validator.py,sha256=l7BC1CT456g-Ru3rq3CmTs-tFZKrW337dlwV0bXWH_w,22143
|
|
98
|
+
esgvoc/apps/jsg/json_schema_generator.py,sha256=4CkgZo4-CTtL7gjunsakcZ7Gvcjlp1vhuhGc04f-les,16347
|
|
99
|
+
esgvoc/apps/jsg/templates/template.jinja,sha256=zjxbCpp-l0RRcn4k0y9zvGBKaKRobHZAGGR3pl9dyQo,6241
|
|
100
|
+
esgvoc/apps/test_cv/README.md,sha256=hS8CpTXAF7vqeuX2rBWsdjfFJhhM8oLX4Fw_KaX1MAo,6865
|
|
101
|
+
esgvoc/apps/test_cv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
102
|
+
esgvoc/apps/test_cv/cv_tester.py,sha256=OpprHx2FC2ppNZRVyU0Brgg2frCDoSKrB--PuE1v_N8,81871
|
|
103
|
+
esgvoc/apps/test_cv/example_usage.py,sha256=_ZAVqpqWNRqHaxOb-GBokzG4hfjgUA_3JlmFtsCefyg,7234
|
|
104
|
+
esgvoc/apps/vr/__init__.py,sha256=1qiZQV1KKI9DQRnmJpmExv9GxokuwP-VlakbUdxRdHY,537
|
|
105
|
+
esgvoc/apps/vr/build_variable_registry.py,sha256=lQRusU5BAIUr9C2B-ROweE5R3RtMSxd4kIentfWmCrA,2573
|
|
106
|
+
esgvoc/apps/vr/example_usage.py,sha256=I4rq5GJWb5MlUXerpJ23ekSp8L6uCyqBTw2zDXkYkLE,2362
|
|
107
|
+
esgvoc/apps/vr/vr_app.py,sha256=NVglaj2tdGOU7YB3nwx46I_VnD8kzWHhwKLoJZ2VXTo,12745
|
|
108
|
+
esgvoc/cli/clean.py,sha256=L4eD0Hc5IlET_wmm-JTd02_Rug4adIXkr4qgN7ZSTHg,10748
|
|
109
|
+
esgvoc/cli/cmor.py,sha256=Q1Q0AvP3Up8wAkylSGveBw1c_Mqo752wEE2NTUDqCYw,1098
|
|
110
|
+
esgvoc/cli/config.py,sha256=iPU6OKkHQEo2qXdzjl35C5-C_I8pu122E2H7xj0HpYs,52555
|
|
111
|
+
esgvoc/cli/drs.py,sha256=X89syVrxs82ZIc1YdWRPw_HmafOZH1u-wXRe6N-xBcM,9427
|
|
112
|
+
esgvoc/cli/find.py,sha256=DxpEvSbQIJ3-XL-pgH5RicBzS3asjG2Cn_fJhjXKSoU,4497
|
|
113
|
+
esgvoc/cli/get.py,sha256=Ucz0nE68wLB3K55aJfDnVNt8jCvPvBL4c1qmS_YHTh0,5451
|
|
114
|
+
esgvoc/cli/install.py,sha256=qTtWQp0SlpQ7uIJnUeFUfdU0RRb2s55QAv11TogfwGk,1381
|
|
115
|
+
esgvoc/cli/main.py,sha256=QzDhSXRnc1e3RlXD7KJBCwlnQV_DL-f9zaAlzlqoyx4,1866
|
|
116
|
+
esgvoc/cli/offline.py,sha256=I9gccId98FLXPQ9VOmmZQ9aU_zfZYtCGZyO7XabQnc8,9007
|
|
117
|
+
esgvoc/cli/status.py,sha256=fFwV3NQcbA2kiV8TynhCaGqJdyVja7mJCh_2XL-6pzI,2386
|
|
118
|
+
esgvoc/cli/test_cv.py,sha256=x9nOteH0pG-sFb8XrMIlDyR23hAFKjpmhSO1khEpANs,9741
|
|
119
|
+
esgvoc/cli/valid.py,sha256=4ccakK5_QM9PhaBsfGH9VsfglApxDaKBG8oucRYbKqg,6937
|
|
120
|
+
esgvoc/core/constants.py,sha256=h8rArTO4WRTu3uf1XtOOh-x0_jCTMKjo0jOEDvu3uGU,601
|
|
121
|
+
esgvoc/core/convert.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
|
+
esgvoc/core/data_handler.py,sha256=xZ2kLoY7FlaJeyKxrCfyFuIGPfidB9gd8SXvkhXrjG4,8174
|
|
123
|
+
esgvoc/core/exceptions.py,sha256=hs2D1lRWYhFuXDRbApKyJmEZMs8HxTPlSGkDSpkeQiA,538
|
|
124
|
+
esgvoc/core/logging_handler.py,sha256=kJn14stODJ3hIsCROY0XrHaYiSyy1qYwlcUopSi8pzE,599
|
|
125
|
+
esgvoc/core/repo_fetcher.py,sha256=P2RG-OX6d4kUYXmUMmAReLTebw2sw4aAL--dYbyuEGw,14173
|
|
126
|
+
esgvoc/core/db/__init__.py,sha256=fszGxJfRUa6uuuogrdh8_ExtdyMLZSaaVawpdgXzqKM,113
|
|
127
|
+
esgvoc/core/db/connection.py,sha256=bVX--zrUOfvOr-KGFjkiYbcFw2z_c-JkJyYT-3tueMA,1046
|
|
128
|
+
esgvoc/core/db/project_ingestion.py,sha256=FvNuex1M3-KpImrak9l5Qx3YNYUt2MCX-w_5usSHwYM,10658
|
|
129
|
+
esgvoc/core/db/universe_ingestion.py,sha256=PLD2B0XZhkC-N43DhAFAAAwQ80NzH-Gt8vBJDq8lxn4,7537
|
|
130
|
+
esgvoc/core/db/models/mixins.py,sha256=S4_6iuKf1kYLdUXAgqRKSTXs8H9I--43MKlEq4F-dm4,445
|
|
131
|
+
esgvoc/core/db/models/project.py,sha256=e3C_DPwwlrX-10BBHhodjRim4uX7yNU7rAMvUNAwBoQ,4384
|
|
132
|
+
esgvoc/core/db/models/universe.py,sha256=SI-lL-Yrl-t232m0mQJqCEHuuUhM8qNnUOXl3Q4-NSk,4205
|
|
133
|
+
esgvoc/core/service/__init__.py,sha256=MprKf36K7tfD_1qDmuhYlDyJms_bi4VsC6KYKe9pWmw,1584
|
|
134
|
+
esgvoc/core/service/data_merger.py,sha256=e0w7yzfbVxViAV-i4r5GFIMpaBeGaK2DFU1qXIiRKHE,28235
|
|
135
|
+
esgvoc/core/service/esg_voc.py,sha256=Wf9-NHpO4k9hbY7zStWpSsB3HhJNOY62lTSxE3y6Dd4,2406
|
|
136
|
+
esgvoc/core/service/resolver_config.py,sha256=pvO-GjR2AVAnYlGv7nZKTE3RO2Ez5wH43RVILtVpvJE,2029
|
|
137
|
+
esgvoc/core/service/state.py,sha256=gI_kqx3pOsaCdLxrHm9ztZpwSq_xlH7SBMv2LEm5ifE,13900
|
|
138
|
+
esgvoc/core/service/string_heuristics.py,sha256=OIMUDkEHJ5L9_oKFZXENzPep_uEyG7qTszoInN3xhVk,3453
|
|
139
|
+
esgvoc/core/service/term_cache.py,sha256=xH8No2w8KXDg7N3L9b4bv-dMGwqvlbko1bPxPMTsFUk,3092
|
|
140
|
+
esgvoc/core/service/uri_resolver.py,sha256=USDvnEkJwPJgdGduup_EQJODHZyAWj62MG8-AEaLMTo,3963
|
|
141
|
+
esgvoc/core/service/configuration/config_manager.py,sha256=adKeK8xDE72UIfYqQ4pc7pPxAmBuCsybyx7ZdchbL6U,8797
|
|
142
|
+
esgvoc/core/service/configuration/setting.py,sha256=aaBE6P8TttQr0kJjSRNH4Vaa_guWPFQGHdB24B1oYtU,13514
|
|
143
|
+
esgvoc-2.0.2.dist-info/METADATA,sha256=H-uYgjZG98AWezy4zTNgd-LULeUrJfnUU0waFg1N4jw,2368
|
|
144
|
+
esgvoc-2.0.2.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
145
|
+
esgvoc-2.0.2.dist-info/entry_points.txt,sha256=ZXufSC7Jlx1lb52U6Buv9IitJMcqAAXOerR2V9DaIto,48
|
|
146
|
+
esgvoc-2.0.2.dist-info/licenses/LICENSE.txt,sha256=rWJoZt3vach8ZNdLq-Ee5djzCMFnJ1gIfBeJU5RIop4,21782
|
|
147
|
+
esgvoc-2.0.2.dist-info/RECORD,,
|