esgvoc 0.1.2__py3-none-any.whl → 0.3.0__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.

Potentially problematic release.


This version of esgvoc might be problematic. Click here for more details.

Files changed (78) hide show
  1. esgvoc/__init__.py +3 -1
  2. esgvoc/api/__init__.py +30 -30
  3. esgvoc/api/_utils.py +28 -14
  4. esgvoc/api/data_descriptors/__init__.py +19 -10
  5. esgvoc/api/data_descriptors/activity.py +8 -45
  6. esgvoc/api/data_descriptors/area_label.py +6 -0
  7. esgvoc/api/data_descriptors/branded_suffix.py +5 -0
  8. esgvoc/api/data_descriptors/branded_variable.py +5 -0
  9. esgvoc/api/data_descriptors/consortium.py +16 -56
  10. esgvoc/api/data_descriptors/data_descriptor.py +106 -0
  11. esgvoc/api/data_descriptors/date.py +3 -46
  12. esgvoc/api/data_descriptors/directory_date.py +5 -0
  13. esgvoc/api/data_descriptors/experiment.py +19 -54
  14. esgvoc/api/data_descriptors/forcing_index.py +3 -45
  15. esgvoc/api/data_descriptors/frequency.py +6 -43
  16. esgvoc/api/data_descriptors/grid_label.py +6 -44
  17. esgvoc/api/data_descriptors/horizontal_label.py +6 -0
  18. esgvoc/api/data_descriptors/initialisation_index.py +3 -44
  19. esgvoc/api/data_descriptors/institution.py +11 -54
  20. esgvoc/api/data_descriptors/license.py +4 -44
  21. esgvoc/api/data_descriptors/mip_era.py +6 -44
  22. esgvoc/api/data_descriptors/model_component.py +7 -45
  23. esgvoc/api/data_descriptors/organisation.py +3 -40
  24. esgvoc/api/data_descriptors/physic_index.py +3 -45
  25. esgvoc/api/data_descriptors/product.py +4 -43
  26. esgvoc/api/data_descriptors/realisation_index.py +3 -44
  27. esgvoc/api/data_descriptors/realm.py +4 -42
  28. esgvoc/api/data_descriptors/resolution.py +6 -44
  29. esgvoc/api/data_descriptors/source.py +18 -53
  30. esgvoc/api/data_descriptors/source_type.py +3 -41
  31. esgvoc/api/data_descriptors/sub_experiment.py +3 -41
  32. esgvoc/api/data_descriptors/table.py +6 -48
  33. esgvoc/api/data_descriptors/temporal_label.py +6 -0
  34. esgvoc/api/data_descriptors/time_range.py +3 -27
  35. esgvoc/api/data_descriptors/variable.py +13 -71
  36. esgvoc/api/data_descriptors/variant_label.py +3 -47
  37. esgvoc/api/data_descriptors/vertical_label.py +5 -0
  38. esgvoc/api/project_specs.py +82 -0
  39. esgvoc/api/projects.py +284 -238
  40. esgvoc/api/report.py +89 -52
  41. esgvoc/api/search.py +31 -11
  42. esgvoc/api/universe.py +57 -48
  43. esgvoc/apps/__init__.py +6 -0
  44. esgvoc/apps/drs/__init__.py +0 -16
  45. esgvoc/apps/drs/constants.py +2 -0
  46. esgvoc/apps/drs/generator.py +429 -0
  47. esgvoc/apps/drs/report.py +492 -0
  48. esgvoc/apps/drs/validator.py +330 -0
  49. esgvoc/cli/drs.py +248 -0
  50. esgvoc/cli/get.py +26 -25
  51. esgvoc/cli/install.py +11 -8
  52. esgvoc/cli/main.py +4 -5
  53. esgvoc/cli/status.py +14 -2
  54. esgvoc/cli/valid.py +41 -45
  55. esgvoc/core/db/models/mixins.py +7 -0
  56. esgvoc/core/db/models/project.py +3 -8
  57. esgvoc/core/db/models/universe.py +3 -3
  58. esgvoc/core/db/project_ingestion.py +4 -1
  59. esgvoc/core/db/universe_ingestion.py +8 -7
  60. esgvoc/core/logging_handler.py +1 -1
  61. esgvoc/core/repo_fetcher.py +4 -3
  62. esgvoc/core/service/__init__.py +37 -5
  63. esgvoc/core/service/configuration/config_manager.py +188 -0
  64. esgvoc/core/service/configuration/setting.py +88 -0
  65. esgvoc/core/service/state.py +66 -42
  66. esgvoc-0.3.0.dist-info/METADATA +89 -0
  67. esgvoc-0.3.0.dist-info/RECORD +78 -0
  68. esgvoc-0.3.0.dist-info/licenses/LICENSE.txt +519 -0
  69. esgvoc/apps/drs/models.py +0 -43
  70. esgvoc/apps/drs/parser.py +0 -27
  71. esgvoc/cli/config.py +0 -79
  72. esgvoc/core/service/settings.py +0 -64
  73. esgvoc/core/service/settings.toml +0 -12
  74. esgvoc/core/service/settings_default.toml +0 -20
  75. esgvoc-0.1.2.dist-info/METADATA +0 -54
  76. esgvoc-0.1.2.dist-info/RECORD +0 -66
  77. {esgvoc-0.1.2.dist-info → esgvoc-0.3.0.dist-info}/WHEEL +0 -0
  78. {esgvoc-0.1.2.dist-info → esgvoc-0.3.0.dist-info}/entry_points.txt +0 -0
