esgvoc 0.4.0__py3-none-any.whl → 1.0.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.
- esgvoc/__init__.py +1 -1
- esgvoc/api/data_descriptors/__init__.py +50 -28
- esgvoc/api/data_descriptors/activity.py +3 -3
- esgvoc/api/data_descriptors/area_label.py +16 -1
- esgvoc/api/data_descriptors/branded_suffix.py +20 -0
- esgvoc/api/data_descriptors/branded_variable.py +12 -0
- esgvoc/api/data_descriptors/consortium.py +14 -13
- esgvoc/api/data_descriptors/contact.py +5 -0
- esgvoc/api/data_descriptors/conventions.py +6 -0
- esgvoc/api/data_descriptors/creation_date.py +5 -0
- esgvoc/api/data_descriptors/data_descriptor.py +14 -9
- esgvoc/api/data_descriptors/data_specs_version.py +5 -0
- esgvoc/api/data_descriptors/date.py +1 -1
- esgvoc/api/data_descriptors/directory_date.py +1 -1
- esgvoc/api/data_descriptors/experiment.py +13 -11
- esgvoc/api/data_descriptors/forcing_index.py +1 -1
- esgvoc/api/data_descriptors/frequency.py +3 -3
- esgvoc/api/data_descriptors/further_info_url.py +5 -0
- esgvoc/api/data_descriptors/grid_label.py +2 -2
- esgvoc/api/data_descriptors/horizontal_label.py +15 -1
- esgvoc/api/data_descriptors/initialisation_index.py +1 -1
- esgvoc/api/data_descriptors/institution.py +8 -5
- esgvoc/api/data_descriptors/known_branded_variable.py +23 -0
- esgvoc/api/data_descriptors/license.py +3 -3
- esgvoc/api/data_descriptors/mip_era.py +1 -1
- esgvoc/api/data_descriptors/model_component.py +1 -1
- esgvoc/api/data_descriptors/obs_type.py +5 -0
- esgvoc/api/data_descriptors/organisation.py +1 -1
- esgvoc/api/data_descriptors/physic_index.py +1 -1
- esgvoc/api/data_descriptors/product.py +2 -2
- esgvoc/api/data_descriptors/publication_status.py +5 -0
- esgvoc/api/data_descriptors/realisation_index.py +1 -1
- esgvoc/api/data_descriptors/realm.py +1 -1
- esgvoc/api/data_descriptors/region.py +5 -0
- esgvoc/api/data_descriptors/resolution.py +3 -3
- esgvoc/api/data_descriptors/source.py +9 -5
- esgvoc/api/data_descriptors/source_type.py +1 -1
- esgvoc/api/data_descriptors/table.py +3 -2
- esgvoc/api/data_descriptors/temporal_label.py +15 -1
- esgvoc/api/data_descriptors/time_range.py +4 -3
- esgvoc/api/data_descriptors/title.py +5 -0
- esgvoc/api/data_descriptors/tracking_id.py +5 -0
- esgvoc/api/data_descriptors/variable.py +25 -12
- esgvoc/api/data_descriptors/variant_label.py +3 -3
- esgvoc/api/data_descriptors/vertical_label.py +14 -0
- esgvoc/api/project_specs.py +117 -2
- esgvoc/api/projects.py +242 -279
- esgvoc/api/search.py +30 -3
- esgvoc/api/universe.py +42 -27
- esgvoc/apps/jsg/cmip6_template.json +74 -0
- esgvoc/apps/jsg/cmip6plus_template.json +74 -0
- esgvoc/apps/jsg/json_schema_generator.py +185 -0
- esgvoc/cli/config.py +500 -0
- esgvoc/cli/find.py +138 -0
- esgvoc/cli/get.py +43 -38
- esgvoc/cli/main.py +10 -3
- esgvoc/cli/status.py +27 -18
- esgvoc/cli/valid.py +10 -15
- esgvoc/core/db/models/project.py +11 -11
- esgvoc/core/db/models/universe.py +3 -3
- esgvoc/core/db/project_ingestion.py +40 -40
- esgvoc/core/db/universe_ingestion.py +36 -33
- esgvoc/core/logging_handler.py +24 -2
- esgvoc/core/repo_fetcher.py +61 -59
- esgvoc/core/service/data_merger.py +47 -34
- esgvoc/core/service/state.py +107 -83
- {esgvoc-0.4.0.dist-info → esgvoc-1.0.0.dist-info}/METADATA +7 -20
- esgvoc-1.0.0.dist-info/RECORD +95 -0
- esgvoc/core/logging.conf +0 -21
- esgvoc-0.4.0.dist-info/RECORD +0 -80
- {esgvoc-0.4.0.dist-info → esgvoc-1.0.0.dist-info}/WHEEL +0 -0
- {esgvoc-0.4.0.dist-info → esgvoc-1.0.0.dist-info}/entry_points.txt +0 -0
- {esgvoc-0.4.0.dist-info → esgvoc-1.0.0.dist-info}/licenses/LICENSE.txt +0 -0
esgvoc/core/service/state.py
CHANGED
|
@@ -3,58 +3,61 @@ import os
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Optional
|
|
5
5
|
|
|
6
|
-
from esgvoc.core.repo_fetcher import RepoFetcher
|
|
7
|
-
from esgvoc.core.service.configuration.setting import UniverseSettings, ProjectSettings, ServiceSettings
|
|
8
|
-
from esgvoc.core.db.connection import DBConnection
|
|
9
|
-
|
|
10
6
|
from rich.table import Table
|
|
11
7
|
from sqlalchemy.exc import NoResultFound
|
|
12
8
|
from sqlmodel import select
|
|
13
|
-
from esgvoc.core.db.models.universe import Universe
|
|
14
|
-
from esgvoc.core.db.models.project import Project
|
|
15
9
|
|
|
10
|
+
from esgvoc.core.db.connection import DBConnection
|
|
11
|
+
from esgvoc.core.db.models.project import Project
|
|
12
|
+
from esgvoc.core.db.models.universe import Universe
|
|
13
|
+
from esgvoc.core.repo_fetcher import RepoFetcher
|
|
14
|
+
from esgvoc.core.service.configuration.setting import (ProjectSettings,
|
|
15
|
+
ServiceSettings,
|
|
16
|
+
UniverseSettings)
|
|
16
17
|
|
|
17
18
|
logger = logging.getLogger(__name__)
|
|
18
19
|
|
|
20
|
+
|
|
19
21
|
class BaseState:
|
|
20
|
-
def __init__(
|
|
21
|
-
|
|
22
|
+
def __init__(
|
|
23
|
+
self, github_repo: str, branch: str = "main", local_path: Optional[str] = None, db_path: Optional[str] = None
|
|
24
|
+
):
|
|
22
25
|
from esgvoc.core.service import config_manager
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
self.
|
|
27
|
-
self.
|
|
28
|
-
self.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
self.
|
|
32
|
-
self.
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
self.
|
|
36
|
-
self.
|
|
37
|
-
|
|
26
|
+
|
|
27
|
+
self.base_dir = config_manager.data_config_dir # needed for repofetcher
|
|
28
|
+
|
|
29
|
+
self.github_repo: str = github_repo
|
|
30
|
+
self.branch: str = branch
|
|
31
|
+
self.github_access: bool = True # False if we dont have internet and some other cases
|
|
32
|
+
self.github_version: str | None = None
|
|
33
|
+
|
|
34
|
+
self.local_path: str | None = self._get_absolute_path(str(self.base_dir), local_path)
|
|
35
|
+
self.local_access: bool = True # False if we dont have cloned the remote repo yet
|
|
36
|
+
self.local_version: str | None = None
|
|
37
|
+
|
|
38
|
+
self.db_path: str | None = self._get_absolute_path(str(self.base_dir), db_path)
|
|
39
|
+
self.db_access: bool = True # False if we cant access the db for some reason
|
|
40
|
+
self.db_version: str | None = None
|
|
41
|
+
|
|
38
42
|
self.rf = RepoFetcher(local_path=str(self.base_dir))
|
|
39
|
-
self.db_connection:DBConnection|None = None
|
|
40
|
-
self.db_sqlmodel
|
|
43
|
+
self.db_connection: DBConnection | None = None
|
|
44
|
+
self.db_sqlmodel: Universe | Project | None = None
|
|
41
45
|
|
|
42
|
-
def _get_absolute_path(self,base_dir:str,path:str|None)->str|None:
|
|
43
|
-
if base_dir !="" and path is not None:
|
|
44
|
-
return base_dir + "/"+ path
|
|
46
|
+
def _get_absolute_path(self, base_dir: str, path: str | None) -> str | None:
|
|
47
|
+
if base_dir != "" and path is not None:
|
|
48
|
+
return base_dir + "/" + path
|
|
45
49
|
if base_dir == "":
|
|
46
50
|
return path
|
|
47
51
|
|
|
48
|
-
|
|
49
52
|
def fetch_version_local(self):
|
|
50
|
-
|
|
53
|
+
if self.local_path:
|
|
51
54
|
try:
|
|
52
55
|
self.local_version = self.rf.get_local_repo_version(self.local_path, self.branch)
|
|
53
56
|
logger.debug(f"Local repo commit: {self.local_version}")
|
|
54
57
|
self.local_access = True
|
|
55
58
|
except Exception as e:
|
|
56
59
|
logger.exception(f"Failed to fetch local repo version: {e}")
|
|
57
|
-
self.local_access=False
|
|
60
|
+
self.local_access = False
|
|
58
61
|
|
|
59
62
|
def fetch_version_remote(self):
|
|
60
63
|
if self.github_repo:
|
|
@@ -62,18 +65,27 @@ class BaseState:
|
|
|
62
65
|
repo = None
|
|
63
66
|
try:
|
|
64
67
|
owner, repo = self.github_repo.lstrip("https://github.com/").split("/")
|
|
65
|
-
self.github_version = self.rf.get_github_version(owner, repo, self.branch)
|
|
68
|
+
self.github_version = self.rf.get_github_version(owner, repo, self.branch)
|
|
66
69
|
self.github_access = True
|
|
67
70
|
logger.debug(f"Latest GitHub commit: {self.github_version}")
|
|
68
71
|
except IndexError as e:
|
|
69
72
|
self.github_access = False
|
|
70
73
|
except Exception as e:
|
|
71
|
-
logger.exception(
|
|
74
|
+
logger.exception(
|
|
75
|
+
f"Failed to fetch GitHub version: {e} ,for {self.github_repo},owner : {owner}, repo : {repo},branch : {self.branch}"
|
|
76
|
+
)
|
|
72
77
|
self.github_access = False
|
|
73
|
-
|
|
78
|
+
|
|
74
79
|
if self.github_version is None:
|
|
75
80
|
self.github_access = False
|
|
76
81
|
|
|
82
|
+
def connect_db(self):
|
|
83
|
+
if self.db_path:
|
|
84
|
+
if not os.path.exists(self.db_path):
|
|
85
|
+
self.db_access = False
|
|
86
|
+
else:
|
|
87
|
+
self.db_connection = DBConnection(db_file_path=Path(self.db_path))
|
|
88
|
+
|
|
77
89
|
def fetch_version_db(self):
|
|
78
90
|
if self.db_path:
|
|
79
91
|
if not os.path.exists(self.db_path):
|
|
@@ -81,63 +93,66 @@ class BaseState:
|
|
|
81
93
|
self.db_access = False
|
|
82
94
|
else:
|
|
83
95
|
try:
|
|
84
|
-
self.db_connection = DBConnection(db_file_path= Path(self.db_path))
|
|
85
96
|
with self.db_connection.create_session() as session:
|
|
86
97
|
self.db_version = session.exec(select(self.db_sqlmodel.git_hash)).one()
|
|
87
98
|
self.db_access = True
|
|
88
|
-
except NoResultFound
|
|
99
|
+
except NoResultFound:
|
|
89
100
|
logger.debug(f"Unable to find git_hash in {self.db_path}")
|
|
90
101
|
except Exception as e:
|
|
91
|
-
logger.debug(f"Unable to find git_has in {self.db_path} cause {e}"
|
|
102
|
+
logger.debug(f"Unable to find git_has in {self.db_path} cause {e}")
|
|
92
103
|
|
|
93
104
|
else:
|
|
94
105
|
self.db_version = None
|
|
95
106
|
self.db_access = False
|
|
96
107
|
|
|
97
|
-
|
|
98
108
|
def fetch_versions(self):
|
|
99
109
|
if self.github_access:
|
|
100
110
|
self.fetch_version_remote()
|
|
101
111
|
self.fetch_version_local()
|
|
102
112
|
self.fetch_version_db()
|
|
103
|
-
|
|
113
|
+
|
|
104
114
|
def check_sync_status(self):
|
|
105
115
|
self.fetch_versions()
|
|
106
116
|
return {
|
|
107
|
-
"github"
|
|
117
|
+
"github": self.github_version if self.github_version else None,
|
|
108
118
|
"local": self.local_version if self.local_version else None,
|
|
109
|
-
"db"
|
|
110
|
-
"github_local_sync": self.github_version == self.local_version
|
|
111
|
-
|
|
112
|
-
|
|
119
|
+
"db": self.db_version if self.db_version else None,
|
|
120
|
+
"github_local_sync": self.github_version == self.local_version
|
|
121
|
+
if self.github_access and self.github_version and self.local_version
|
|
122
|
+
else False,
|
|
123
|
+
"local_db_sync": self.local_version == self.db_version
|
|
124
|
+
if self.local_access and self.local_version
|
|
125
|
+
else False,
|
|
126
|
+
"github_db_sync": self.github_version == self.db_version
|
|
127
|
+
if self.github_access and self.github_version
|
|
128
|
+
else False,
|
|
113
129
|
}
|
|
114
130
|
|
|
115
131
|
def clone_remote(self):
|
|
116
132
|
owner, repo = self.github_repo.lstrip("https://github.com/").split("/")
|
|
117
|
-
#TODO add destination "local_path" in clone_repo, done in a wierd way Improve that:
|
|
133
|
+
# TODO add destination "local_path" in clone_repo, done in a wierd way Improve that:
|
|
118
134
|
self.rf.clone_repository(owner, repo, self.branch, self.local_path)
|
|
119
135
|
self.fetch_version_local()
|
|
120
|
-
|
|
121
|
-
|
|
136
|
+
|
|
122
137
|
def build_db(self):
|
|
123
|
-
from esgvoc.core.db.project_ingestion import ingest_project
|
|
124
|
-
from esgvoc.core.db.universe_ingestion import ingest_metadata_universe
|
|
125
138
|
from esgvoc.core.db.models.project import project_create_db
|
|
126
|
-
from esgvoc.core.db.models.universe import universe_create_db
|
|
127
|
-
from esgvoc.core.db.
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
from esgvoc.core.db.models.universe import universe_create_db
|
|
140
|
+
from esgvoc.core.db.project_ingestion import ingest_project
|
|
141
|
+
from esgvoc.core.db.universe_ingestion import (
|
|
142
|
+
ingest_metadata_universe, ingest_universe)
|
|
143
|
+
|
|
144
|
+
if self.db_path:
|
|
130
145
|
if os.path.exists(self.db_path):
|
|
131
146
|
os.remove(self.db_path)
|
|
132
147
|
else:
|
|
133
|
-
os.makedirs(Path(self.db_path).parent,exist_ok=True)
|
|
148
|
+
os.makedirs(Path(self.db_path).parent, exist_ok=True)
|
|
134
149
|
|
|
135
|
-
if self.db_sqlmodel == Universe:
|
|
136
|
-
print("Building Universe DB from ",self.local_path)
|
|
150
|
+
if self.db_sqlmodel == Universe: # Ugly
|
|
151
|
+
print("Building Universe DB from ", self.local_path)
|
|
137
152
|
universe_create_db(Path(self.db_path))
|
|
138
|
-
self.db_connection = DBConnection(db_file_path=
|
|
153
|
+
self.db_connection = DBConnection(db_file_path=Path(self.db_path))
|
|
139
154
|
|
|
140
|
-
ingest_metadata_universe(self.db_connection,self.local_version)
|
|
155
|
+
ingest_metadata_universe(self.db_connection, self.local_version)
|
|
141
156
|
print("Filling Universe DB")
|
|
142
157
|
if self.local_path:
|
|
143
158
|
ingest_universe(Path(self.local_path), Path(self.db_path))
|
|
@@ -147,42 +162,45 @@ class BaseState:
|
|
|
147
162
|
project_create_db(Path(self.db_path))
|
|
148
163
|
print("Filling project DB")
|
|
149
164
|
if self.local_path and self.local_version:
|
|
150
|
-
ingest_project(Path(self.local_path),Path(self.db_path),self.local_version)
|
|
165
|
+
ingest_project(Path(self.local_path), Path(self.db_path), self.local_version)
|
|
151
166
|
self.fetch_version_db()
|
|
152
167
|
|
|
153
|
-
|
|
154
|
-
|
|
155
168
|
def sync(self):
|
|
156
169
|
summary = self.check_sync_status()
|
|
157
|
-
if
|
|
170
|
+
if (
|
|
171
|
+
self.github_access
|
|
172
|
+
and summary["github_db_sync"] is None
|
|
173
|
+
and summary["local_db_sync"] is None
|
|
174
|
+
and summary["github_local_sync"] is None
|
|
175
|
+
):
|
|
158
176
|
self.clone_remote()
|
|
159
177
|
self.build_db()
|
|
160
178
|
elif self.github_access and not summary["github_db_sync"]:
|
|
161
|
-
|
|
162
179
|
if not summary["local_db_sync"] and summary["local_db_sync"] is not None:
|
|
163
180
|
self.clone_remote()
|
|
164
181
|
self.build_db()
|
|
165
|
-
elif not summary["github_local_sync"]
|
|
182
|
+
elif not summary["github_local_sync"]:
|
|
166
183
|
self.clone_remote()
|
|
167
184
|
self.build_db()
|
|
168
|
-
else:
|
|
185
|
+
else: # can be simply build in root and clone if neccessary
|
|
169
186
|
self.build_db()
|
|
170
187
|
elif self.local_access:
|
|
171
188
|
if not summary["local_db_sync"] and summary["local_db_sync"] is not None:
|
|
172
189
|
self.build_db()
|
|
173
190
|
else:
|
|
174
191
|
print("Cache db is uptodate from local repository")
|
|
175
|
-
elif not self.db_access:
|
|
192
|
+
elif not self.db_access: # it can happen if the db is created but not filled
|
|
176
193
|
self.build_db()
|
|
177
194
|
else:
|
|
178
195
|
print("Nothing to install, everything up to date")
|
|
179
196
|
print("Try 'esgvoc status' for more details")
|
|
180
|
-
|
|
197
|
+
|
|
181
198
|
|
|
182
199
|
class StateUniverse(BaseState):
|
|
183
200
|
def __init__(self, settings: UniverseSettings):
|
|
184
201
|
super().__init__(**settings.model_dump())
|
|
185
|
-
self.db_sqlmodel=Universe
|
|
202
|
+
self.db_sqlmodel = Universe
|
|
203
|
+
|
|
186
204
|
|
|
187
205
|
class StateProject(BaseState):
|
|
188
206
|
def __init__(self, settings: ProjectSettings):
|
|
@@ -191,45 +209,52 @@ class StateProject(BaseState):
|
|
|
191
209
|
super().__init__(**mdict)
|
|
192
210
|
self.db_sqlmodel = Project
|
|
193
211
|
|
|
212
|
+
|
|
194
213
|
class StateService:
|
|
195
214
|
def __init__(self, service_settings: ServiceSettings):
|
|
196
|
-
self.universe= StateUniverse(service_settings.universe)
|
|
215
|
+
self.universe = StateUniverse(service_settings.universe)
|
|
197
216
|
self.projects = {name: StateProject(proj) for name, proj in service_settings.projects.items()}
|
|
198
217
|
self.connect_db()
|
|
199
|
-
|
|
218
|
+
|
|
200
219
|
def get_state_summary(self):
|
|
201
220
|
universe_status = self.universe.check_sync_status()
|
|
202
221
|
project_statuses = {name: proj.check_sync_status() for name, proj in self.projects.items()}
|
|
203
222
|
return {"universe": universe_status, "projects": project_statuses}
|
|
204
223
|
|
|
205
|
-
def
|
|
224
|
+
def fetch_versions(self):
|
|
206
225
|
self.universe.fetch_versions()
|
|
207
|
-
for _,proj_state in self.projects.items():
|
|
226
|
+
for _, proj_state in self.projects.items():
|
|
208
227
|
proj_state.fetch_versions()
|
|
209
228
|
|
|
229
|
+
def connect_db(self):
|
|
230
|
+
self.universe.connect_db()
|
|
231
|
+
for _, proj_state in self.projects.items():
|
|
232
|
+
proj_state.connect_db()
|
|
233
|
+
|
|
210
234
|
def synchronize_all(self):
|
|
211
235
|
print("sync universe")
|
|
212
236
|
self.universe.sync()
|
|
213
237
|
print("sync projects")
|
|
214
238
|
for project in self.projects.values():
|
|
215
239
|
project.sync()
|
|
240
|
+
self.connect_db()
|
|
216
241
|
|
|
217
242
|
def table(self):
|
|
218
243
|
table = Table(show_header=False, show_lines=True)
|
|
219
|
-
table.add_row("","Remote github repo","Local repository","Cache Database")
|
|
220
|
-
table.add_row("Universe path",self.universe.github_repo,self.universe.local_path,self.universe.db_path)
|
|
221
|
-
table.add_row("Version",self.universe.github_version,self.universe.local_version,self.universe.db_version)
|
|
222
|
-
for proj_name,proj in self.projects.items():
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
table.add_row(
|
|
226
|
-
table.add_row("Version",proj.github_version,proj.local_version,proj.db_version)
|
|
244
|
+
table.add_row("", "Remote github repo", "Local repository", "Cache Database")
|
|
245
|
+
table.add_row("Universe path", self.universe.github_repo, self.universe.local_path, self.universe.db_path)
|
|
246
|
+
table.add_row("Version", self.universe.github_version, self.universe.local_version, self.universe.db_version)
|
|
247
|
+
for proj_name, proj in self.projects.items():
|
|
248
|
+
# table.add_row("","Remote github repo","Local repository","Cache Database")
|
|
249
|
+
table.add_row(f"{proj_name} path", proj.github_repo, proj.local_path, proj.db_path)
|
|
250
|
+
table.add_row("Version", proj.github_version, proj.local_version, proj.db_version)
|
|
227
251
|
return table
|
|
228
252
|
|
|
253
|
+
|
|
229
254
|
if __name__ == "__main__":
|
|
230
255
|
# Load settings from file
|
|
231
256
|
service_settings = ServiceSettings.load_from_file("src/esgvoc/core/service/settings.toml")
|
|
232
|
-
|
|
257
|
+
|
|
233
258
|
# Initialize StateService
|
|
234
259
|
state_service = StateService(service_settings)
|
|
235
260
|
state_service.get_state_summary()
|
|
@@ -241,6 +266,5 @@ if __name__ == "__main__":
|
|
|
241
266
|
# pprint(state_service.universe.local_version)
|
|
242
267
|
# pprint(state_service.universe.db_version)
|
|
243
268
|
|
|
244
|
-
|
|
245
269
|
# Check for differences
|
|
246
|
-
#pprint(state_service.find_version_differences())
|
|
270
|
+
# pprint(state_service.find_version_differences())
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: esgvoc
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: python library and CLI to interact with WCRP CVs
|
|
5
5
|
Project-URL: Repository, https://github.com/ESGF/esgf-vocab
|
|
6
6
|
Author-email: Sébastien Gardoll <sebastien@gardoll.fr>, Guillaume Levavasseur <guillaume.levavasseur@ipsl.fr>, Laurent Troussellier <laurent.troussellier@ipsl.fr>
|
|
7
7
|
License: CECILL-2.1
|
|
8
|
-
Requires-Python:
|
|
8
|
+
Requires-Python: >=3.10
|
|
9
9
|
Requires-Dist: idna>=3.10
|
|
10
10
|
Requires-Dist: platformdirs>=4.3.6
|
|
11
11
|
Requires-Dist: pydantic>=2.9.2
|
|
@@ -58,32 +58,19 @@ esgvoc install
|
|
|
58
58
|
|
|
59
59
|
## How to contribute
|
|
60
60
|
|
|
61
|
-
### Install Python dev environment
|
|
62
|
-
|
|
63
61
|
* Pip
|
|
64
62
|
|
|
65
63
|
```bash
|
|
66
64
|
pip install -e .
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
* Rye
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
rye sync
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Linters & code formatters
|
|
76
|
-
|
|
77
|
-
* Pip
|
|
78
|
-
|
|
79
|
-
```bash
|
|
65
|
+
wily setup
|
|
80
66
|
pip install pre-commit
|
|
81
67
|
pre-commit install
|
|
82
68
|
```
|
|
83
69
|
|
|
84
|
-
*
|
|
70
|
+
* UV
|
|
85
71
|
|
|
86
72
|
```bash
|
|
87
|
-
|
|
88
|
-
|
|
73
|
+
uv sync
|
|
74
|
+
uv run wily setup
|
|
75
|
+
uv run pre-commit install
|
|
89
76
|
```
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
esgvoc/__init__.py,sha256=SqCq76RHIi9JrIf0WMxBBDxi9xz8C0CekkD81FYCr3U,66
|
|
2
|
+
esgvoc/api/__init__.py,sha256=w68CdVRS553bDWezZoCTxIFq_vsP7mFluSoO4yUo_Uc,4130
|
|
3
|
+
esgvoc/api/project_specs.py,sha256=ZvDAVn3-ZFpReCozK-_cVt6Sqkwrwww0X4vKUoxr1I4,5502
|
|
4
|
+
esgvoc/api/projects.py,sha256=WCHI0bV0U4KSV4AfilI1_bLDnb3zJRgn6WzYQpkywCg,53826
|
|
5
|
+
esgvoc/api/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
esgvoc/api/report.py,sha256=OlK5ApnaikMKmC6FyJ1uTSBeTezZe85yTCJwsk14uZE,3526
|
|
7
|
+
esgvoc/api/search.py,sha256=C4IRhfNezSV6ztwMXo-P8W_41qIPiO5nQXdU9etPy3k,7595
|
|
8
|
+
esgvoc/api/universe.py,sha256=i3bSIwUvO8S3COLvn_fz2K9Diegfeniccwx6QZXzIGc,22842
|
|
9
|
+
esgvoc/api/data_descriptors/__init__.py,sha256=_4aUux2mvtlGn7icu8Ncm7tkLdJlpsB_MTRtg3IcDaQ,4334
|
|
10
|
+
esgvoc/api/data_descriptors/activity.py,sha256=uu7e-fNvk_0oOOrtVWujDIBbF88fvhqwUfqYS_2Fabs,621
|
|
11
|
+
esgvoc/api/data_descriptors/area_label.py,sha256=Vyny3nmESGLOTVhGCE1iJbdITpN_wvB_onKy44dsVRY,842
|
|
12
|
+
esgvoc/api/data_descriptors/branded_suffix.py,sha256=jliXbvygKjcxqipalRZT694nXGVUp0k4uAORzMX9B0I,822
|
|
13
|
+
esgvoc/api/data_descriptors/branded_variable.py,sha256=1ZELmysGUQfid0Njef1rGlWZCvuordpT6bVMC5kZI4Q,698
|
|
14
|
+
esgvoc/api/data_descriptors/consortium.py,sha256=-pyzpxXIbB-GZlF_sAMH6vl6pecp9q7bMfUruAjHEsM,812
|
|
15
|
+
esgvoc/api/data_descriptors/contact.py,sha256=q1tNm8VcG7xvv4ophVIuy58_2y-rSozs86c7_gMupdk,135
|
|
16
|
+
esgvoc/api/data_descriptors/conventions.py,sha256=DUFq9sxu3CT7IoJOHJKMN9ACg5oeCebEdlVGJD_6smo,161
|
|
17
|
+
esgvoc/api/data_descriptors/creation_date.py,sha256=56siT7-AOSBQ8RMkD9nxBUql43uyutWuFQFTjXETzaA,140
|
|
18
|
+
esgvoc/api/data_descriptors/data_descriptor.py,sha256=obRJ4VnbJhVmK5dw85iMc5vsBCaPF40ZM16oxjZHHes,3134
|
|
19
|
+
esgvoc/api/data_descriptors/data_specs_version.py,sha256=UlAWiQ7WuzdiFcRkekG4YKWmgyMJq4AeFwl6rUjCeiM,144
|
|
20
|
+
esgvoc/api/data_descriptors/date.py,sha256=mkWivY0orl0wha38sMamrVbUbdZks-iUS_Wf6Gqz0-4,132
|
|
21
|
+
esgvoc/api/data_descriptors/directory_date.py,sha256=nGanDZqmFzeK7yZttWwov7OsK1HxhEN1mW2ALcKwtvA,141
|
|
22
|
+
esgvoc/api/data_descriptors/experiment.py,sha256=ITNNlY75DzRqEyEv0QS2DaqxtAGdG4mImuNrkryb8mI,1089
|
|
23
|
+
esgvoc/api/data_descriptors/forcing_index.py,sha256=EYUFK4FnctBVAaOarmTDiuJMnrSYFKQ1aVEYqQpH-bk,140
|
|
24
|
+
esgvoc/api/data_descriptors/frequency.py,sha256=E_IR3GTUEwtRt43wcroju-e_Uti4dI-swaJk8ldqowE,192
|
|
25
|
+
esgvoc/api/data_descriptors/further_info_url.py,sha256=9z8_WNjcUm1XTEe7WpBUZmgoQ8EosjkVPw-AP_993cA,142
|
|
26
|
+
esgvoc/api/data_descriptors/grid_label.py,sha256=4bMvUYVJ2cBSu4J9BU8rdjWiKsptUGQQJlsdnJIASco,195
|
|
27
|
+
esgvoc/api/data_descriptors/horizontal_label.py,sha256=7yqpkWbtrj1559PNdVYMSup7I9QNjCwlakFoI8aLBjM,855
|
|
28
|
+
esgvoc/api/data_descriptors/initialisation_index.py,sha256=VjgIHq1j7xoR5VvMW_eFR9l2_UJMhyqCgS3ZNnJH4lY,147
|
|
29
|
+
esgvoc/api/data_descriptors/institution.py,sha256=dUqyMS_HsLz72dvE4-9ZTIoF3QBXDKASC3OKoFX4S8w,547
|
|
30
|
+
esgvoc/api/data_descriptors/known_branded_variable.py,sha256=IXeMgxkCPWssSuNU56O7GU6oOjJ-hju03ZKpDg0gz7Q,834
|
|
31
|
+
esgvoc/api/data_descriptors/license.py,sha256=BQK8GcbGYuXHSei_CxXlbUct3SM0G15waJDEc6jyr7o,180
|
|
32
|
+
esgvoc/api/data_descriptors/mip_era.py,sha256=ubxwqJL8xPgCZu7bmjg-vvphBlG_aqogwE-ewu3lB2Q,176
|
|
33
|
+
esgvoc/api/data_descriptors/model_component.py,sha256=erKMHqSbZcVDsCPcSebIIMRTtgZToTdKEGQ8vB_zzYs,226
|
|
34
|
+
esgvoc/api/data_descriptors/obs_type.py,sha256=uVbxIMFoYs9ySJ-unhOoW0h0ljdWsBNwYfwmlXOSRe8,143
|
|
35
|
+
esgvoc/api/data_descriptors/organisation.py,sha256=t0lc_8Kmw_curtjhG2WsvKf1Swplte9n6n0_PK0iiO4,136
|
|
36
|
+
esgvoc/api/data_descriptors/physic_index.py,sha256=_y2K3NAJRqRcub_qqgw0haIYSqE8Y9DTzvNU1hhdCBI,139
|
|
37
|
+
esgvoc/api/data_descriptors/product.py,sha256=992roUfIoPfQSKsbqCpIckWjlTBQEPdUz-3Fk_L__Ek,157
|
|
38
|
+
esgvoc/api/data_descriptors/publication_status.py,sha256=l0NbOclehirlgr6hKSDLmYCHF3-TmtFJS73xJVvh0tU,153
|
|
39
|
+
esgvoc/api/data_descriptors/realisation_index.py,sha256=4MnYOyPOZ5EsFuAVplXy35E_rUCOGUOcaN60zSuK4gQ,144
|
|
40
|
+
esgvoc/api/data_descriptors/realm.py,sha256=zFSQPucqj-mtHDJzq0Mym_MrhOBMZzyxdwROS2xEFGI,155
|
|
41
|
+
esgvoc/api/data_descriptors/region.py,sha256=ZIn3aZECuiCvDP2fqeXelMMXeylhcOhWhOOEcig5ooI,142
|
|
42
|
+
esgvoc/api/data_descriptors/resolution.py,sha256=5eYYhgKfqmJXpJtFp9FTwaXWtZg4tuoOQd0VAgyaMEA,189
|
|
43
|
+
esgvoc/api/data_descriptors/source.py,sha256=lryCpb-lPuu0SzOArXbfhsKMpe8d6C8VAN_D2pOnDtQ,1197
|
|
44
|
+
esgvoc/api/data_descriptors/source_type.py,sha256=y71xDTGjHQ3-1zvbPO5AMjvNy_XGxhIxug0jGMF26Q4,146
|
|
45
|
+
esgvoc/api/data_descriptors/sub_experiment.py,sha256=HAQLq8Aq9XQjdmKfkAewTAe4rO7oTiEGdPqhDITVzJg,149
|
|
46
|
+
esgvoc/api/data_descriptors/table.py,sha256=Aqx10A5jmv59GVZcR6-lOTwNu9l_KCckM8eqOLx1UQg,259
|
|
47
|
+
esgvoc/api/data_descriptors/temporal_label.py,sha256=Mp79HgsX_LHx18dkOesPTYIUB8esDumRi1q7vWpk8x0,841
|
|
48
|
+
esgvoc/api/data_descriptors/time_range.py,sha256=9o-n2jvaSBAlLOeepzMztgJWl-zOaz-DXfB0TAbXom0,149
|
|
49
|
+
esgvoc/api/data_descriptors/title.py,sha256=9lqRLAN3MTLYpdZ62MI3oXVFlWzD7rJEUFxe7AapYqM,133
|
|
50
|
+
esgvoc/api/data_descriptors/tracking_id.py,sha256=VFUrvLwdfh0sAKWdKqlNvqAn8-iXAp5ktXpgV-SrGHc,150
|
|
51
|
+
esgvoc/api/data_descriptors/variable.py,sha256=f5Azl8_SCRE_g0RCnJ8T2S0ck0rtg5soXFdhPCanKbQ,1238
|
|
52
|
+
esgvoc/api/data_descriptors/variant_label.py,sha256=jH1QIGafMKWFZIkx3oBydOz4EpSPVCaG00hbGfeNRFo,152
|
|
53
|
+
esgvoc/api/data_descriptors/vertical_label.py,sha256=_1SUkL7aYWEnvUonyEBkSlsLbMOwAftsKV7FCQzWyS4,809
|
|
54
|
+
esgvoc/apps/__init__.py,sha256=Kyq36qRjvTWN7gu4_iFaLOjNUYvW0k1xp8bvkgJlQ5w,269
|
|
55
|
+
esgvoc/apps/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
56
|
+
esgvoc/apps/drs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
|
+
esgvoc/apps/drs/constants.py,sha256=rVWq1QQwAFgISjvl3YzJDLLPNUPXHpqgv66spmjyPMQ,96
|
|
58
|
+
esgvoc/apps/drs/generator.py,sha256=M0QMtpAaMU4E0142FPqdhix3n034CU_QaPuwvXsWtlA,22392
|
|
59
|
+
esgvoc/apps/drs/report.py,sha256=ZRu5l6T-U-hqY7O3ZwAseYbWZPcJiMhJ2dpFKZJE3Gk,17371
|
|
60
|
+
esgvoc/apps/drs/validator.py,sha256=yNijdOPhF9adgZbya5Ugvs13GbL4MvgQepCT38A66vM,13825
|
|
61
|
+
esgvoc/apps/jsg/cmip6_template.json,sha256=KJHhr0FSrIVB5kXVt57k_KtvB3uhs9Xz5hoX8ajAZis,1916
|
|
62
|
+
esgvoc/apps/jsg/cmip6plus_template.json,sha256=4QNrZFT1I8RtxCHJvsNwXUiMQctWylZuzL3gvDgg3Ps,1936
|
|
63
|
+
esgvoc/apps/jsg/json_schema_generator.py,sha256=ByLalwtoqZKtWUgOmPKcgA7hoCLwUss994ViBSqrfXE,9058
|
|
64
|
+
esgvoc/cli/config.py,sha256=MNrpYzEM9gwqCzPUs-ZzFv6Tg-p0ySMGeBUzB0nXXo0,18714
|
|
65
|
+
esgvoc/cli/drs.py,sha256=PvVbLxef34A1IO600AFWOEWb5iLaWrBRHwwgMJ4u-PM,9237
|
|
66
|
+
esgvoc/cli/find.py,sha256=DxpEvSbQIJ3-XL-pgH5RicBzS3asjG2Cn_fJhjXKSoU,4497
|
|
67
|
+
esgvoc/cli/get.py,sha256=DmYyYB0Wn8OLq2ZkYb4xIFLQ4jncL6qB3tV2QX5lQBs,5628
|
|
68
|
+
esgvoc/cli/install.py,sha256=zMssevZDrigrUlw1QHWITGUL1TvsHMZBQdYeNtHgWQA,433
|
|
69
|
+
esgvoc/cli/main.py,sha256=jYNGaE-1MzeCJKb5hI_UGc6yMOwNQ0mZ1CzwV-FdlbM,636
|
|
70
|
+
esgvoc/cli/status.py,sha256=1HSdbM5ABJ9Mri3hIgGeycCm4qKK3sO9OY0lmXecbtk,1450
|
|
71
|
+
esgvoc/cli/valid.py,sha256=4ccakK5_QM9PhaBsfGH9VsfglApxDaKBG8oucRYbKqg,6937
|
|
72
|
+
esgvoc/core/constants.py,sha256=i03VR29sQmg89DdQpGZ1fzBT-elT3-_S0bTNraGA6T4,432
|
|
73
|
+
esgvoc/core/convert.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
+
esgvoc/core/data_handler.py,sha256=BmcD_dSvX5fCkUEGAQnadPTeuKA7IvgMmQtesMXKh5g,5004
|
|
75
|
+
esgvoc/core/exceptions.py,sha256=hs2D1lRWYhFuXDRbApKyJmEZMs8HxTPlSGkDSpkeQiA,538
|
|
76
|
+
esgvoc/core/logging_handler.py,sha256=kJn14stODJ3hIsCROY0XrHaYiSyy1qYwlcUopSi8pzE,599
|
|
77
|
+
esgvoc/core/repo_fetcher.py,sha256=3ZySBlmQvStabHqcGZ4G5aWvCLJiNs5RBfBhLXWSm88,9661
|
|
78
|
+
esgvoc/core/db/__init__.py,sha256=fszGxJfRUa6uuuogrdh8_ExtdyMLZSaaVawpdgXzqKM,113
|
|
79
|
+
esgvoc/core/db/connection.py,sha256=AIFo0IWznu0Alk0SK_4bqp6FL5ZqSezNrfc_AlM9Z14,882
|
|
80
|
+
esgvoc/core/db/project_ingestion.py,sha256=Qbr2F55c_P6RZzjBLH-Sxp5QhG4fHYcJyvr6FXtNB-I,7427
|
|
81
|
+
esgvoc/core/db/universe_ingestion.py,sha256=dNi3GxPE7RbSCxSMaC5WO5R07nZ4Vt6ykpSTBu-KgqU,6433
|
|
82
|
+
esgvoc/core/db/models/mixins.py,sha256=S4_6iuKf1kYLdUXAgqRKSTXs8H9I--43MKlEq4F-dm4,445
|
|
83
|
+
esgvoc/core/db/models/project.py,sha256=e3C_DPwwlrX-10BBHhodjRim4uX7yNU7rAMvUNAwBoQ,4384
|
|
84
|
+
esgvoc/core/db/models/universe.py,sha256=SI-lL-Yrl-t232m0mQJqCEHuuUhM8qNnUOXl3Q4-NSk,4205
|
|
85
|
+
esgvoc/core/service/__init__.py,sha256=hveqCB4oC6gKDf_L-wZxu9iBz7RiY4x9OeJGP6S5xtU,1534
|
|
86
|
+
esgvoc/core/service/data_merger.py,sha256=0XogkIy_ANMOyt57Sfev3bpQFW7HhchoRkNy11QCR3E,3681
|
|
87
|
+
esgvoc/core/service/esg_voc.py,sha256=5G0P4_xmQzoI_RG_agpq-yHoYYZx220P27v2nPrpyNs,2420
|
|
88
|
+
esgvoc/core/service/state.py,sha256=CGlVbmvW5WB6DKivzqz9i8PsMDKHGuNdIWyohQVdBhQ,11113
|
|
89
|
+
esgvoc/core/service/configuration/config_manager.py,sha256=K-gU3Kd-eJMunxDKOk4x72CRcyJ50IZXLfqQgyI9zTs,8282
|
|
90
|
+
esgvoc/core/service/configuration/setting.py,sha256=WJgo9ZjZJrTGR9WEBhp1d7ab0Yb2Y6XmnO1oImTPc2s,3042
|
|
91
|
+
esgvoc-1.0.0.dist-info/METADATA,sha256=7Ik83PpoCIsgnlEGyuvj4wSWZsGD8vSjNQpAh6vSu8A,2066
|
|
92
|
+
esgvoc-1.0.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
93
|
+
esgvoc-1.0.0.dist-info/entry_points.txt,sha256=ZXufSC7Jlx1lb52U6Buv9IitJMcqAAXOerR2V9DaIto,48
|
|
94
|
+
esgvoc-1.0.0.dist-info/licenses/LICENSE.txt,sha256=rWJoZt3vach8ZNdLq-Ee5djzCMFnJ1gIfBeJU5RIop4,21782
|
|
95
|
+
esgvoc-1.0.0.dist-info/RECORD,,
|
esgvoc/core/logging.conf
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
[loggers]
|
|
2
|
-
keys=root
|
|
3
|
-
|
|
4
|
-
[logger_root]
|
|
5
|
-
level=ERROR
|
|
6
|
-
handlers=stdout
|
|
7
|
-
|
|
8
|
-
[handlers]
|
|
9
|
-
keys=stdout
|
|
10
|
-
|
|
11
|
-
[handler_stdout]
|
|
12
|
-
class=StreamHandler
|
|
13
|
-
level=NOTSET
|
|
14
|
-
formatter=stdout
|
|
15
|
-
args=(sys.stdout,)
|
|
16
|
-
|
|
17
|
-
[formatters]
|
|
18
|
-
keys=stdout
|
|
19
|
-
|
|
20
|
-
[formatter_stdout]
|
|
21
|
-
format=%(asctime)s [%(levelname)s] %(name)s: %(message)s
|
esgvoc-0.4.0.dist-info/RECORD
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
esgvoc/__init__.py,sha256=1U7uasmBR5VzekoxCEz4GBNgpPcsEU5BwY-QOSW37qA,66
|
|
2
|
-
esgvoc/api/__init__.py,sha256=w68CdVRS553bDWezZoCTxIFq_vsP7mFluSoO4yUo_Uc,4130
|
|
3
|
-
esgvoc/api/project_specs.py,sha256=a-hEL-tXsfvwFeSU5PBnQZq_tqB7L67wxpB1ACah-no,2330
|
|
4
|
-
esgvoc/api/projects.py,sha256=y6qcBSuW22a4nDB9V8lU6PFUj1j2SOrj3xtu9FKVyS4,57466
|
|
5
|
-
esgvoc/api/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
esgvoc/api/report.py,sha256=OlK5ApnaikMKmC6FyJ1uTSBeTezZe85yTCJwsk14uZE,3526
|
|
7
|
-
esgvoc/api/search.py,sha256=Ss_-EvCQHZc6pBTDJzPUrOE_ErTcdqa-zmLkcBjsVkk,6667
|
|
8
|
-
esgvoc/api/universe.py,sha256=8aEvkTHWv9PEWz9hw_JYDdjJBbHzizi_RdVg9Ua-ook,21830
|
|
9
|
-
esgvoc/api/data_descriptors/__init__.py,sha256=6ldSy7x4rnol7ZykPBn9xtnKq1bT_d8G19LIyJnc_mw,3248
|
|
10
|
-
esgvoc/api/data_descriptors/activity.py,sha256=HZIaFqOVeYKmMJd1B_ihbKTAAAr13wr8IFISZI_jdO8,620
|
|
11
|
-
esgvoc/api/data_descriptors/area_label.py,sha256=sJqHuuLeXqDajZfEatAWX7Jot6I0xnCd1gvFJaA2s_M,161
|
|
12
|
-
esgvoc/api/data_descriptors/branded_suffix.py,sha256=7uvoUfJ5KBWMWmEu_QmjJ9wEzLhvqGuFqsvdS9sXrNQ,157
|
|
13
|
-
esgvoc/api/data_descriptors/branded_variable.py,sha256=vnZxR3EQv9X1z3pRmY_4C_sXkKkYf9-9gebY_F2ldDI,159
|
|
14
|
-
esgvoc/api/data_descriptors/consortium.py,sha256=F8qFon8aKnVrUDkrBIg1DoQwZLUNt8QYUTQaxyYvMCI,807
|
|
15
|
-
esgvoc/api/data_descriptors/data_descriptor.py,sha256=xmrJv1ZLMBBBysVZI6zCC2ZRyUwkOv-aKRHPw9d4bhk,3116
|
|
16
|
-
esgvoc/api/data_descriptors/date.py,sha256=PsLSEI_qNXYxxgdcA2cmxmD5wo9Dd_uoaw9f5hmFHTs,131
|
|
17
|
-
esgvoc/api/data_descriptors/directory_date.py,sha256=UcmBEV-n8-Nl6ML5xVjIswAnOVCvi25aJHj8-1HE8tY,140
|
|
18
|
-
esgvoc/api/data_descriptors/experiment.py,sha256=dZQe0VURghn5zZuX3fPRx9ukGqe4R-8IoIsw7iEiKNY,1073
|
|
19
|
-
esgvoc/api/data_descriptors/forcing_index.py,sha256=ELEUgv5VaRD548EEl1T-_PpdqPdz1rmWPdh-7mfGLQU,139
|
|
20
|
-
esgvoc/api/data_descriptors/frequency.py,sha256=LmDjBSAwHi8vuHIz3SW0r4ewrqh1W94kbFEetCJuPNs,193
|
|
21
|
-
esgvoc/api/data_descriptors/grid_label.py,sha256=HuR37-usYh6FjzE2_e6b7WBbrgAvyjUCc29NJnBEHDE,197
|
|
22
|
-
esgvoc/api/data_descriptors/horizontal_label.py,sha256=V-QkV5Qn3uVYAZ6BGCiaTLxlBx9x1bJZ_nc6H8kH00s,167
|
|
23
|
-
esgvoc/api/data_descriptors/initialisation_index.py,sha256=IknUFQkFCsyvawsUETomiVYhR1vEmCZSeeMqfgie0_8,146
|
|
24
|
-
esgvoc/api/data_descriptors/institution.py,sha256=8AzWTg9tNqkpVa9TnAmfx119opZ_JzvXnnJg-VuSmDE,542
|
|
25
|
-
esgvoc/api/data_descriptors/license.py,sha256=nJaVoJ-CGHd1JYDE8-mo0P6xljRKg1Y9ZopEOcWLeVk,176
|
|
26
|
-
esgvoc/api/data_descriptors/mip_era.py,sha256=WsNPE1t8LBY9HXz97SVoQHWRz0Ao0_5-e1fO4J1lEAE,177
|
|
27
|
-
esgvoc/api/data_descriptors/model_component.py,sha256=rmpKs0njm4mKQ2lxTV0vhZ4aORBSCuouI5zT_DzW6ZE,227
|
|
28
|
-
esgvoc/api/data_descriptors/organisation.py,sha256=m5CHah1NxVl0OmNOUb_Nln8MwMG_Mx-Y3VRlpqY377w,135
|
|
29
|
-
esgvoc/api/data_descriptors/physic_index.py,sha256=jWa1sQdLm90U0TY1JdQ3kgnhhpyJaMUswxdjamMJy8U,138
|
|
30
|
-
esgvoc/api/data_descriptors/product.py,sha256=PYsV_mu8jj62pv4FQJcUoqe7MM_9JqRe-Otn4RdrgQw,157
|
|
31
|
-
esgvoc/api/data_descriptors/realisation_index.py,sha256=zWgUnoM0DWsME5WciQUjb7pIw_FAzDfGPDCyGQ4xSOo,143
|
|
32
|
-
esgvoc/api/data_descriptors/realm.py,sha256=s1J-FsTlEr_BOgW3veynUPVzSwbv71V03TWM4wbUYds,154
|
|
33
|
-
esgvoc/api/data_descriptors/resolution.py,sha256=cEfu1XstWsVIwRs4z34lcyP5wiZYNMyhWNQZ5IplVps,190
|
|
34
|
-
esgvoc/api/data_descriptors/source.py,sha256=IAVh0a3yXEOv0_O025wIRPyZET5_EwgyPxCKfyBwOQ8,1128
|
|
35
|
-
esgvoc/api/data_descriptors/source_type.py,sha256=FQUQwAix2JDo_rx_E-iVV5vHdL3pVGajoSaQMCjDOGQ,145
|
|
36
|
-
esgvoc/api/data_descriptors/sub_experiment.py,sha256=HAQLq8Aq9XQjdmKfkAewTAe4rO7oTiEGdPqhDITVzJg,149
|
|
37
|
-
esgvoc/api/data_descriptors/table.py,sha256=rZp5CpoJSFzc869IaJOMjMDTb6KfcUEZM_fthtVt1Gc,254
|
|
38
|
-
esgvoc/api/data_descriptors/temporal_label.py,sha256=lcEfH36GmWEYL83B0uG5S5Uat17GG8F-9EeFiZ3O01M,165
|
|
39
|
-
esgvoc/api/data_descriptors/time_range.py,sha256=4G9-69DG9bikb1-X9ja2Hsocd_id0Fhco7L35E0uf-c,151
|
|
40
|
-
esgvoc/api/data_descriptors/variable.py,sha256=WtWlYRO0NLPRn1qe7Dt84doJWZYNCvCCqhC0slOPidk,1014
|
|
41
|
-
esgvoc/api/data_descriptors/variant_label.py,sha256=FL8nz0BfvJgKFjMmfBgNyRb8jcHaLBDLPpOvr6mBx9A,155
|
|
42
|
-
esgvoc/api/data_descriptors/vertical_label.py,sha256=g2t-38eE-FY4H_aHrOj-ScZSPHIX6m71oltLcRHOtqI,141
|
|
43
|
-
esgvoc/apps/__init__.py,sha256=Kyq36qRjvTWN7gu4_iFaLOjNUYvW0k1xp8bvkgJlQ5w,269
|
|
44
|
-
esgvoc/apps/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
esgvoc/apps/drs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
-
esgvoc/apps/drs/constants.py,sha256=rVWq1QQwAFgISjvl3YzJDLLPNUPXHpqgv66spmjyPMQ,96
|
|
47
|
-
esgvoc/apps/drs/generator.py,sha256=M0QMtpAaMU4E0142FPqdhix3n034CU_QaPuwvXsWtlA,22392
|
|
48
|
-
esgvoc/apps/drs/report.py,sha256=ZRu5l6T-U-hqY7O3ZwAseYbWZPcJiMhJ2dpFKZJE3Gk,17371
|
|
49
|
-
esgvoc/apps/drs/validator.py,sha256=yNijdOPhF9adgZbya5Ugvs13GbL4MvgQepCT38A66vM,13825
|
|
50
|
-
esgvoc/cli/drs.py,sha256=PvVbLxef34A1IO600AFWOEWb5iLaWrBRHwwgMJ4u-PM,9237
|
|
51
|
-
esgvoc/cli/get.py,sha256=zwLWkWOfAddK5onyRjWZ0zU909MtTDjEB_YrQtIwXqw,5242
|
|
52
|
-
esgvoc/cli/install.py,sha256=zMssevZDrigrUlw1QHWITGUL1TvsHMZBQdYeNtHgWQA,433
|
|
53
|
-
esgvoc/cli/main.py,sha256=kjB-yus-cmG9rOmVIPBhmjOr3tkwB13dHLcNqrdpYAM,483
|
|
54
|
-
esgvoc/cli/status.py,sha256=hmpyrszrb5ke9l_1SgendPSeoXW1h-h7nH0zGFt_vUw,1357
|
|
55
|
-
esgvoc/cli/valid.py,sha256=XrseGONeWR6gnnwZrRMJNjVBFQLT82Uzn5rHrjjM1Uk,7040
|
|
56
|
-
esgvoc/core/constants.py,sha256=i03VR29sQmg89DdQpGZ1fzBT-elT3-_S0bTNraGA6T4,432
|
|
57
|
-
esgvoc/core/convert.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
-
esgvoc/core/data_handler.py,sha256=BmcD_dSvX5fCkUEGAQnadPTeuKA7IvgMmQtesMXKh5g,5004
|
|
59
|
-
esgvoc/core/exceptions.py,sha256=hs2D1lRWYhFuXDRbApKyJmEZMs8HxTPlSGkDSpkeQiA,538
|
|
60
|
-
esgvoc/core/logging.conf,sha256=GK52lsTu17CfC2tKiMAIvkuHkIt5tqPmkWv68COOilc,278
|
|
61
|
-
esgvoc/core/logging_handler.py,sha256=VgRBWeW_xdC4HtXG0TleQFwoy_YbJR4wlpci_sFezK0,147
|
|
62
|
-
esgvoc/core/repo_fetcher.py,sha256=Rg668F4NN60jd8Ydz9dXpJQxd2eQOgaO0Ziwm53mcaI,9823
|
|
63
|
-
esgvoc/core/db/__init__.py,sha256=fszGxJfRUa6uuuogrdh8_ExtdyMLZSaaVawpdgXzqKM,113
|
|
64
|
-
esgvoc/core/db/connection.py,sha256=AIFo0IWznu0Alk0SK_4bqp6FL5ZqSezNrfc_AlM9Z14,882
|
|
65
|
-
esgvoc/core/db/project_ingestion.py,sha256=M0Yruh7w--Q9JyRnbLynoPiVfmufp8b6h5UuUeNnnPA,7687
|
|
66
|
-
esgvoc/core/db/universe_ingestion.py,sha256=vPNr_svmduX3JKuLA_-SQMTxO2FWMqCNyCWkPSDznNE,6522
|
|
67
|
-
esgvoc/core/db/models/mixins.py,sha256=S4_6iuKf1kYLdUXAgqRKSTXs8H9I--43MKlEq4F-dm4,445
|
|
68
|
-
esgvoc/core/db/models/project.py,sha256=hkDCPJNo3wGt-UMOfujeQYPgju_aH1oExDAnIgoe96M,4369
|
|
69
|
-
esgvoc/core/db/models/universe.py,sha256=vrR1TMD9ZI6RSGRi-qnLEKHD2Qk6Mh3qz8gciPgsELQ,4199
|
|
70
|
-
esgvoc/core/service/__init__.py,sha256=hveqCB4oC6gKDf_L-wZxu9iBz7RiY4x9OeJGP6S5xtU,1534
|
|
71
|
-
esgvoc/core/service/data_merger.py,sha256=GNFp5DTV2jlBVJZNpILngi6jCbUvVGcqka4EMWKj_Os,3456
|
|
72
|
-
esgvoc/core/service/esg_voc.py,sha256=5G0P4_xmQzoI_RG_agpq-yHoYYZx220P27v2nPrpyNs,2420
|
|
73
|
-
esgvoc/core/service/state.py,sha256=f1Pb11yYRAcLyK93zJ60i5l-mifDXP8_81tJQtMAvPo,10622
|
|
74
|
-
esgvoc/core/service/configuration/config_manager.py,sha256=K-gU3Kd-eJMunxDKOk4x72CRcyJ50IZXLfqQgyI9zTs,8282
|
|
75
|
-
esgvoc/core/service/configuration/setting.py,sha256=WJgo9ZjZJrTGR9WEBhp1d7ab0Yb2Y6XmnO1oImTPc2s,3042
|
|
76
|
-
esgvoc-0.4.0.dist-info/METADATA,sha256=rDbK18ahBLJtPMTi00NI64tEhNn8ulPlfvMoJ4TBIlc,2165
|
|
77
|
-
esgvoc-0.4.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
78
|
-
esgvoc-0.4.0.dist-info/entry_points.txt,sha256=ZXufSC7Jlx1lb52U6Buv9IitJMcqAAXOerR2V9DaIto,48
|
|
79
|
-
esgvoc-0.4.0.dist-info/licenses/LICENSE.txt,sha256=rWJoZt3vach8ZNdLq-Ee5djzCMFnJ1gIfBeJU5RIop4,21782
|
|
80
|
-
esgvoc-0.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|