esgvoc 0.3.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.

Files changed (87) hide show
  1. esgvoc/__init__.py +1 -1
  2. esgvoc/api/__init__.py +95 -60
  3. esgvoc/api/data_descriptors/__init__.py +50 -28
  4. esgvoc/api/data_descriptors/activity.py +3 -3
  5. esgvoc/api/data_descriptors/area_label.py +16 -1
  6. esgvoc/api/data_descriptors/branded_suffix.py +20 -0
  7. esgvoc/api/data_descriptors/branded_variable.py +12 -0
  8. esgvoc/api/data_descriptors/consortium.py +14 -13
  9. esgvoc/api/data_descriptors/contact.py +5 -0
  10. esgvoc/api/data_descriptors/conventions.py +6 -0
  11. esgvoc/api/data_descriptors/creation_date.py +5 -0
  12. esgvoc/api/data_descriptors/data_descriptor.py +14 -9
  13. esgvoc/api/data_descriptors/data_specs_version.py +5 -0
  14. esgvoc/api/data_descriptors/date.py +1 -1
  15. esgvoc/api/data_descriptors/directory_date.py +1 -1
  16. esgvoc/api/data_descriptors/experiment.py +13 -11
  17. esgvoc/api/data_descriptors/forcing_index.py +1 -1
  18. esgvoc/api/data_descriptors/frequency.py +3 -3
  19. esgvoc/api/data_descriptors/further_info_url.py +5 -0
  20. esgvoc/api/data_descriptors/grid_label.py +2 -2
  21. esgvoc/api/data_descriptors/horizontal_label.py +15 -1
  22. esgvoc/api/data_descriptors/initialisation_index.py +1 -1
  23. esgvoc/api/data_descriptors/institution.py +8 -5
  24. esgvoc/api/data_descriptors/known_branded_variable.py +23 -0
  25. esgvoc/api/data_descriptors/license.py +3 -3
  26. esgvoc/api/data_descriptors/mip_era.py +1 -1
  27. esgvoc/api/data_descriptors/model_component.py +1 -1
  28. esgvoc/api/data_descriptors/obs_type.py +5 -0
  29. esgvoc/api/data_descriptors/organisation.py +1 -1
  30. esgvoc/api/data_descriptors/physic_index.py +1 -1
  31. esgvoc/api/data_descriptors/product.py +2 -2
  32. esgvoc/api/data_descriptors/publication_status.py +5 -0
  33. esgvoc/api/data_descriptors/realisation_index.py +1 -1
  34. esgvoc/api/data_descriptors/realm.py +1 -1
  35. esgvoc/api/data_descriptors/region.py +5 -0
  36. esgvoc/api/data_descriptors/resolution.py +3 -3
  37. esgvoc/api/data_descriptors/source.py +9 -5
  38. esgvoc/api/data_descriptors/source_type.py +1 -1
  39. esgvoc/api/data_descriptors/table.py +3 -2
  40. esgvoc/api/data_descriptors/temporal_label.py +15 -1
  41. esgvoc/api/data_descriptors/time_range.py +4 -3
  42. esgvoc/api/data_descriptors/title.py +5 -0
  43. esgvoc/api/data_descriptors/tracking_id.py +5 -0
  44. esgvoc/api/data_descriptors/variable.py +25 -12
  45. esgvoc/api/data_descriptors/variant_label.py +3 -3
  46. esgvoc/api/data_descriptors/vertical_label.py +14 -0
  47. esgvoc/api/project_specs.py +120 -4
  48. esgvoc/api/projects.py +733 -505
  49. esgvoc/api/py.typed +0 -0
  50. esgvoc/api/report.py +12 -8
  51. esgvoc/api/search.py +168 -98
  52. esgvoc/api/universe.py +368 -157
  53. esgvoc/apps/drs/constants.py +1 -1
  54. esgvoc/apps/drs/generator.py +51 -69
  55. esgvoc/apps/drs/report.py +60 -15
  56. esgvoc/apps/drs/validator.py +60 -71
  57. esgvoc/apps/jsg/cmip6_template.json +74 -0
  58. esgvoc/apps/jsg/cmip6plus_template.json +74 -0
  59. esgvoc/apps/jsg/json_schema_generator.py +185 -0
  60. esgvoc/apps/py.typed +0 -0
  61. esgvoc/cli/config.py +500 -0
  62. esgvoc/cli/drs.py +3 -2
  63. esgvoc/cli/find.py +138 -0
  64. esgvoc/cli/get.py +46 -38
  65. esgvoc/cli/main.py +10 -3
  66. esgvoc/cli/status.py +27 -18
  67. esgvoc/cli/valid.py +10 -15
  68. esgvoc/core/constants.py +1 -1
  69. esgvoc/core/db/__init__.py +2 -4
  70. esgvoc/core/db/connection.py +5 -3
  71. esgvoc/core/db/models/project.py +57 -15
  72. esgvoc/core/db/models/universe.py +49 -10
  73. esgvoc/core/db/project_ingestion.py +79 -65
  74. esgvoc/core/db/universe_ingestion.py +71 -40
  75. esgvoc/core/exceptions.py +33 -0
  76. esgvoc/core/logging_handler.py +24 -2
  77. esgvoc/core/repo_fetcher.py +61 -59
  78. esgvoc/core/service/data_merger.py +47 -34
  79. esgvoc/core/service/state.py +107 -83
  80. {esgvoc-0.3.0.dist-info → esgvoc-1.0.0.dist-info}/METADATA +7 -20
  81. esgvoc-1.0.0.dist-info/RECORD +95 -0
  82. esgvoc/api/_utils.py +0 -53
  83. esgvoc/core/logging.conf +0 -21
  84. esgvoc-0.3.0.dist-info/RECORD +0 -78
  85. {esgvoc-0.3.0.dist-info → esgvoc-1.0.0.dist-info}/WHEEL +0 -0
  86. {esgvoc-0.3.0.dist-info → esgvoc-1.0.0.dist-info}/entry_points.txt +0 -0
  87. {esgvoc-0.3.0.dist-info → esgvoc-1.0.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -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__(self, github_repo: str, branch: str = "main", local_path: Optional[str] = None, db_path: Optional[str] = None):
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
- self.base_dir = config_manager.data_config_dir # needed for repofetcher
24
-
25
- self.github_repo : str = github_repo
26
- self.branch : str = branch
27
- self.github_access : bool = True # False if we dont have internet and some other cases
28
- self.github_version : str | None = None
29
-
30
- self.local_path : str | None = self._get_absolute_path(str(self.base_dir),local_path)
31
- self.local_access : bool = True # False if we dont have cloned the remote repo yet
32
- self.local_version : str | None = None
33
-
34
- self.db_path : str | None = self._get_absolute_path(str(self.base_dir), db_path)
35
- self.db_access : bool = True # False if we cant access the db for some reason
36
- self.db_version : str | None = None
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 :Universe | Project| None = None
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
- if self.local_path:
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(f"Failed to fetch GitHub version: {e} ,for {self.github_repo},owner : {owner}, repo : {repo},branch : {self.branch}")
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" : self.github_version if self.github_version else None,
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" : self.db_version if self.db_version else None,
110
- "github_local_sync": self.github_version == self.local_version if self.github_access and self.github_version and self.local_version else False,
111
- "local_db_sync": self.local_version == self.db_version if self.local_access and self.local_version else False,
112
- "github_db_sync": self.github_version == self.db_version if self.github_access and self.github_version else False
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.universe_ingestion import ingest_universe
128
-
129
- if self.db_path :
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: # Ugly
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= Path(self.db_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 self.github_access and summary["github_db_sync"] is None and summary["local_db_sync"]is None and summary["github_local_sync"] is None:
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: # can be simply build in root and clone if neccessary
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: # it can happen if the db is created but not filled
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 connect_db(self):
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
- #table.add_row("","Remote github repo","Local repository","Cache Database")
225
- table.add_row(f"{proj_name} path",proj.github_repo,proj.local_path,proj.db_path)
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.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: <3.13,>=3.12
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
- * Rye
70
+ * UV
85
71
 
86
72
  ```bash
87
- rye install
88
- rye run pre-commit install
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/api/_utils.py DELETED
@@ -1,53 +0,0 @@
1
- from typing import Iterable, MutableSequence
2
-
3
- from sqlmodel import Session
4
-
5
- import esgvoc.core.constants as api_settings
6
- import esgvoc.core.service as service
7
- from esgvoc.api.data_descriptors import DATA_DESCRIPTOR_CLASS_MAPPING
8
- from esgvoc.api.data_descriptors.data_descriptor import (DataDescriptor,
9
- DataDescriptorSubSet)
10
- from esgvoc.core.db.models.project import PTerm
11
- from esgvoc.core.db.models.universe import UTerm
12
-
13
-
14
- class APIException(Exception): ...
15
-
16
-
17
- def get_pydantic_class(data_descriptor_id_or_term_type: str) -> type[DataDescriptor]:
18
- if data_descriptor_id_or_term_type in DATA_DESCRIPTOR_CLASS_MAPPING:
19
- return DATA_DESCRIPTOR_CLASS_MAPPING[data_descriptor_id_or_term_type]
20
- else:
21
- raise RuntimeError(f"{data_descriptor_id_or_term_type} pydantic class not found")
22
-
23
-
24
- def get_universe_session() -> Session:
25
-
26
- UNIVERSE_DB_CONNECTION = service.current_state.universe.db_connection
27
- if UNIVERSE_DB_CONNECTION:
28
- return UNIVERSE_DB_CONNECTION.create_session()
29
- else:
30
- raise RuntimeError('universe connection is not initialized')
31
-
32
-
33
- def instantiate_pydantic_term(term: UTerm|PTerm,
34
- selected_term_fields: Iterable[str]|None) -> DataDescriptor:
35
- type = term.specs[api_settings.TERM_TYPE_JSON_KEY]
36
- if selected_term_fields:
37
- subset = DataDescriptorSubSet(id=term.id, type=type)
38
- for field in selected_term_fields:
39
- setattr(subset, field, term.specs.get(field, None))
40
- for field in DataDescriptorSubSet.MANDATORY_TERM_FIELDS:
41
- setattr(subset, field, term.specs.get(field, None))
42
- return subset
43
- else:
44
- term_class = get_pydantic_class(type)
45
- return term_class(**term.specs)
46
-
47
-
48
- def instantiate_pydantic_terms(db_terms: Iterable[UTerm|PTerm],
49
- list_to_populate: MutableSequence[DataDescriptor],
50
- selected_term_fields: Iterable[str]|None) -> None:
51
- for db_term in db_terms:
52
- term = instantiate_pydantic_term(db_term, selected_term_fields)
53
- list_to_populate.append(term)
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
@@ -1,78 +0,0 @@
1
- esgvoc/__init__.py,sha256=D1rteIBXx1OIT6Jg9Yqo4pOud1VZTXZI8vrhJxm7Nvs,66
2
- esgvoc/api/__init__.py,sha256=Oe6ch-MhVnN886jQAJ-OuyCI1eO3BxOtB_zvdbkVTXk,2764
3
- esgvoc/api/_utils.py,sha256=pddSwnqYqLua0r2SXX6098OaCDxWJxaW7zlt2Xarl9o,2149
4
- esgvoc/api/project_specs.py,sha256=uX1zqvTC8Dj5bOegZQVMAqU1VOle01s_8ncPXvtp0J4,2328
5
- esgvoc/api/projects.py,sha256=E-Jt3vlu4vhPpVUixDGc7SHSj1HrNeIYz7n3cd9GhWI,42306
6
- esgvoc/api/report.py,sha256=rAqOwYTqmzMguONT54YzNU1i7ZtmjYaCRD0Yz7mJsOI,3511
7
- esgvoc/api/search.py,sha256=yV00GjvC9ZRodmfTp9HhOSk5OBsKq1s6ZNfpfxkbCwc,4208
8
- esgvoc/api/universe.py,sha256=oFgYXCwVZP4HSgdGXYMFmGolSah1uCmfCMWKhNTuhog,10581
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/drs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- esgvoc/apps/drs/constants.py,sha256=kZxFo7Aa8DNy3WBq2j0FuZVEqOyxG53ZAkkjQaObE8s,95
46
- esgvoc/apps/drs/generator.py,sha256=2-l68Zp4XVzZ42a6x1GN5hHwqYDe--JaiVjfWIGgiBw,22996
47
- esgvoc/apps/drs/report.py,sha256=HywC7LXA7ER8VQu5g56izm5Z-zLxhoDekQJbhNUNkmI,17316
48
- esgvoc/apps/drs/validator.py,sha256=-hX5PEYeiuRyIwS6jsY9XRyvj-wPpdcUD8PJn31D9hE,14913
49
- esgvoc/cli/drs.py,sha256=ykisrZEOz3sl9rFuQehJfgOf4xsE9tKjPd_CmMWR08M,9133
50
- esgvoc/cli/get.py,sha256=NrNCb2nWftlPkdRmYysbMU_pVUksFTeYItCuVviAAqQ,5171
51
- esgvoc/cli/install.py,sha256=zMssevZDrigrUlw1QHWITGUL1TvsHMZBQdYeNtHgWQA,433
52
- esgvoc/cli/main.py,sha256=kjB-yus-cmG9rOmVIPBhmjOr3tkwB13dHLcNqrdpYAM,483
53
- esgvoc/cli/status.py,sha256=hmpyrszrb5ke9l_1SgendPSeoXW1h-h7nH0zGFt_vUw,1357
54
- esgvoc/cli/valid.py,sha256=XrseGONeWR6gnnwZrRMJNjVBFQLT82Uzn5rHrjjM1Uk,7040
55
- esgvoc/core/constants.py,sha256=b9GoM3pTICki95gMCnUZbg4_mMiywKhJX5ME01pgwMs,431
56
- esgvoc/core/convert.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- esgvoc/core/data_handler.py,sha256=BmcD_dSvX5fCkUEGAQnadPTeuKA7IvgMmQtesMXKh5g,5004
58
- esgvoc/core/logging.conf,sha256=GK52lsTu17CfC2tKiMAIvkuHkIt5tqPmkWv68COOilc,278
59
- esgvoc/core/logging_handler.py,sha256=VgRBWeW_xdC4HtXG0TleQFwoy_YbJR4wlpci_sFezK0,147
60
- esgvoc/core/repo_fetcher.py,sha256=Rg668F4NN60jd8Ydz9dXpJQxd2eQOgaO0Ziwm53mcaI,9823
61
- esgvoc/core/db/__init__.py,sha256=gjAT_lUJtPqxsc8WnwbG_sxDqSIFAlG8vEKxdGyH82w,150
62
- esgvoc/core/db/connection.py,sha256=dhnCy1mwytUUvt149WHk7eYW0KSP64IaF3kMvKOQSJE,877
63
- esgvoc/core/db/project_ingestion.py,sha256=c7sgl91ScPfB4n05OR6HbtDqxNELv0jTiFf77S7tqc4,6327
64
- esgvoc/core/db/universe_ingestion.py,sha256=kH9TryeHbahLMaF1BFfOzrakWkcllIi9KWz90IKAphI,5215
65
- esgvoc/core/db/models/mixins.py,sha256=S4_6iuKf1kYLdUXAgqRKSTXs8H9I--43MKlEq4F-dm4,445
66
- esgvoc/core/db/models/project.py,sha256=tuVcwNOkv0fQLFojpQCWacpnM7ZIX3eMDq6Mnko5OI0,2284
67
- esgvoc/core/db/models/universe.py,sha256=_WwuqrLGrheLbSOXaFN-2rWmHmeEGseO5sN400p6BuY,2202
68
- esgvoc/core/service/__init__.py,sha256=hveqCB4oC6gKDf_L-wZxu9iBz7RiY4x9OeJGP6S5xtU,1534
69
- esgvoc/core/service/data_merger.py,sha256=GNFp5DTV2jlBVJZNpILngi6jCbUvVGcqka4EMWKj_Os,3456
70
- esgvoc/core/service/esg_voc.py,sha256=5G0P4_xmQzoI_RG_agpq-yHoYYZx220P27v2nPrpyNs,2420
71
- esgvoc/core/service/state.py,sha256=f1Pb11yYRAcLyK93zJ60i5l-mifDXP8_81tJQtMAvPo,10622
72
- esgvoc/core/service/configuration/config_manager.py,sha256=K-gU3Kd-eJMunxDKOk4x72CRcyJ50IZXLfqQgyI9zTs,8282
73
- esgvoc/core/service/configuration/setting.py,sha256=WJgo9ZjZJrTGR9WEBhp1d7ab0Yb2Y6XmnO1oImTPc2s,3042
74
- esgvoc-0.3.0.dist-info/METADATA,sha256=nIkD0iIw2LFnD7DTYzWIml_af3Rx5Io6KkCFKmADoZE,2165
75
- esgvoc-0.3.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
76
- esgvoc-0.3.0.dist-info/entry_points.txt,sha256=ZXufSC7Jlx1lb52U6Buv9IitJMcqAAXOerR2V9DaIto,48
77
- esgvoc-0.3.0.dist-info/licenses/LICENSE.txt,sha256=rWJoZt3vach8ZNdLq-Ee5djzCMFnJ1gIfBeJU5RIop4,21782
78
- esgvoc-0.3.0.dist-info/RECORD,,
File without changes