@@ -1,64 +0,0 @@
1
- from pydantic import BaseModel, Field
2
- from typing import Dict, Optional
3
- from pathlib import Path
4
- import toml
5
-
6
-
7
- SETTINGS_FILE = Path(__file__) / "settings.toml"
8
-
9
- class ProjectSettings(BaseModel):
10
- project_name: str
11
- github_repo: str
12
- branch: Optional[str] = "main"
13
- local_path: Optional[str] = None
14
- db_path: Optional[str] = None
15
-
16
- class UniverseSettings(BaseModel):
17
- github_repo: str
18
- branch: Optional[str] = None
19
- local_path: Optional[str] = None
20
- db_path: Optional[str] = None
21
-
22
- class ServiceSettings(BaseModel):
23
- universe: UniverseSettings
24
- projects: Dict[str, ProjectSettings] = Field(default_factory=dict)
25
-
26
- @classmethod
27
- def load_from_file(cls, file_path: str) -> "ServiceSettings":
28
- data = toml.load(file_path)
29
- projects = {p['project_name']: ProjectSettings(**p) for p in data.pop('projects', [])}
30
- return cls(universe=UniverseSettings(**data['universe']), projects=projects)
31
-
32
- def save_to_file(self, file_path: str):
33
- data = {
34
- "universe": self.universe.model_dump(),
35
- "projects": [p.model_dump() for p in self.projects.values()]
36
- }
37
- with open(file_path, "w") as f:
38
- toml.dump(data, f)
39
-
40
- def load_settings() -> ServiceSettings:
41
- """Load the settings from the TOML file."""
42
- if SETTINGS_FILE.exists():
43
- return ServiceSettings.load_from_file(str(SETTINGS_FILE))
44
- else:
45
- default_settings = ServiceSettings(
46
- universe=UniverseSettings(
47
- github_repo="https://github.com/ESPRI-Mod/mip-cmor-tables",
48
- branch="uni_proj_ld",
49
- local_path=".cache/repos/mip-cmor-tables",
50
- db_path=".cache/dbs/universe.sqlite"
51
- ),
52
- projects={"cmip6plus":ProjectSettings(
53
- project_name="CMIP6Plus_CVs",
54
- github_repo="https://github.com/ESPRI-Mod/CMIP6Plus_CVs",
55
- branch="uni_proj_ld",
56
- local_path=".cache/repos/CMIP6Plus_CVs",
57
- db_path=".cache/dbs/cmip6plus.sqlite"
58
- )
59
- }
60
-
61
- )
62
-
63
- default_settings.save_to_file(str(SETTINGS_FILE))
64
- return default_settings
@@ -1,12 +0,0 @@
1
- [[projects]]
2
- project_name = "cmip6plus"
3
- github_repo = "https://github.com/ESPRI-Mod/CMIP6Plus_CVs"
4
- branch = "uni_proj_ld"
5
- local_path = ".cache/repos/CMIP6Plus_CVs"
6
- db_path = ".cache/dbs/cmip6plus.sqlite"
7
-
8
- [universe]
9
- github_repo = "https://github.com/ESPRI-Mod/mip-cmor-tables"
10
- branch = "uni_proj_ld"
11
- local_path = ".cache/repos/mip-cmor-tables"
12
- db_path = ".cache/dbs/universe.sqlite"
@@ -1,20 +0,0 @@
1
-
2
- # [[projects]]
3
- # project_name = "TestProject"
4
- # github_repo = "XXX"
5
- # branch = "XXX"
6
- # local_path = "XXX"
7
- # db_path = "./cache/dbs/XXXX.sqlite"
8
-
9
- [[projects]]
10
- project_name = "cmip6plus"
11
- github_repo = "https://github.com/ESPRI-Mod/CMIP6Plus_CVs"
12
- branch = "uni_proj_ld"
13
- local_path = ".cache/repos/CMIP6Plus_CVs"
14
- db_path = ".cache/dbs/cmip6plus.sqlite"
15
-
16
- [universe]
17
- github_repo = "https://github.com/ESPRI-Mod/mip-cmor-tables"
18
- branch = "uni_proj_ld"
19
- local_path = ".cache/repos/mip-cmor-tables"
20
- db_path = ".cache/dbs/universe.sqlite"
@@ -1,54 +0,0 @@
1
- Metadata-Version: 2.3
2
- Name: esgvoc
3
- Version: 0.1.2
4
- Summary: python library and CLI to interact with WCRP CV
5
- Project-URL: Repository, https://github.com/ESPRI-Mod/cmipld
6
- Author-email: TROUSSELLIER Laurent <laurent.troussellier@ipsl.fr>, Gardoll Sébastien <sebastien@gardoll.fr>
7
- Requires-Python: >=3.12
8
- Requires-Dist: idna>=3.10
9
- Requires-Dist: pydantic>=2.9.2
10
- Requires-Dist: pyld>=2.0.4
11
- Requires-Dist: requests>=2.32.3
12
- Requires-Dist: sqlalchemy>=2.0.36
13
- Requires-Dist: sqlmodel>=0.0.22
14
- Requires-Dist: toml>=0.10.2
15
- Requires-Dist: typer>=0.15.0
16
- Description-Content-Type: text/markdown
17
-
18
-
19
- # Esgvoc Library
20
-
21
- Esgvoc is a Python library designed to simplify interaction with controlled vocabularies (CVs) used in climate data projects. It supports querying, caching, and validating terms across various CV repositories like the Universe and project-specific repositories (e.g., CMIP6Plus).
22
-
23
- ---
24
-
25
- ## Features
26
-
27
- - **Query controlled vocabularies**:
28
- - Retrieve terms, collections, or descriptors.
29
- - Perform cross-validation and search operations.
30
-
31
- - **Caching**:
32
- - Download CVs to a local database for offline use.
33
- - Keep the local cache up-to-date.
34
-
35
- - **Validation**:
36
- - Validate strings against CV terms and templates.
37
- - Supports case-sensitive, wildcard, and approximate matching.
38
-
39
- ---
40
-
41
- ## Installation
42
-
43
- Esgvoc is available on PyPI. Install it with pip:
44
-
45
- ```bash
46
- pip install esgvoc
47
- ```
48
-
49
- in order to get the latest possible CV
50
-
51
-
52
- ```bash
53
- esgvoc install
54
- ```
@@ -1,66 +0,0 @@
1
- esgvoc/__init__.py,sha256=kPejgt5LFlzacS1O0vGN5JC7AlpRpWCmGIHUcBr_6-M,35
2
- esgvoc/api/__init__.py,sha256=yjrmVpHAR5_OChzzWziebIeUYh_6qyXBJx3VUimaFkE,2933
3
- esgvoc/api/_utils.py,sha256=eIVP7d3jbr7u_LNliLoM2Up3Zl5rcxIw_hjqLdfaxUA,1390
4
- esgvoc/api/projects.py,sha256=JZuqDTeAv7GcJ4IclyHU1bKWrGdqGafvxQAJ8fgux-8,38629
5
- esgvoc/api/report.py,sha256=MFMN9oVG9WWRvPtBeQj4o7XDahPu-Fq302Qy2G8Qt2Q,2875
6
- esgvoc/api/search.py,sha256=JYTegv0ebdm8AqK8V6DccPR88K2vWVtHXnstJmG07xE,3501
7
- esgvoc/api/universe.py,sha256=YGphsws7iSQZKYfRx4XfiZOuBylc0HYFG2KItsjyVjM,9609
8
- esgvoc/api/data_descriptors/__init__.py,sha256=K-qzokgt3bdiwSJcnBzAub4Duw87cHTX9VdF-RU-pQ8,2910
9
- esgvoc/api/data_descriptors/activity.py,sha256=o-RlmAFJkIb9TkUZIjEJaHi9dnQ70GHH5-5bKACRwMI,1371
10
- esgvoc/api/data_descriptors/consortium.py,sha256=fhAaEqxBpBDSmO7rIya1nnEz9aRyhQQFnIBExcyQxQM,1467
11
- esgvoc/api/data_descriptors/date.py,sha256=q4YXqaEryrcXO3ndk4SwyKwn56iGuBiJbHs8JSUpXJU,781
12
- esgvoc/api/data_descriptors/experiment.py,sha256=DCPYhgGWgD7LKgheqreXKGd5_0pQ6a1GnJ17IDt5WXY,1838
13
- esgvoc/api/data_descriptors/forcing_index.py,sha256=m2SBobNTN8P_TFS-uIwMyqbJ9d6CNr21bzW7qT3MVe0,796
14
- esgvoc/api/data_descriptors/frequency.py,sha256=XIu1v5NIcaNKj-9K3WNa4jH_Lds5XO5CP4M79nNVuVE,842
15
- esgvoc/api/data_descriptors/grid_label.py,sha256=i7bZJv_Y1s8gx2TR5D02i3Xify1rMu9lXRAwvYRugEY,846
16
- esgvoc/api/data_descriptors/initialisation_index.py,sha256=TtxvKO0IaD4ZEzm6LKCqKEaRYFHtLyTKo4UGj4kL9fI,809
17
- esgvoc/api/data_descriptors/institution.py,sha256=sr4pgTrNIEnl_GcaJeNndsYfYXSMKwFybzZDquD0qdM,1316
18
- esgvoc/api/data_descriptors/license.py,sha256=4hQiAQoBbecYZbApAzr2mnR8063yL13j7b_VSKgkIhA,933
19
- esgvoc/api/data_descriptors/mip_era.py,sha256=P7Vyen9uFCoOhh4qooPy-hDJ_jcP-1ISl25cmZBC9KI,824
20
- esgvoc/api/data_descriptors/model_component.py,sha256=WGsv_bd5TrNeyBx1a6f-wjXRXDMMf5C5hyJtTknjk68,864
21
- esgvoc/api/data_descriptors/organisation.py,sha256=dyB2l1lYDb3SMCuO4Ptsz9gImooeD3fqaTr6Ih2N_vg,855
22
- esgvoc/api/data_descriptors/physic_index.py,sha256=S_G-0hrbbGFqWj0xks6kAIwKkjPYRrRCDHaeZqvOdYk,794
23
- esgvoc/api/data_descriptors/product.py,sha256=rYhmSZy5vPwzZ2ZYIQXkoW5E-FeG8lAS_1lPaU7sDtg,805
24
- esgvoc/api/data_descriptors/realisation_index.py,sha256=spmDj6fBYfnqFiTJRH_OHJbm9gRmq-QqEvt1UJMXwl8,805
25
- esgvoc/api/data_descriptors/realm.py,sha256=GAebWcwyR48EyZiuapLD8eZxYEv3oGQ6Cndeho0DVAs,799
26
- esgvoc/api/data_descriptors/resolution.py,sha256=70eg9lAYGFS7Qws5mL2QwrU9N7tleA0YQp-V5ZIMj0E,841
27
- esgvoc/api/data_descriptors/source.py,sha256=1wWZY63NXk-8b3io8OYdsaZpVaXHS1d-M1bBhf54Ysc,1898
28
- esgvoc/api/data_descriptors/source_type.py,sha256=1GRDoFun3ncRLcAhjRvl3OgGL2ieq7Cv8v1_hcI60BU,793
29
- esgvoc/api/data_descriptors/sub_experiment.py,sha256=Z-GxS96201hIYtDgGnymHpkpKt16xjvk4QQnY_vSjr0,799
30
- esgvoc/api/data_descriptors/table.py,sha256=bhh-bSx7UYAAETmMAGNOIfwkyvywIhX0HlJh9a2njV0,1009
31
- esgvoc/api/data_descriptors/time_range.py,sha256=bBVRwmc7NEeGacV-UA0vadQXsyrlwBjyjVoYTw26rYA,630
32
- esgvoc/api/data_descriptors/variable.py,sha256=2Y6MfDzRvLF3FR5bhhJ6jTmPc2NTZVsoGF1Y2SEGeLU,2145
33
- esgvoc/api/data_descriptors/variant_label.py,sha256=ExP68t3v1xtjFEjOgVr2NFEOkQVGmf9GzStRlSPmNMU,931
34
- esgvoc/apps/drs/__init__.py,sha256=uNkxKa7wbUAHlldtrCxTZraJJ2Y9NQEdpWTy-lLrGAY,562
35
- esgvoc/apps/drs/models.py,sha256=ZWTXkgMKTCvMkmOB2c-l_npl_9ph0qXewa0e5J02mAI,937
36
- esgvoc/apps/drs/parser.py,sha256=DlCnVn0cguu5_I-gKinw_Hd_gomfET90AqMlZlawVz8,734
37
- esgvoc/cli/config.py,sha256=JCUppLaMPO6Xa3pZ-RL-meWy4wwTw1hr_IJM3LL1vac,2877
38
- esgvoc/cli/get.py,sha256=60W-MSrIUvQkAmGB2HXr2qGKYbel-_IKDL5N_uEIr8Y,5122
39
- esgvoc/cli/install.py,sha256=tJl9Z9UoBbRXK8dMAehTTHfH9aT6fAqtEX7tt5Wl0F8,236
40
- esgvoc/cli/main.py,sha256=jXJ9rNzI276cYJaZ8LxKBsblxHLw51_OK0_OyAGPe8A,490
41
- esgvoc/cli/status.py,sha256=_6Wx3bGzsoxv_Hv0ENO-NcFJzzzUpLTlsUlQH-E3d-o,465
42
- esgvoc/cli/valid.py,sha256=C_z1nrAP7mD3Iws0esVJsXpbiwjWZBtgXmikJruRRtY,7057
43
- esgvoc/core/constants.py,sha256=b9GoM3pTICki95gMCnUZbg4_mMiywKhJX5ME01pgwMs,431
44
- esgvoc/core/convert.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- esgvoc/core/data_handler.py,sha256=BmcD_dSvX5fCkUEGAQnadPTeuKA7IvgMmQtesMXKh5g,5004
46
- esgvoc/core/logging.conf,sha256=GK52lsTu17CfC2tKiMAIvkuHkIt5tqPmkWv68COOilc,278
47
- esgvoc/core/logging_handler.py,sha256=NhqKX2nFYVi01EhZPysFZ4UWBWJwgxafC_pWtd28YlU,115
48
- esgvoc/core/repo_fetcher.py,sha256=m0Qh2kBAa-ij2ZJ7uEYYW-CakoLs5deFHl7zniLgW5Y,9738
49
- esgvoc/core/db/__init__.py,sha256=gjAT_lUJtPqxsc8WnwbG_sxDqSIFAlG8vEKxdGyH82w,150
50
- esgvoc/core/db/connection.py,sha256=dhnCy1mwytUUvt149WHk7eYW0KSP64IaF3kMvKOQSJE,877
51
- esgvoc/core/db/project_ingestion.py,sha256=Sx63UhHjZ_2b5hkObDci2X7VB9f3DfU7-uKtqgl12Rk,6114
52
- esgvoc/core/db/universe_ingestion.py,sha256=weF8f4AUF20NHiDoUe8paQmxOpuNUe8QSTslEtOfKGA,5148
53
- esgvoc/core/db/models/mixins.py,sha256=M4gP42fydNcrZO9Z9wfKVU_1tK__fc2NosWumpU9lc0,291
54
- esgvoc/core/db/models/project.py,sha256=KHnVsaFbA67e28doJ4TFCDkW04x4Es-uv3fDL3WDup4,2349
55
- esgvoc/core/db/models/universe.py,sha256=32oWFvzqqFr86M14phbfvfmEzlldi3DSTAALjTigR_8,2199
56
- esgvoc/core/service/__init__.py,sha256=ByAE1LhD5cKIcwrSIH0Y___KP2Ewh55P57sAMQ4CHeM,308
57
- esgvoc/core/service/data_merger.py,sha256=GNFp5DTV2jlBVJZNpILngi6jCbUvVGcqka4EMWKj_Os,3456
58
- esgvoc/core/service/esg_voc.py,sha256=5G0P4_xmQzoI_RG_agpq-yHoYYZx220P27v2nPrpyNs,2420
59
- esgvoc/core/service/settings.py,sha256=oNA4BKgZopxLA51R2PlRJ9rpqHgOqhGWLx-pffVUOlk,2160
60
- esgvoc/core/service/settings.toml,sha256=XzcnD3l4xk5UXNxgod7uSbQ_iYFn2CjyLvVPlQ88Edw,383
61
- esgvoc/core/service/settings_default.toml,sha256=lxHkuLn3T65SxWh5owxqREMQ88LwIgoQ85-5HaDVuRo,529
62
- esgvoc/core/service/state.py,sha256=RPzgGTPyhqizbDKSEHbPGmNRss7iSi_bZnDafJokrEI,9203
63
- esgvoc-0.1.2.dist-info/METADATA,sha256=GGTJeCE71fd-SDGePr6LkmRFkz2_0WfHpqMFfeMQ6-k,1456
64
- esgvoc-0.1.2.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
65
- esgvoc-0.1.2.dist-info/entry_points.txt,sha256=ZXufSC7Jlx1lb52U6Buv9IitJMcqAAXOerR2V9DaIto,48
66
- esgvoc-0.1.2.dist-info/RECORD,,
File without changes