esgvoc 0.1.2__py3-none-any.whl → 0.2.1__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.
- esgvoc/api/__init__.py +15 -4
- esgvoc/api/data_descriptors/__init__.py +3 -0
- esgvoc/api/data_descriptors/directory_date.py +48 -0
- esgvoc/api/project_specs.py +82 -0
- esgvoc/api/projects.py +160 -130
- esgvoc/api/report.py +78 -50
- esgvoc/api/search.py +28 -10
- esgvoc/api/universe.py +17 -18
- esgvoc/apps/__init__.py +7 -0
- esgvoc/apps/drs/__init__.py +0 -16
- esgvoc/apps/drs/constants.py +2 -0
- esgvoc/apps/drs/generator.py +424 -0
- esgvoc/apps/drs/report.py +401 -0
- esgvoc/apps/drs/validator.py +332 -0
- esgvoc/cli/config.py +3 -0
- esgvoc/cli/drs.py +238 -0
- esgvoc/cli/get.py +1 -1
- esgvoc/cli/main.py +4 -3
- esgvoc/cli/status.py +13 -1
- esgvoc/cli/valid.py +1 -5
- esgvoc/core/db/models/mixins.py +7 -0
- esgvoc/core/db/models/project.py +3 -8
- esgvoc/core/db/project_ingestion.py +4 -1
- esgvoc/core/db/universe_ingestion.py +3 -3
- esgvoc/core/service/settings.py +17 -8
- esgvoc/core/service/settings.toml +11 -6
- esgvoc/core/service/settings_default.toml +11 -14
- esgvoc/core/service/state.py +19 -12
- esgvoc-0.2.1.dist-info/METADATA +58 -0
- {esgvoc-0.1.2.dist-info → esgvoc-0.2.1.dist-info}/RECORD +33 -26
- esgvoc-0.2.1.dist-info/licenses/LICENSE.txt +519 -0
- esgvoc/apps/drs/models.py +0 -43
- esgvoc/apps/drs/parser.py +0 -27
- esgvoc-0.1.2.dist-info/METADATA +0 -54
- {esgvoc-0.1.2.dist-info → esgvoc-0.2.1.dist-info}/WHEEL +0 -0
- {esgvoc-0.1.2.dist-info → esgvoc-0.2.1.dist-info}/entry_points.txt +0 -0
esgvoc/core/db/models/project.py
CHANGED
|
@@ -7,7 +7,6 @@ from sqlmodel import Column, Field, Relationship, SQLModel
|
|
|
7
7
|
|
|
8
8
|
import esgvoc.core.db.connection as db
|
|
9
9
|
from esgvoc.core.db.models.mixins import IdMixin, PkMixin, TermKind
|
|
10
|
-
|
|
11
10
|
_LOGGER = logging.getLogger("project_db_creation")
|
|
12
11
|
|
|
13
12
|
|
|
@@ -34,13 +33,10 @@ class PTerm(SQLModel, PkMixin, IdMixin, table=True):
|
|
|
34
33
|
kind: TermKind = Field(sa_column=Column(sa.Enum(TermKind)))
|
|
35
34
|
collection_pk: int | None = Field(default=None, foreign_key="collections.pk")
|
|
36
35
|
collection: Collection = Relationship(back_populates="terms")
|
|
36
|
+
__table_args__ = (sa.Index(
|
|
37
|
+
"drs_name_index", specs.sa_column["drs_name"]
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
def create_drs_name_index():
|
|
40
|
-
PTerm.__table_args__ = sa.Index(
|
|
41
|
-
"drs_name_index", PTerm.__table__.c.specs["drs_name"]
|
|
42
|
-
)
|
|
43
|
-
|
|
39
|
+
),)
|
|
44
40
|
|
|
45
41
|
def project_create_db(db_file_path: Path):
|
|
46
42
|
try:
|
|
@@ -53,7 +49,6 @@ def project_create_db(db_file_path: Path):
|
|
|
53
49
|
tables_to_be_created = [SQLModel.metadata.tables['projects'],
|
|
54
50
|
SQLModel.metadata.tables['collections'],
|
|
55
51
|
SQLModel.metadata.tables['pterms']]
|
|
56
|
-
create_drs_name_index()
|
|
57
52
|
SQLModel.metadata.create_all(connection.get_engine(), tables=tables_to_be_created)
|
|
58
53
|
except Exception as e:
|
|
59
54
|
msg = f'Unable to create tables in SQLite database at {db_file_path}. Abort.'
|
|
@@ -11,6 +11,7 @@ from pydantic import BaseModel
|
|
|
11
11
|
import esgvoc.core.db.connection as db
|
|
12
12
|
from esgvoc.core.db.connection import read_json_file
|
|
13
13
|
from esgvoc.core.db.models.project import Collection, Project, PTerm
|
|
14
|
+
import esgvoc.core.service as service
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
_LOGGER = logging.getLogger("project_ingestion")
|
|
@@ -74,7 +75,9 @@ def ingest_collection(collection_dir_path: Path,
|
|
|
74
75
|
if term_file_path.is_file() and term_file_path.suffix==".json":
|
|
75
76
|
try:
|
|
76
77
|
json_specs = DataMerger(data=JsonLdResource(uri =str(term_file_path)),
|
|
77
|
-
locally_available={"https://espri-mod.github.io/mip-cmor-tables":".cache/repos/
|
|
78
|
+
# locally_available={"https://espri-mod.github.io/mip-cmor-tables":".cache/repos/WCRP-universe"}).merge_linked_json()[-1]
|
|
79
|
+
locally_available={"https://espri-mod.github.io/mip-cmor-tables":service.service_settings.universe.local_path}).merge_linked_json()[-1]
|
|
80
|
+
|
|
78
81
|
term_kind = infer_term_kind(json_specs)
|
|
79
82
|
term_id = json_specs["id"]
|
|
80
83
|
|
|
@@ -11,6 +11,7 @@ from esgvoc.core.db.connection import read_json_file
|
|
|
11
11
|
from esgvoc.core.db.models.mixins import TermKind
|
|
12
12
|
from esgvoc.core.db.models.universe import DataDescriptor, UTerm, Universe
|
|
13
13
|
from esgvoc.core.db.models.universe import universe_create_db
|
|
14
|
+
import esgvoc.core.service as service
|
|
14
15
|
|
|
15
16
|
_LOGGER = logging.getLogger(__name__)
|
|
16
17
|
|
|
@@ -32,7 +33,7 @@ def ingest_universe(universe_repo_dir_path: Path, universe_db_file_path: Path) -
|
|
|
32
33
|
raise IOError(msg) from e
|
|
33
34
|
|
|
34
35
|
for data_descriptor_dir_path in universe_repo_dir_path.iterdir():
|
|
35
|
-
if data_descriptor_dir_path.is_dir() and (data_descriptor_dir_path / "000_context.jsonld").exists(): # TODO maybe put that in setting
|
|
36
|
+
if data_descriptor_dir_path.is_dir() and (data_descriptor_dir_path / "000_context.jsonld").exists(): # TODO maybe put that in setting
|
|
36
37
|
try:
|
|
37
38
|
ingest_data_descriptor(data_descriptor_dir_path, connection)
|
|
38
39
|
except Exception as e:
|
|
@@ -61,7 +62,6 @@ def ingest_data_descriptor(data_descriptor_path: Path,
|
|
|
61
62
|
_LOGGER.warning(msg)
|
|
62
63
|
return
|
|
63
64
|
|
|
64
|
-
|
|
65
65
|
with connection.create_session() as session:
|
|
66
66
|
data_descriptor = DataDescriptor(id=data_descriptor_id,
|
|
67
67
|
context=context,
|
|
@@ -74,7 +74,7 @@ def ingest_data_descriptor(data_descriptor_path: Path,
|
|
|
74
74
|
if term_file_path.is_file() and term_file_path.suffix == ".json":
|
|
75
75
|
try:
|
|
76
76
|
json_specs=DataMerger(data=JsonLdResource(uri=str(term_file_path)),
|
|
77
|
-
locally_available={"https://espri-mod.github.io/mip-cmor-tables":
|
|
77
|
+
locally_available={"https://espri-mod.github.io/mip-cmor-tables":service.service_settings.universe.local_path}).merge_linked_json()[-1]
|
|
78
78
|
term_kind = infer_term_kind(json_specs)
|
|
79
79
|
term_id = json_specs["id"]
|
|
80
80
|
|
esgvoc/core/service/settings.py
CHANGED
|
@@ -4,7 +4,7 @@ from pathlib import Path
|
|
|
4
4
|
import toml
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
SETTINGS_FILE = Path(__file__) / "settings.toml"
|
|
7
|
+
SETTINGS_FILE = Path(__file__).parent / "settings.toml"
|
|
8
8
|
|
|
9
9
|
class ProjectSettings(BaseModel):
|
|
10
10
|
project_name: str
|
|
@@ -44,21 +44,30 @@ def load_settings() -> ServiceSettings:
|
|
|
44
44
|
else:
|
|
45
45
|
default_settings = ServiceSettings(
|
|
46
46
|
universe=UniverseSettings(
|
|
47
|
-
github_repo="https://github.com/
|
|
48
|
-
branch="
|
|
49
|
-
local_path=".cache/repos/
|
|
47
|
+
github_repo="https://github.com/WCRP-CMIP/WCRP-universe",
|
|
48
|
+
branch="esgvoc",
|
|
49
|
+
local_path=".cache/repos/WCRP-universe",
|
|
50
50
|
db_path=".cache/dbs/universe.sqlite"
|
|
51
51
|
),
|
|
52
52
|
projects={"cmip6plus":ProjectSettings(
|
|
53
53
|
project_name="CMIP6Plus_CVs",
|
|
54
|
-
github_repo="https://github.com/
|
|
55
|
-
branch="
|
|
54
|
+
github_repo="https://github.com/WCRP-CMIP/CMIP6Plus_CVs",
|
|
55
|
+
branch="esgvoc",
|
|
56
56
|
local_path=".cache/repos/CMIP6Plus_CVs",
|
|
57
57
|
db_path=".cache/dbs/cmip6plus.sqlite"
|
|
58
|
+
),
|
|
59
|
+
|
|
60
|
+
"cmip6":ProjectSettings(
|
|
61
|
+
project_name="CMIP6_CVs",
|
|
62
|
+
github_repo="https://github.com/WCRP-CMIP/CMIP6_CVs",
|
|
63
|
+
branch="esgvoc",
|
|
64
|
+
local_path=".cache/repos/CMIP6_CVs",
|
|
65
|
+
db_path=".cache/dbs/cmip6.sqlite"
|
|
58
66
|
)
|
|
59
67
|
}
|
|
60
|
-
|
|
61
|
-
|
|
68
|
+
|
|
69
|
+
)
|
|
70
|
+
|
|
62
71
|
|
|
63
72
|
default_settings.save_to_file(str(SETTINGS_FILE))
|
|
64
73
|
return default_settings
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
[[projects]]
|
|
2
|
+
project_name = "cmip6"
|
|
3
|
+
github_repo = "https://github.com/WCRP-CMIP/CMIP6_CVs"
|
|
4
|
+
branch = "esgvoc"
|
|
5
|
+
local_path = ".cache/repos/CMIP6_CVs"
|
|
6
|
+
db_path = ".cache/dbs/cmip6.sqlite"
|
|
7
|
+
[[projects]]
|
|
2
8
|
project_name = "cmip6plus"
|
|
3
|
-
github_repo = "https://github.com/
|
|
4
|
-
branch = "
|
|
9
|
+
github_repo = "https://github.com/WCRP-CMIP/CMIP6Plus_CVs"
|
|
10
|
+
branch = "esgvoc"
|
|
5
11
|
local_path = ".cache/repos/CMIP6Plus_CVs"
|
|
6
12
|
db_path = ".cache/dbs/cmip6plus.sqlite"
|
|
7
|
-
|
|
8
13
|
[universe]
|
|
9
|
-
github_repo = "https://github.com/
|
|
10
|
-
branch = "
|
|
11
|
-
local_path = ".cache/repos/
|
|
14
|
+
github_repo = "https://github.com/WCRP-CMIP/WCRP-universe"
|
|
15
|
+
branch = "esgvoc"
|
|
16
|
+
local_path = ".cache/repos/WCRP-universe"
|
|
12
17
|
db_path = ".cache/dbs/universe.sqlite"
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
# db_path = "./cache/dbs/XXXX.sqlite"
|
|
8
|
-
|
|
1
|
+
[[projects]]
|
|
2
|
+
project_name = "cmip6"
|
|
3
|
+
github_repo = "https://github.com/WCRP-CMIP/CMIP6_CVs"
|
|
4
|
+
branch = "esgvoc"
|
|
5
|
+
local_path = ".cache/repos/CMIP6_CVs"
|
|
6
|
+
db_path = ".cache/dbs/cmip6.sqlite"
|
|
9
7
|
[[projects]]
|
|
10
8
|
project_name = "cmip6plus"
|
|
11
|
-
github_repo = "https://github.com/
|
|
12
|
-
branch = "
|
|
9
|
+
github_repo = "https://github.com/WCRP-CMIP/CMIP6Plus_CVs"
|
|
10
|
+
branch = "esgvoc"
|
|
13
11
|
local_path = ".cache/repos/CMIP6Plus_CVs"
|
|
14
12
|
db_path = ".cache/dbs/cmip6plus.sqlite"
|
|
15
|
-
|
|
16
13
|
[universe]
|
|
17
|
-
github_repo = "https://github.com/
|
|
18
|
-
branch = "
|
|
19
|
-
local_path = ".cache/repos/
|
|
14
|
+
github_repo = "https://github.com/WCRP-CMIP/WCRP-universe"
|
|
15
|
+
branch = "esgvoc"
|
|
16
|
+
local_path = ".cache/repos/WCRP-universe"
|
|
20
17
|
db_path = ".cache/dbs/universe.sqlite"
|
esgvoc/core/service/state.py
CHANGED
|
@@ -89,6 +89,9 @@ class BaseState:
|
|
|
89
89
|
def check_sync_status(self):
|
|
90
90
|
self.fetch_versions()
|
|
91
91
|
return {
|
|
92
|
+
"github" : self.github_version if self.github_version else None,
|
|
93
|
+
"local": self.local_version if self.local_version else None,
|
|
94
|
+
"db" : self.db_version if self.db_version else None,
|
|
92
95
|
"github_local_sync": self.github_version == self.local_version if self.github_access and self.github_version and self.local_version else None,
|
|
93
96
|
"local_db_sync": self.local_version == self.db_version if self.local_access and self.local_version and self.db_version else None,
|
|
94
97
|
|
|
@@ -108,7 +111,7 @@ class BaseState:
|
|
|
108
111
|
from esgvoc.core.db.models.project import project_create_db
|
|
109
112
|
from esgvoc.core.db.models.universe import universe_create_db
|
|
110
113
|
from esgvoc.core.db.universe_ingestion import ingest_universe
|
|
111
|
-
|
|
114
|
+
|
|
112
115
|
if self.db_path :
|
|
113
116
|
if os.path.exists(self.db_path):
|
|
114
117
|
os.remove(self.db_path)
|
|
@@ -116,12 +119,16 @@ class BaseState:
|
|
|
116
119
|
os.makedirs(Path(self.db_path).parent,exist_ok=True)
|
|
117
120
|
|
|
118
121
|
if self.db_sqlmodel == Universe: # Ugly
|
|
122
|
+
print("Building Universe DB from ",self.local_path)
|
|
119
123
|
universe_create_db(Path(self.db_path))
|
|
120
124
|
ingest_metadata_universe(DBConnection(Path(self.db_path)),self.local_version)
|
|
125
|
+
print("Filling Universe DB")
|
|
121
126
|
ingest_universe(Path(self.local_path), Path(self.db_path))
|
|
122
127
|
|
|
123
128
|
elif self.db_sqlmodel == Project:
|
|
129
|
+
print("Building Project DB from ", self.local_path)
|
|
124
130
|
project_create_db(Path(self.db_path))
|
|
131
|
+
print("Filling project DB")
|
|
125
132
|
ingest_project(Path(self.local_path),Path(self.db_path),self.local_version)
|
|
126
133
|
self.fetch_version_db()
|
|
127
134
|
|
|
@@ -132,32 +139,32 @@ class BaseState:
|
|
|
132
139
|
|
|
133
140
|
def sync(self):
|
|
134
141
|
summary = self.check_sync_status()
|
|
142
|
+
|
|
135
143
|
if self.github_access and summary["github_db_sync"] is None and summary["local_db_sync"]is None and summary["github_local_sync"] is None:
|
|
136
144
|
self.clone_remote()
|
|
137
145
|
self.build_db()
|
|
138
146
|
elif self.github_access and not summary["github_db_sync"]:
|
|
147
|
+
|
|
139
148
|
if not summary["local_db_sync"] and summary["local_db_sync"] is not None:
|
|
140
149
|
self.clone_remote()
|
|
141
150
|
self.build_db()
|
|
151
|
+
elif not summary["github_local_sync"] and summary["github_local_sync"] is not None:
|
|
152
|
+
self.clone_remote()
|
|
153
|
+
self.build_db()
|
|
142
154
|
else: # can be simply build in root and clone if neccessary
|
|
143
155
|
self.build_db()
|
|
144
156
|
elif self.local_access:
|
|
145
|
-
if not summary["local_db_sync"] and summary is not None:
|
|
157
|
+
if not summary["local_db_sync"] and summary["local_db_sync"] is not None:
|
|
146
158
|
self.build_db()
|
|
159
|
+
else:
|
|
160
|
+
print("Cache db is uptodate from local repository")
|
|
147
161
|
elif not self.db_access: # it can happen if the db is created but not filled
|
|
148
162
|
self.build_db()
|
|
163
|
+
else:
|
|
164
|
+
print("Nothing to install, everything up to date")
|
|
165
|
+
print("Try 'esgvoc status' for more details")
|
|
149
166
|
|
|
150
167
|
|
|
151
|
-
"""
|
|
152
|
-
if self.github_version and self.github_version != self.local_version:
|
|
153
|
-
owner, repo = self.github_repo.lstrip("https://github.com/").split("/")
|
|
154
|
-
self.rf.clone_repository(owner, repo, self.branch)
|
|
155
|
-
#self.fetch_versions()
|
|
156
|
-
|
|
157
|
-
if self.local_version != self.db_version:
|
|
158
|
-
# delete and redo the DB?
|
|
159
|
-
pass
|
|
160
|
-
"""
|
|
161
168
|
class StateUniverse(BaseState):
|
|
162
169
|
def __init__(self, settings: UniverseSettings):
|
|
163
170
|
super().__init__(**settings.model_dump())
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: esgvoc
|
|
3
|
+
Version: 0.2.1
|
|
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.13,>=3.12
|
|
9
|
+
Requires-Dist: idna>=3.10
|
|
10
|
+
Requires-Dist: pydantic>=2.9.2
|
|
11
|
+
Requires-Dist: pyld>=2.0.4
|
|
12
|
+
Requires-Dist: requests>=2.32.3
|
|
13
|
+
Requires-Dist: sphinx-copybutton>=0.5.2
|
|
14
|
+
Requires-Dist: sphinx-tabs>=3.4.7
|
|
15
|
+
Requires-Dist: sqlalchemy>=2.0.36
|
|
16
|
+
Requires-Dist: sqlmodel>=0.0.22
|
|
17
|
+
Requires-Dist: toml>=0.10.2
|
|
18
|
+
Requires-Dist: typer>=0.15.0
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
|
|
21
|
+
# ESGVOC Library
|
|
22
|
+
|
|
23
|
+
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.).
|
|
24
|
+
|
|
25
|
+
Full documentation is available at [https://esgf.github.io/esgf-vocab/](https://esgf.github.io/esgf-vocab/).
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Features
|
|
30
|
+
|
|
31
|
+
- **Query controlled vocabularies**:
|
|
32
|
+
- Retrieve terms, collections, or descriptors.
|
|
33
|
+
- Perform cross-validation and search operations.
|
|
34
|
+
- Supports case-sensitive, wildcard, and approximate matching.
|
|
35
|
+
|
|
36
|
+
- **Caching**:
|
|
37
|
+
- Download CVs to a local database for offline use.
|
|
38
|
+
- Keep the local cache up-to-date.
|
|
39
|
+
|
|
40
|
+
- **Validation**:
|
|
41
|
+
- Validate strings against CV terms and templates.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Installation
|
|
46
|
+
|
|
47
|
+
ESGVOC is available on PyPI. Install it with pip:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
pip install esgvoc
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Following this command to install or update the latest CVs.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
esgvoc install
|
|
58
|
+
```
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
esgvoc/__init__.py,sha256=kPejgt5LFlzacS1O0vGN5JC7AlpRpWCmGIHUcBr_6-M,35
|
|
2
|
-
esgvoc/api/__init__.py,sha256=
|
|
2
|
+
esgvoc/api/__init__.py,sha256=eGYIcKbz0y4mmgEJtHf3EYAtp-iKaoTKDzHQCnILd9s,3327
|
|
3
3
|
esgvoc/api/_utils.py,sha256=eIVP7d3jbr7u_LNliLoM2Up3Zl5rcxIw_hjqLdfaxUA,1390
|
|
4
|
-
esgvoc/api/
|
|
5
|
-
esgvoc/api/
|
|
6
|
-
esgvoc/api/
|
|
7
|
-
esgvoc/api/
|
|
8
|
-
esgvoc/api/
|
|
4
|
+
esgvoc/api/project_specs.py,sha256=uX1zqvTC8Dj5bOegZQVMAqU1VOle01s_8ncPXvtp0J4,2328
|
|
5
|
+
esgvoc/api/projects.py,sha256=n6zXTjEJ8yXJEFri6YZ4RdhvPOtdxTSOOKMz7pdPCnM,40605
|
|
6
|
+
esgvoc/api/report.py,sha256=F6hs1cNnlH4OodQiko-jWO0Pu1ji0TrLFN_eFSADgyI,3341
|
|
7
|
+
esgvoc/api/search.py,sha256=XE7kAfDA9gAb_wYUm5viA0lT4-_L3P0hclerpU42Q1U,4097
|
|
8
|
+
esgvoc/api/universe.py,sha256=W9liJW2NPF7vYxgoOIute2o4aNNhYrtgd90l4iB3OY4,9643
|
|
9
|
+
esgvoc/api/data_descriptors/__init__.py,sha256=9XGHmSDsRmQPvu9WxtJy_lNxe-iabAfV6UxhfiPr3aA,3085
|
|
9
10
|
esgvoc/api/data_descriptors/activity.py,sha256=o-RlmAFJkIb9TkUZIjEJaHi9dnQ70GHH5-5bKACRwMI,1371
|
|
10
11
|
esgvoc/api/data_descriptors/consortium.py,sha256=fhAaEqxBpBDSmO7rIya1nnEz9aRyhQQFnIBExcyQxQM,1467
|
|
11
12
|
esgvoc/api/data_descriptors/date.py,sha256=q4YXqaEryrcXO3ndk4SwyKwn56iGuBiJbHs8JSUpXJU,781
|
|
13
|
+
esgvoc/api/data_descriptors/directory_date.py,sha256=uX89W68SqrX8iC52K1Voth6VI9T8UV5O13SrAWDRoiY,906
|
|
12
14
|
esgvoc/api/data_descriptors/experiment.py,sha256=DCPYhgGWgD7LKgheqreXKGd5_0pQ6a1GnJ17IDt5WXY,1838
|
|
13
15
|
esgvoc/api/data_descriptors/forcing_index.py,sha256=m2SBobNTN8P_TFS-uIwMyqbJ9d6CNr21bzW7qT3MVe0,796
|
|
14
16
|
esgvoc/api/data_descriptors/frequency.py,sha256=XIu1v5NIcaNKj-9K3WNa4jH_Lds5XO5CP4M79nNVuVE,842
|
|
@@ -31,15 +33,19 @@ esgvoc/api/data_descriptors/table.py,sha256=bhh-bSx7UYAAETmMAGNOIfwkyvywIhX0HlJh
|
|
|
31
33
|
esgvoc/api/data_descriptors/time_range.py,sha256=bBVRwmc7NEeGacV-UA0vadQXsyrlwBjyjVoYTw26rYA,630
|
|
32
34
|
esgvoc/api/data_descriptors/variable.py,sha256=2Y6MfDzRvLF3FR5bhhJ6jTmPc2NTZVsoGF1Y2SEGeLU,2145
|
|
33
35
|
esgvoc/api/data_descriptors/variant_label.py,sha256=ExP68t3v1xtjFEjOgVr2NFEOkQVGmf9GzStRlSPmNMU,931
|
|
34
|
-
esgvoc/apps/
|
|
35
|
-
esgvoc/apps/drs/
|
|
36
|
-
esgvoc/apps/drs/
|
|
37
|
-
esgvoc/
|
|
38
|
-
esgvoc/
|
|
36
|
+
esgvoc/apps/__init__.py,sha256=k_IDucNtxAJsP1RkDCwEkqTHZqMRhALBVCdD0J9qUbY,300
|
|
37
|
+
esgvoc/apps/drs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
esgvoc/apps/drs/constants.py,sha256=kZxFo7Aa8DNy3WBq2j0FuZVEqOyxG53ZAkkjQaObE8s,95
|
|
39
|
+
esgvoc/apps/drs/generator.py,sha256=BB-qHkpPNkZiLKOLC4DYB-os_1UlfVapB5EPmQezugI,22724
|
|
40
|
+
esgvoc/apps/drs/report.py,sha256=37ETMcnx56B30NQqGPVGKc4jDdfpAToh3W6UId9nd-Q,13720
|
|
41
|
+
esgvoc/apps/drs/validator.py,sha256=HlDKKS9Xfxr0vlA_-6NC6JTnqPpKnbd-dhjiBhCaMfM,14803
|
|
42
|
+
esgvoc/cli/config.py,sha256=BCRshQ8kdeTMv4b2uN4qaZoFrEi7k43mKJT79vitrP4,2951
|
|
43
|
+
esgvoc/cli/drs.py,sha256=C0TsBvcoK7C6dEhHpEcq9HpKSYFsqxDlUai_5e1NycI,8672
|
|
44
|
+
esgvoc/cli/get.py,sha256=dz_BsegIg9hSD1s11DREQiQq3DbXyneO4Kjs3dUPMgg,5134
|
|
39
45
|
esgvoc/cli/install.py,sha256=tJl9Z9UoBbRXK8dMAehTTHfH9aT6fAqtEX7tt5Wl0F8,236
|
|
40
|
-
esgvoc/cli/main.py,sha256=
|
|
41
|
-
esgvoc/cli/status.py,sha256
|
|
42
|
-
esgvoc/cli/valid.py,sha256=
|
|
46
|
+
esgvoc/cli/main.py,sha256=Yx5hWVl11GEu44vug_udmia-lr8j0AzZjtZOesKdNIY,557
|
|
47
|
+
esgvoc/cli/status.py,sha256=-IG41NorXwE2C6YD3RHFKNBLsCqpcVBovKyLJ9MXgSM,1312
|
|
48
|
+
esgvoc/cli/valid.py,sha256=QO2RJhBDFUKNL9PCBt6CrLp2FBNwnQ2yRlAWBgcjOtI,6909
|
|
43
49
|
esgvoc/core/constants.py,sha256=b9GoM3pTICki95gMCnUZbg4_mMiywKhJX5ME01pgwMs,431
|
|
44
50
|
esgvoc/core/convert.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
51
|
esgvoc/core/data_handler.py,sha256=BmcD_dSvX5fCkUEGAQnadPTeuKA7IvgMmQtesMXKh5g,5004
|
|
@@ -48,19 +54,20 @@ esgvoc/core/logging_handler.py,sha256=NhqKX2nFYVi01EhZPysFZ4UWBWJwgxafC_pWtd28Yl
|
|
|
48
54
|
esgvoc/core/repo_fetcher.py,sha256=m0Qh2kBAa-ij2ZJ7uEYYW-CakoLs5deFHl7zniLgW5Y,9738
|
|
49
55
|
esgvoc/core/db/__init__.py,sha256=gjAT_lUJtPqxsc8WnwbG_sxDqSIFAlG8vEKxdGyH82w,150
|
|
50
56
|
esgvoc/core/db/connection.py,sha256=dhnCy1mwytUUvt149WHk7eYW0KSP64IaF3kMvKOQSJE,877
|
|
51
|
-
esgvoc/core/db/project_ingestion.py,sha256=
|
|
52
|
-
esgvoc/core/db/universe_ingestion.py,sha256=
|
|
53
|
-
esgvoc/core/db/models/mixins.py,sha256=
|
|
54
|
-
esgvoc/core/db/models/project.py,sha256=
|
|
57
|
+
esgvoc/core/db/project_ingestion.py,sha256=sVtQFg-gF6TTYjEPasqk2Ox4V4Al8rrd1Q_A6Zvn18U,6330
|
|
58
|
+
esgvoc/core/db/universe_ingestion.py,sha256=K1IeMlQ0SoAH0HgXNwzj9Z3qR0KLsGIfrca8a5PTvWM,5197
|
|
59
|
+
esgvoc/core/db/models/mixins.py,sha256=S4_6iuKf1kYLdUXAgqRKSTXs8H9I--43MKlEq4F-dm4,445
|
|
60
|
+
esgvoc/core/db/models/project.py,sha256=tuVcwNOkv0fQLFojpQCWacpnM7ZIX3eMDq6Mnko5OI0,2284
|
|
55
61
|
esgvoc/core/db/models/universe.py,sha256=32oWFvzqqFr86M14phbfvfmEzlldi3DSTAALjTigR_8,2199
|
|
56
62
|
esgvoc/core/service/__init__.py,sha256=ByAE1LhD5cKIcwrSIH0Y___KP2Ewh55P57sAMQ4CHeM,308
|
|
57
63
|
esgvoc/core/service/data_merger.py,sha256=GNFp5DTV2jlBVJZNpILngi6jCbUvVGcqka4EMWKj_Os,3456
|
|
58
64
|
esgvoc/core/service/esg_voc.py,sha256=5G0P4_xmQzoI_RG_agpq-yHoYYZx220P27v2nPrpyNs,2420
|
|
59
|
-
esgvoc/core/service/settings.py,sha256=
|
|
60
|
-
esgvoc/core/service/settings.toml,sha256=
|
|
61
|
-
esgvoc/core/service/settings_default.toml,sha256=
|
|
62
|
-
esgvoc/core/service/state.py,sha256=
|
|
63
|
-
esgvoc-0.1.
|
|
64
|
-
esgvoc-0.1.
|
|
65
|
-
esgvoc-0.1.
|
|
66
|
-
esgvoc-0.1.
|
|
65
|
+
esgvoc/core/service/settings.py,sha256=bFAEX1k866jLrp4gQRmls5v7eL2bjuECHx3cll-CC80,2471
|
|
66
|
+
esgvoc/core/service/settings.toml,sha256=NSd-d_OyK7hOfG8zltUXK4XP1d79GEu09eK8JI9z9y8,551
|
|
67
|
+
esgvoc/core/service/settings_default.toml,sha256=NSd-d_OyK7hOfG8zltUXK4XP1d79GEu09eK8JI9z9y8,551
|
|
68
|
+
esgvoc/core/service/state.py,sha256=nppULtefcpahpHOOkOxayJ5Hp8u-pA2VBYfx5P9wMWE,9676
|
|
69
|
+
esgvoc-0.2.1.dist-info/METADATA,sha256=50Q2tsO63h1I7-FZ1w_xIAUpA2dKHtUjB3-Wzk8cfY8,1928
|
|
70
|
+
esgvoc-0.2.1.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
71
|
+
esgvoc-0.2.1.dist-info/entry_points.txt,sha256=ZXufSC7Jlx1lb52U6Buv9IitJMcqAAXOerR2V9DaIto,48
|
|
72
|
+
esgvoc-0.2.1.dist-info/licenses/LICENSE.txt,sha256=rWJoZt3vach8ZNdLq-Ee5djzCMFnJ1gIfBeJU5RIop4,21782
|
|
73
|
+
esgvoc-0.2.1.dist-info/RECORD,,
|