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.
Files changed (147) hide show
  1. esgvoc/__init__.py +3 -0
  2. esgvoc/api/__init__.py +91 -0
  3. esgvoc/api/data_descriptors/EMD_models/__init__.py +66 -0
  4. esgvoc/api/data_descriptors/EMD_models/arrangement.py +21 -0
  5. esgvoc/api/data_descriptors/EMD_models/calendar.py +5 -0
  6. esgvoc/api/data_descriptors/EMD_models/cell_variable_type.py +20 -0
  7. esgvoc/api/data_descriptors/EMD_models/component_type.py +5 -0
  8. esgvoc/api/data_descriptors/EMD_models/coordinate.py +52 -0
  9. esgvoc/api/data_descriptors/EMD_models/grid_mapping.py +19 -0
  10. esgvoc/api/data_descriptors/EMD_models/grid_region.py +19 -0
  11. esgvoc/api/data_descriptors/EMD_models/grid_type.py +19 -0
  12. esgvoc/api/data_descriptors/EMD_models/horizontal_computational_grid.py +56 -0
  13. esgvoc/api/data_descriptors/EMD_models/horizontal_grid_cells.py +230 -0
  14. esgvoc/api/data_descriptors/EMD_models/horizontal_subgrid.py +41 -0
  15. esgvoc/api/data_descriptors/EMD_models/horizontal_units.py +5 -0
  16. esgvoc/api/data_descriptors/EMD_models/model.py +139 -0
  17. esgvoc/api/data_descriptors/EMD_models/model_component.py +115 -0
  18. esgvoc/api/data_descriptors/EMD_models/reference.py +61 -0
  19. esgvoc/api/data_descriptors/EMD_models/resolution.py +48 -0
  20. esgvoc/api/data_descriptors/EMD_models/temporal_refinement.py +19 -0
  21. esgvoc/api/data_descriptors/EMD_models/truncation_method.py +17 -0
  22. esgvoc/api/data_descriptors/EMD_models/vertical_computational_grid.py +91 -0
  23. esgvoc/api/data_descriptors/EMD_models/vertical_coordinate.py +5 -0
  24. esgvoc/api/data_descriptors/EMD_models/vertical_units.py +19 -0
  25. esgvoc/api/data_descriptors/__init__.py +159 -0
  26. esgvoc/api/data_descriptors/activity.py +72 -0
  27. esgvoc/api/data_descriptors/archive.py +5 -0
  28. esgvoc/api/data_descriptors/area_label.py +30 -0
  29. esgvoc/api/data_descriptors/branded_suffix.py +30 -0
  30. esgvoc/api/data_descriptors/branded_variable.py +21 -0
  31. esgvoc/api/data_descriptors/citation_url.py +5 -0
  32. esgvoc/api/data_descriptors/contact.py +5 -0
  33. esgvoc/api/data_descriptors/conventions.py +28 -0
  34. esgvoc/api/data_descriptors/creation_date.py +18 -0
  35. esgvoc/api/data_descriptors/data_descriptor.py +127 -0
  36. esgvoc/api/data_descriptors/data_specs_version.py +25 -0
  37. esgvoc/api/data_descriptors/date.py +5 -0
  38. esgvoc/api/data_descriptors/directory_date.py +22 -0
  39. esgvoc/api/data_descriptors/drs_specs.py +38 -0
  40. esgvoc/api/data_descriptors/experiment.py +215 -0
  41. esgvoc/api/data_descriptors/forcing_index.py +21 -0
  42. esgvoc/api/data_descriptors/frequency.py +48 -0
  43. esgvoc/api/data_descriptors/further_info_url.py +5 -0
  44. esgvoc/api/data_descriptors/grid.py +43 -0
  45. esgvoc/api/data_descriptors/horizontal_label.py +20 -0
  46. esgvoc/api/data_descriptors/initialization_index.py +27 -0
  47. esgvoc/api/data_descriptors/institution.py +80 -0
  48. esgvoc/api/data_descriptors/known_branded_variable.py +75 -0
  49. esgvoc/api/data_descriptors/license.py +31 -0
  50. esgvoc/api/data_descriptors/member_id.py +9 -0
  51. esgvoc/api/data_descriptors/mip_era.py +26 -0
  52. esgvoc/api/data_descriptors/model_component.py +32 -0
  53. esgvoc/api/data_descriptors/models_test/models.py +17 -0
  54. esgvoc/api/data_descriptors/nominal_resolution.py +50 -0
  55. esgvoc/api/data_descriptors/obs_type.py +5 -0
  56. esgvoc/api/data_descriptors/organisation.py +22 -0
  57. esgvoc/api/data_descriptors/physics_index.py +21 -0
  58. esgvoc/api/data_descriptors/product.py +16 -0
  59. esgvoc/api/data_descriptors/publication_status.py +5 -0
  60. esgvoc/api/data_descriptors/realization_index.py +24 -0
  61. esgvoc/api/data_descriptors/realm.py +16 -0
  62. esgvoc/api/data_descriptors/regex.py +5 -0
  63. esgvoc/api/data_descriptors/region.py +35 -0
  64. esgvoc/api/data_descriptors/resolution.py +7 -0
  65. esgvoc/api/data_descriptors/source.py +120 -0
  66. esgvoc/api/data_descriptors/source_type.py +5 -0
  67. esgvoc/api/data_descriptors/sub_experiment.py +5 -0
  68. esgvoc/api/data_descriptors/table.py +28 -0
  69. esgvoc/api/data_descriptors/temporal_label.py +20 -0
  70. esgvoc/api/data_descriptors/time_range.py +17 -0
  71. esgvoc/api/data_descriptors/title.py +5 -0
  72. esgvoc/api/data_descriptors/tracking_id.py +67 -0
  73. esgvoc/api/data_descriptors/variable.py +56 -0
  74. esgvoc/api/data_descriptors/variant_label.py +25 -0
  75. esgvoc/api/data_descriptors/vertical_label.py +20 -0
  76. esgvoc/api/project_specs.py +143 -0
  77. esgvoc/api/projects.py +1253 -0
  78. esgvoc/api/py.typed +0 -0
  79. esgvoc/api/pydantic_handler.py +146 -0
  80. esgvoc/api/report.py +127 -0
  81. esgvoc/api/search.py +171 -0
  82. esgvoc/api/universe.py +434 -0
  83. esgvoc/apps/__init__.py +6 -0
  84. esgvoc/apps/cmor_tables/__init__.py +7 -0
  85. esgvoc/apps/cmor_tables/cvs_table.py +948 -0
  86. esgvoc/apps/drs/__init__.py +0 -0
  87. esgvoc/apps/drs/constants.py +2 -0
  88. esgvoc/apps/drs/generator.py +429 -0
  89. esgvoc/apps/drs/report.py +540 -0
  90. esgvoc/apps/drs/validator.py +312 -0
  91. esgvoc/apps/ga/__init__.py +104 -0
  92. esgvoc/apps/ga/example_usage.py +315 -0
  93. esgvoc/apps/ga/models/__init__.py +47 -0
  94. esgvoc/apps/ga/models/netcdf_header.py +306 -0
  95. esgvoc/apps/ga/models/validator.py +491 -0
  96. esgvoc/apps/ga/test_ga.py +161 -0
  97. esgvoc/apps/ga/validator.py +277 -0
  98. esgvoc/apps/jsg/json_schema_generator.py +341 -0
  99. esgvoc/apps/jsg/templates/template.jinja +241 -0
  100. esgvoc/apps/test_cv/README.md +214 -0
  101. esgvoc/apps/test_cv/__init__.py +0 -0
  102. esgvoc/apps/test_cv/cv_tester.py +1611 -0
  103. esgvoc/apps/test_cv/example_usage.py +216 -0
  104. esgvoc/apps/vr/__init__.py +12 -0
  105. esgvoc/apps/vr/build_variable_registry.py +71 -0
  106. esgvoc/apps/vr/example_usage.py +60 -0
  107. esgvoc/apps/vr/vr_app.py +333 -0
  108. esgvoc/cli/clean.py +304 -0
  109. esgvoc/cli/cmor.py +46 -0
  110. esgvoc/cli/config.py +1300 -0
  111. esgvoc/cli/drs.py +267 -0
  112. esgvoc/cli/find.py +138 -0
  113. esgvoc/cli/get.py +155 -0
  114. esgvoc/cli/install.py +41 -0
  115. esgvoc/cli/main.py +60 -0
  116. esgvoc/cli/offline.py +269 -0
  117. esgvoc/cli/status.py +79 -0
  118. esgvoc/cli/test_cv.py +258 -0
  119. esgvoc/cli/valid.py +147 -0
  120. esgvoc/core/constants.py +17 -0
  121. esgvoc/core/convert.py +0 -0
  122. esgvoc/core/data_handler.py +206 -0
  123. esgvoc/core/db/__init__.py +3 -0
  124. esgvoc/core/db/connection.py +40 -0
  125. esgvoc/core/db/models/mixins.py +25 -0
  126. esgvoc/core/db/models/project.py +102 -0
  127. esgvoc/core/db/models/universe.py +98 -0
  128. esgvoc/core/db/project_ingestion.py +231 -0
  129. esgvoc/core/db/universe_ingestion.py +172 -0
  130. esgvoc/core/exceptions.py +33 -0
  131. esgvoc/core/logging_handler.py +26 -0
  132. esgvoc/core/repo_fetcher.py +345 -0
  133. esgvoc/core/service/__init__.py +41 -0
  134. esgvoc/core/service/configuration/config_manager.py +196 -0
  135. esgvoc/core/service/configuration/setting.py +363 -0
  136. esgvoc/core/service/data_merger.py +634 -0
  137. esgvoc/core/service/esg_voc.py +77 -0
  138. esgvoc/core/service/resolver_config.py +56 -0
  139. esgvoc/core/service/state.py +324 -0
  140. esgvoc/core/service/string_heuristics.py +98 -0
  141. esgvoc/core/service/term_cache.py +108 -0
  142. esgvoc/core/service/uri_resolver.py +133 -0
  143. esgvoc-2.0.2.dist-info/METADATA +82 -0
  144. esgvoc-2.0.2.dist-info/RECORD +147 -0
  145. esgvoc-2.0.2.dist-info/WHEEL +4 -0
  146. esgvoc-2.0.2.dist-info/entry_points.txt +2 -0
  147. 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,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.26.3
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ esgvoc = esgvoc.cli.main:main