dapla-toolbelt-metadata 0.2.1__py3-none-any.whl → 0.9.11__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 dapla-toolbelt-metadata might be problematic. Click here for more details.

Files changed (97) hide show
  1. dapla_metadata/__init__.py +11 -1
  2. dapla_metadata/_shared/__init__.py +1 -0
  3. dapla_metadata/_shared/config.py +109 -0
  4. dapla_metadata/_shared/enums.py +27 -0
  5. dapla_metadata/_shared/py.typed +0 -0
  6. dapla_metadata/dapla/__init__.py +4 -0
  7. dapla_metadata/dapla/user_info.py +138 -0
  8. dapla_metadata/datasets/__init__.py +1 -1
  9. dapla_metadata/datasets/_merge.py +333 -0
  10. dapla_metadata/datasets/code_list.py +5 -6
  11. dapla_metadata/datasets/compatibility/__init__.py +10 -0
  12. dapla_metadata/datasets/compatibility/_handlers.py +363 -0
  13. dapla_metadata/datasets/compatibility/_utils.py +259 -0
  14. dapla_metadata/datasets/compatibility/model_backwards_compatibility.py +135 -0
  15. dapla_metadata/datasets/core.py +136 -182
  16. dapla_metadata/datasets/dapla_dataset_path_info.py +145 -19
  17. dapla_metadata/datasets/dataset_parser.py +41 -28
  18. dapla_metadata/datasets/model_validation.py +29 -20
  19. dapla_metadata/datasets/statistic_subject_mapping.py +5 -1
  20. dapla_metadata/datasets/utility/constants.py +22 -15
  21. dapla_metadata/datasets/utility/enums.py +8 -20
  22. dapla_metadata/datasets/utility/urn.py +234 -0
  23. dapla_metadata/datasets/utility/utils.py +183 -111
  24. dapla_metadata/standards/__init__.py +4 -0
  25. dapla_metadata/standards/name_validator.py +250 -0
  26. dapla_metadata/standards/standard_validators.py +98 -0
  27. dapla_metadata/standards/utils/__init__.py +1 -0
  28. dapla_metadata/standards/utils/constants.py +49 -0
  29. dapla_metadata/variable_definitions/__init__.py +11 -0
  30. dapla_metadata/variable_definitions/_generated/.openapi-generator/FILES +20 -0
  31. dapla_metadata/variable_definitions/_generated/.openapi-generator/VERSION +1 -0
  32. dapla_metadata/variable_definitions/_generated/.openapi-generator-ignore +6 -0
  33. dapla_metadata/variable_definitions/_generated/README.md +148 -0
  34. dapla_metadata/variable_definitions/_generated/__init__.py +0 -0
  35. dapla_metadata/variable_definitions/_generated/vardef_client/__init__.py +47 -0
  36. dapla_metadata/variable_definitions/_generated/vardef_client/api/__init__.py +8 -0
  37. dapla_metadata/variable_definitions/_generated/vardef_client/api/data_migration_api.py +766 -0
  38. dapla_metadata/variable_definitions/_generated/vardef_client/api/draft_variable_definitions_api.py +888 -0
  39. dapla_metadata/variable_definitions/_generated/vardef_client/api/patches_api.py +888 -0
  40. dapla_metadata/variable_definitions/_generated/vardef_client/api/validity_periods_api.py +583 -0
  41. dapla_metadata/variable_definitions/_generated/vardef_client/api/variable_definitions_api.py +613 -0
  42. dapla_metadata/variable_definitions/_generated/vardef_client/api_client.py +779 -0
  43. dapla_metadata/variable_definitions/_generated/vardef_client/api_response.py +27 -0
  44. dapla_metadata/variable_definitions/_generated/vardef_client/configuration.py +474 -0
  45. dapla_metadata/variable_definitions/_generated/vardef_client/docs/CompleteResponse.md +51 -0
  46. dapla_metadata/variable_definitions/_generated/vardef_client/docs/Contact.md +30 -0
  47. dapla_metadata/variable_definitions/_generated/vardef_client/docs/DataMigrationApi.md +90 -0
  48. dapla_metadata/variable_definitions/_generated/vardef_client/docs/Draft.md +42 -0
  49. dapla_metadata/variable_definitions/_generated/vardef_client/docs/DraftVariableDefinitionsApi.md +259 -0
  50. dapla_metadata/variable_definitions/_generated/vardef_client/docs/LanguageStringType.md +31 -0
  51. dapla_metadata/variable_definitions/_generated/vardef_client/docs/Owner.md +31 -0
  52. dapla_metadata/variable_definitions/_generated/vardef_client/docs/Patch.md +43 -0
  53. dapla_metadata/variable_definitions/_generated/vardef_client/docs/PatchesApi.md +249 -0
  54. dapla_metadata/variable_definitions/_generated/vardef_client/docs/PublicApi.md +218 -0
  55. dapla_metadata/variable_definitions/_generated/vardef_client/docs/SupportedLanguages.md +15 -0
  56. dapla_metadata/variable_definitions/_generated/vardef_client/docs/UpdateDraft.md +44 -0
  57. dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriod.md +42 -0
  58. dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriodsApi.md +236 -0
  59. dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableDefinitionsApi.md +304 -0
  60. dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableStatus.md +17 -0
  61. dapla_metadata/variable_definitions/_generated/vardef_client/exceptions.py +193 -0
  62. dapla_metadata/variable_definitions/_generated/vardef_client/models/__init__.py +31 -0
  63. dapla_metadata/variable_definitions/_generated/vardef_client/models/complete_response.py +260 -0
  64. dapla_metadata/variable_definitions/_generated/vardef_client/models/contact.py +94 -0
  65. dapla_metadata/variable_definitions/_generated/vardef_client/models/draft.py +228 -0
  66. dapla_metadata/variable_definitions/_generated/vardef_client/models/get_vardok_vardef_mapping_by_id200_response.py +158 -0
  67. dapla_metadata/variable_definitions/_generated/vardef_client/models/language_string_type.py +101 -0
  68. dapla_metadata/variable_definitions/_generated/vardef_client/models/owner.py +87 -0
  69. dapla_metadata/variable_definitions/_generated/vardef_client/models/patch.py +244 -0
  70. dapla_metadata/variable_definitions/_generated/vardef_client/models/problem.py +118 -0
  71. dapla_metadata/variable_definitions/_generated/vardef_client/models/update_draft.py +274 -0
  72. dapla_metadata/variable_definitions/_generated/vardef_client/models/validity_period.py +225 -0
  73. dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_id_response.py +81 -0
  74. dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_vardef_id_pair_response.py +84 -0
  75. dapla_metadata/variable_definitions/_generated/vardef_client/models/variable_status.py +33 -0
  76. dapla_metadata/variable_definitions/_generated/vardef_client/py.typed +0 -0
  77. dapla_metadata/variable_definitions/_generated/vardef_client/rest.py +249 -0
  78. dapla_metadata/variable_definitions/_utils/__init__.py +1 -0
  79. dapla_metadata/variable_definitions/_utils/_client.py +32 -0
  80. dapla_metadata/variable_definitions/_utils/config.py +54 -0
  81. dapla_metadata/variable_definitions/_utils/constants.py +80 -0
  82. dapla_metadata/variable_definitions/_utils/files.py +309 -0
  83. dapla_metadata/variable_definitions/_utils/template_files.py +99 -0
  84. dapla_metadata/variable_definitions/_utils/variable_definition_files.py +143 -0
  85. dapla_metadata/variable_definitions/exceptions.py +255 -0
  86. dapla_metadata/variable_definitions/vardef.py +372 -0
  87. dapla_metadata/variable_definitions/vardok_id.py +48 -0
  88. dapla_metadata/variable_definitions/vardok_vardef_id_pair.py +47 -0
  89. dapla_metadata/variable_definitions/variable_definition.py +422 -0
  90. {dapla_toolbelt_metadata-0.2.1.dist-info → dapla_toolbelt_metadata-0.9.11.dist-info}/METADATA +34 -36
  91. dapla_toolbelt_metadata-0.9.11.dist-info/RECORD +97 -0
  92. {dapla_toolbelt_metadata-0.2.1.dist-info → dapla_toolbelt_metadata-0.9.11.dist-info}/WHEEL +1 -1
  93. dapla_metadata/datasets/config.py +0 -80
  94. dapla_metadata/datasets/model_backwards_compatibility.py +0 -520
  95. dapla_metadata/datasets/user_info.py +0 -88
  96. dapla_toolbelt_metadata-0.2.1.dist-info/RECORD +0 -22
  97. {dapla_toolbelt_metadata-0.2.1.dist-info → dapla_toolbelt_metadata-0.9.11.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,47 @@
1
+ import logging
2
+ from pathlib import Path
3
+
4
+ from pydantic import ConfigDict
5
+ from pydantic import PrivateAttr
6
+
7
+ from dapla_metadata.variable_definitions._generated.vardef_client.models.vardok_vardef_id_pair_response import (
8
+ VardokVardefIdPairResponse,
9
+ )
10
+ from dapla_metadata.variable_definitions._utils.variable_definition_files import (
11
+ _convert_to_yaml_output,
12
+ )
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class VardokVardefIdPair(VardokVardefIdPairResponse):
18
+ """A Vardok id.
19
+
20
+ - Provides access to the fields of a Vardok Vardef id pair.
21
+ - Provides methods allowing for nicer output of the Vardok Vardef id pair.
22
+
23
+ Args:
24
+ VardokVardefIdPairResponse: The Pydantic model superclass, representing a Vardok Vardef id pair response.
25
+ """
26
+
27
+ _file_path: Path | None = PrivateAttr(None)
28
+ model_config = ConfigDict(use_enum_values=True, str_strip_whitespace=True)
29
+
30
+ @staticmethod
31
+ def from_model(
32
+ model: VardokVardefIdPairResponse,
33
+ ) -> "VardokVardefIdPair":
34
+ """Create a VardokVardefIdPair instance from a VardokVardefIdPairResponse."""
35
+ self = VardokVardefIdPair.from_dict(model.model_dump())
36
+ if not self:
37
+ msg = f"Could not construct a VardokVardefIdPair instance from {model}"
38
+ raise ValueError(msg)
39
+ return self
40
+
41
+ def __str__(self) -> str:
42
+ """Format as indented YAML."""
43
+ return _convert_to_yaml_output(self)
44
+
45
+ def __repr__(self) -> str:
46
+ """Format as indented YAML."""
47
+ return _convert_to_yaml_output(self)
@@ -0,0 +1,422 @@
1
+ import logging
2
+ from datetime import date
3
+ from os import PathLike
4
+ from pathlib import Path
5
+
6
+ from pydantic import ConfigDict
7
+ from pydantic import PrivateAttr
8
+
9
+ from dapla_metadata.variable_definitions._generated.vardef_client.api.draft_variable_definitions_api import (
10
+ DraftVariableDefinitionsApi,
11
+ )
12
+ from dapla_metadata.variable_definitions._generated.vardef_client.api.patches_api import (
13
+ PatchesApi,
14
+ )
15
+ from dapla_metadata.variable_definitions._generated.vardef_client.api.validity_periods_api import (
16
+ ValidityPeriodsApi,
17
+ )
18
+ from dapla_metadata.variable_definitions._generated.vardef_client.models.complete_response import (
19
+ CompleteResponse,
20
+ )
21
+ from dapla_metadata.variable_definitions._generated.vardef_client.models.patch import (
22
+ Patch,
23
+ )
24
+ from dapla_metadata.variable_definitions._generated.vardef_client.models.update_draft import (
25
+ UpdateDraft,
26
+ )
27
+ from dapla_metadata.variable_definitions._generated.vardef_client.models.validity_period import (
28
+ ValidityPeriod,
29
+ )
30
+ from dapla_metadata.variable_definitions._generated.vardef_client.models.variable_status import (
31
+ VariableStatus,
32
+ )
33
+ from dapla_metadata.variable_definitions._utils import config
34
+ from dapla_metadata.variable_definitions._utils._client import VardefClient
35
+ from dapla_metadata.variable_definitions._utils.variable_definition_files import (
36
+ _convert_to_yaml_output,
37
+ )
38
+ from dapla_metadata.variable_definitions._utils.variable_definition_files import (
39
+ _read_file_to_model,
40
+ )
41
+ from dapla_metadata.variable_definitions._utils.variable_definition_files import (
42
+ create_variable_yaml,
43
+ )
44
+ from dapla_metadata.variable_definitions.exceptions import (
45
+ publishing_blocked_error_handler,
46
+ )
47
+ from dapla_metadata.variable_definitions.exceptions import vardef_exception_handler
48
+ from dapla_metadata.variable_definitions.exceptions import vardef_file_error_handler
49
+
50
+ logger = logging.getLogger(__name__)
51
+
52
+ IDENTICAL_PATCH_ERROR_MESSAGE = (
53
+ "No changes detected in supported fields. Not creating identical patch."
54
+ )
55
+
56
+
57
+ class VariableDefinition(CompleteResponse):
58
+ """A Variable Definition.
59
+
60
+ - Provides access to the fields of the specific Variable Definition.
61
+ - Provides methods to access Patches and Validity Periods of this Variable Definition.
62
+ - Provides methods allowing maintenance of this Variable Definition.
63
+
64
+ Args:
65
+ CompleteResponse: The Pydantic model superclass, representing a Variable Definition.
66
+ """
67
+
68
+ _file_path: Path | None = PrivateAttr(None)
69
+
70
+ model_config = ConfigDict(use_enum_values=True, str_strip_whitespace=True)
71
+
72
+ def get_file_path(self) -> Path | None:
73
+ """Get the file path where the variable definition has been written to for editing."""
74
+ return self._file_path
75
+
76
+ def set_file_path(self, file_path: Path | None) -> None:
77
+ """Set the file path where the variable definition has been written to for editing."""
78
+ self._file_path = file_path
79
+
80
+ @staticmethod
81
+ def from_model(
82
+ model: CompleteResponse,
83
+ ) -> "VariableDefinition":
84
+ """Create a VariableDefinition instance from a CompleteResponse."""
85
+ self = VariableDefinition.from_dict(model.model_dump())
86
+ if not self:
87
+ msg = f"Could not construct a VariableDefinition instance from {model}"
88
+ raise ValueError(msg)
89
+ return self
90
+
91
+ @vardef_exception_handler
92
+ def list_validity_periods(self) -> list["VariableDefinition"]:
93
+ """List all Validity Periods for this Variable Definition."""
94
+ return [
95
+ VariableDefinition.from_model(validity_period)
96
+ for validity_period in ValidityPeriodsApi(
97
+ VardefClient.get_client(),
98
+ ).list_validity_periods(
99
+ variable_definition_id=self.id,
100
+ )
101
+ ]
102
+
103
+ @vardef_exception_handler
104
+ def list_patches(self) -> list["VariableDefinition"]:
105
+ """List all Patches for this Variable Definition."""
106
+ return [
107
+ VariableDefinition.from_model(patch)
108
+ for patch in PatchesApi(VardefClient.get_client()).list_patches(
109
+ variable_definition_id=self.id,
110
+ )
111
+ ]
112
+
113
+ @publishing_blocked_error_handler
114
+ @vardef_exception_handler
115
+ def update_draft(
116
+ self,
117
+ update_draft: UpdateDraft,
118
+ ) -> "VariableDefinition":
119
+ """Update this Variable Definition.
120
+
121
+ - Variable definition must have status 'DRAFT'.
122
+ - Supply only the fields to be changed. Other fields will retain their current values.
123
+
124
+ Args:
125
+ update_draft: The input with updated values.
126
+
127
+ Returns:
128
+ VariableDefinition: Updated Variable definition with all details.
129
+ """
130
+ updated = VariableDefinition.from_model(
131
+ DraftVariableDefinitionsApi(
132
+ VardefClient.get_client(),
133
+ ).update_variable_definition_by_id(
134
+ variable_definition_id=self.id,
135
+ active_group=config.get_active_group(),
136
+ update_draft=update_draft,
137
+ ),
138
+ )
139
+ self.__dict__.update(updated)
140
+
141
+ logger.info(
142
+ "✅ Successfully updated variable definition '%s' with ID '%s'",
143
+ updated.short_name,
144
+ updated.id,
145
+ )
146
+ return updated
147
+
148
+ @vardef_file_error_handler
149
+ def update_draft_from_file(
150
+ self,
151
+ file_path: PathLike | None = None,
152
+ ) -> "VariableDefinition":
153
+ """Update this Variable Definition.
154
+
155
+ Will automatically read the relevant file pertaining to this variable definition. Can
156
+ be overridden by specifying the file_path parameter.
157
+
158
+ - Variable definition must have status 'DRAFT'.
159
+ - Supply only the fields to be changed. Other fields will retain their current values.
160
+
161
+ Args:
162
+ file_path: Optionally specify the path to read from.
163
+
164
+ Returns:
165
+ VariableDefinition: Updated Variable definition with all details.
166
+ """
167
+ return self.update_draft(
168
+ _read_file_to_model(
169
+ file_path or self.get_file_path(),
170
+ UpdateDraft,
171
+ ),
172
+ )
173
+
174
+ @vardef_exception_handler
175
+ def delete_draft(
176
+ self,
177
+ ) -> str:
178
+ """Delete this Variable definition.
179
+
180
+ Variable definition must have status 'DRAFT'.
181
+
182
+ Returns:
183
+ str: A message if the operation was succsessful.
184
+
185
+ """
186
+ DraftVariableDefinitionsApi(
187
+ VardefClient.get_client(),
188
+ ).delete_variable_definition_by_id(
189
+ variable_definition_id=self.id,
190
+ active_group=config.get_active_group(),
191
+ )
192
+ return f"✅ Variable {self.id} safely deleted"
193
+
194
+ @vardef_exception_handler
195
+ def get_patch(self, patch_id: int) -> "VariableDefinition":
196
+ """Get a single Patch by ID.
197
+
198
+ Args:
199
+ patch_id (int): The ID of the patch.
200
+
201
+ Returns:
202
+ VariableDefinition: The desired patch.
203
+ """
204
+ return VariableDefinition.from_model(
205
+ PatchesApi(VardefClient.get_client()).get_patch(
206
+ variable_definition_id=self.id,
207
+ patch_id=patch_id,
208
+ ),
209
+ )
210
+
211
+ @vardef_exception_handler
212
+ def create_patch(
213
+ self,
214
+ patch: Patch,
215
+ valid_from: date | None = None,
216
+ ) -> "VariableDefinition":
217
+ """Create a new Patch for this Variable Definition.
218
+
219
+ Patches are to be used for minor changes which don't require a new Validity Period.
220
+ Examples of reasons for creating a new Patch:
221
+ - Correcting a typo
222
+ - Adding a translation
223
+ - Adding a subject field
224
+
225
+ Supply only the fields to be changed. Other fields will retain their current values.
226
+
227
+ Args:
228
+ patch: The input for a new patch.
229
+ valid_from: Optional date for selecting a Validity Period to create patch in. The date must
230
+ exactly match the Validity Period `valid_from`. If value is None the patch is
231
+ created in the last validity period.
232
+
233
+ Returns:
234
+ VariableDefinition: Variable Definition with all details.
235
+
236
+ """
237
+ new_patch = VariableDefinition.from_model(
238
+ PatchesApi(
239
+ VardefClient.get_client(),
240
+ ).create_patch(
241
+ variable_definition_id=self.id,
242
+ active_group=config.get_active_group(),
243
+ patch=patch,
244
+ valid_from=valid_from,
245
+ ),
246
+ )
247
+ self.__dict__.update(new_patch)
248
+
249
+ logger.info(
250
+ "✅ Successfully created patch with patch ID '%s' for variable definition '%s' with ID '%s'",
251
+ new_patch.patch_id,
252
+ new_patch.short_name,
253
+ new_patch.id,
254
+ )
255
+ return new_patch
256
+
257
+ @vardef_file_error_handler
258
+ def create_patch_from_file(
259
+ self,
260
+ file_path: PathLike | None = None,
261
+ valid_from: date | None = None,
262
+ ) -> "VariableDefinition":
263
+ """Create a new Patch for this Variable Definition from a file.
264
+
265
+ Will automatically read the relevant file pertaining to this variable definition. Can
266
+ be overridden by specifying the file_path parameter.
267
+
268
+ Patches are to be used for minor changes which don't require a new Validity Period.
269
+ Examples of reasons for creating a new Patch:
270
+ - Correcting a typo
271
+ - Adding a translation
272
+ - Adding a subject field
273
+
274
+ Supply only the fields to be changed. Other fields will retain their current values.
275
+
276
+ Args:
277
+ file_path: Optionally specify the path to read from.
278
+ valid_from: Optional date for selecting a Validity Period to create patch in. The date must
279
+ exactly match the Validity Period `valid_from`. If value is None the patch is
280
+ created in the last validity period.
281
+
282
+ Returns:
283
+ VariableDefinition: Variable Definition with all details.
284
+ """
285
+ new_patch = _read_file_to_model(
286
+ file_path or self.get_file_path(),
287
+ Patch,
288
+ )
289
+ if new_patch == Patch.from_dict(self.to_dict()):
290
+ raise ValueError(IDENTICAL_PATCH_ERROR_MESSAGE)
291
+ return self.create_patch(
292
+ patch=new_patch,
293
+ valid_from=valid_from,
294
+ )
295
+
296
+ @vardef_exception_handler
297
+ def create_validity_period(
298
+ self,
299
+ validity_period: ValidityPeriod,
300
+ ) -> "VariableDefinition":
301
+ """Create a new Validity Period for this Variable Definition.
302
+
303
+ In order to create a new Validity Period input must contain updated
304
+ 'definition' text for all present languages and a new valid from.
305
+
306
+ A new Validity Period should be created only when the fundamental definition
307
+ of the variable has changed. This way the previous definition can be preserved
308
+ for use in historical data.
309
+
310
+ Args:
311
+ validity_period: The input for new Validity Period
312
+
313
+ Returns:
314
+ VariableDefinition: Variable Definition with all details.
315
+ """
316
+ new_validity_period = VariableDefinition.from_model(
317
+ ValidityPeriodsApi(
318
+ VardefClient.get_client(),
319
+ ).create_validity_period(
320
+ variable_definition_id=self.id,
321
+ active_group=config.get_active_group(),
322
+ validity_period=validity_period,
323
+ ),
324
+ )
325
+ self.__dict__.update(new_validity_period)
326
+
327
+ logger.info(
328
+ "✅ Successfully created validity period that is valid from '%s' for variable definition '%s' with ID '%s'",
329
+ new_validity_period.valid_from,
330
+ new_validity_period.short_name,
331
+ new_validity_period.id,
332
+ )
333
+ return new_validity_period
334
+
335
+ @vardef_file_error_handler
336
+ def create_validity_period_from_file(
337
+ self,
338
+ file_path: PathLike | None = None,
339
+ ) -> "VariableDefinition":
340
+ """Create a new ValidityPeriod for this Variable Definition from a file.
341
+
342
+ In order to create a new Validity Period the input file must contain updated
343
+ 'definition' text for all present languages and a new valid from.
344
+
345
+ Args:
346
+ file_path: Optionally specify the path to read from.
347
+
348
+ Returns:
349
+ VariableDefinition: Variable Definition with all details.
350
+ """
351
+ return self.create_validity_period(
352
+ validity_period=_read_file_to_model(
353
+ file_path or self.get_file_path(),
354
+ ValidityPeriod,
355
+ ),
356
+ )
357
+
358
+ @publishing_blocked_error_handler
359
+ def publish_internal(self) -> "VariableDefinition":
360
+ """Publish this variable definition internally."""
361
+ if self.variable_status != VariableStatus.DRAFT.name:
362
+ msg = "That won't work here. Only variable definitions with status DRAFT may be published internally."
363
+ raise ValueError(
364
+ msg,
365
+ )
366
+ update = self.update_draft(
367
+ UpdateDraft(variable_status=VariableStatus.PUBLISHED_INTERNAL),
368
+ )
369
+ logger.info(
370
+ "✅ Variable definition '%s' with ID '%s' successfully published, new status: %s",
371
+ update.short_name,
372
+ update.id,
373
+ update.variable_status,
374
+ )
375
+ return update
376
+
377
+ @publishing_blocked_error_handler
378
+ def publish_external(self) -> "VariableDefinition":
379
+ """Publish this variable definition externally."""
380
+ if self.variable_status == VariableStatus.PUBLISHED_EXTERNAL.name:
381
+ msg = "That won't work here. The variable definition is already published."
382
+ raise ValueError(
383
+ msg,
384
+ )
385
+ if self.variable_status is VariableStatus.DRAFT:
386
+ update = self.update_draft(
387
+ UpdateDraft(variable_status=VariableStatus.PUBLISHED_EXTERNAL),
388
+ )
389
+ else:
390
+ update = self.create_patch(
391
+ Patch(variable_status=VariableStatus.PUBLISHED_EXTERNAL),
392
+ )
393
+ logger.info(
394
+ "✅ Variable definition '%s' with ID '%s' successfully published, new status: %s",
395
+ update.short_name,
396
+ update.id,
397
+ update.variable_status,
398
+ )
399
+ return update
400
+
401
+ def to_file(self) -> "VariableDefinition":
402
+ """Write this variable definition to file."""
403
+ file_path = create_variable_yaml(
404
+ model_instance=self,
405
+ )
406
+ self.set_file_path(file_path)
407
+ logger.info(
408
+ f"✅ Created editable variable definition file at {file_path}", # noqa: G004
409
+ )
410
+ return self
411
+
412
+ def to_dict(self) -> dict:
413
+ """Return as dictionary."""
414
+ return super().to_dict()
415
+
416
+ def __str__(self) -> str:
417
+ """Format as indented YAML."""
418
+ return _convert_to_yaml_output(self)
419
+
420
+ def __repr__(self) -> str:
421
+ """Format as indented YAML."""
422
+ return _convert_to_yaml_output(self)
@@ -1,34 +1,34 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: dapla-toolbelt-metadata
3
- Version: 0.2.1
3
+ Version: 0.9.11
4
4
  Summary: Dapla Toolbelt Metadata
5
- Home-page: https://github.com/statisticsnorway/dapla-toolbelt-metadata
6
- License: MIT
7
- Author: Team Metadata
8
- Author-email: metadata@ssb.no
9
- Requires-Python: >=3.10,<4.0
10
- Classifier: Development Status :: 4 - Beta
11
- Classifier: License :: OSI Approved :: MIT License
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.10
14
- Classifier: Programming Language :: Python :: 3.11
15
- Classifier: Programming Language :: Python :: 3.12
16
- Requires-Dist: arrow (>=1.3.0)
17
- Requires-Dist: beautifulsoup4 (>=4.12.3)
18
- Requires-Dist: cloudpathlib[gs] (>=0.17.0)
19
- Requires-Dist: dapla-toolbelt (>=1.3.3)
20
- Requires-Dist: pandas (>=1.4.2)
21
- Requires-Dist: pyarrow (>=8.0.0)
22
- Requires-Dist: pydantic (>=2.5.2)
23
- Requires-Dist: pyjwt (>=2.8.0)
24
- Requires-Dist: python-dotenv (>=1.0.1)
25
- Requires-Dist: requests (>=2.31.0)
26
- Requires-Dist: ssb-datadoc-model (>=6.0.0,<7.0.0)
27
- Requires-Dist: ssb-klass-python (>=0.0.9)
28
- Requires-Dist: typing-extensions (>=4.12.2)
5
+ Project-URL: homepage, https://github.com/statisticsnorway/dapla-toolbelt-metadata
6
+ Project-URL: repository, https://github.com/statisticsnorway/dapla-toolbelt-metadata
7
+ Project-URL: documentation, https://statisticsnorway.github.io/dapla-toolbelt-metadata
29
8
  Project-URL: Changelog, https://github.com/statisticsnorway/dapla-toolbelt-metadata/releases
30
- Project-URL: Documentation, https://statisticsnorway.github.io/dapla-toolbelt-metadata
31
- Project-URL: Repository, https://github.com/statisticsnorway/dapla-toolbelt-metadata
9
+ Author-email: Statistics Norway <metadata@ssb.no>
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Classifier: Development Status :: 4 - Beta
13
+ Requires-Python: >=3.10
14
+ Requires-Dist: arrow>=1.3.0
15
+ Requires-Dist: beautifulsoup4>=4.12.3
16
+ Requires-Dist: cloudpathlib[gs]>=0.17.0
17
+ Requires-Dist: google-auth>=2.38.0
18
+ Requires-Dist: lxml>=5.3.1
19
+ Requires-Dist: pandas>=2.3.3
20
+ Requires-Dist: pyarrow>=8.0.0
21
+ Requires-Dist: pydantic>=2.5.2
22
+ Requires-Dist: pyjwt>=2.8.0
23
+ Requires-Dist: python-dateutil>=2.9.0.post0
24
+ Requires-Dist: python-dotenv>=1.0.1
25
+ Requires-Dist: pytz>=2025.2
26
+ Requires-Dist: requests>=2.31.0
27
+ Requires-Dist: ruamel-yaml>=0.18.10
28
+ Requires-Dist: ssb-datadoc-model<9.0.0,>=8.0.0
29
+ Requires-Dist: ssb-klass-python>=1.0.1
30
+ Requires-Dist: typing-extensions>=4.12.2
31
+ Requires-Dist: urllib3>=2.5.0
32
32
  Description-Content-Type: text/markdown
33
33
 
34
34
  # Dapla Toolbelt Metadata
@@ -44,30 +44,29 @@ Description-Content-Type: text/markdown
44
44
  [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=statisticsnorway_dapla-toolbelt-metadata&metric=alert_status&token=ee0a4d273db2bf811222fca5dffccd4592e3d536)][sonarquality]
45
45
 
46
46
  [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)][pre-commit]
47
- [![Black](https://img.shields.io/badge/code%20style-black-000000.svg)][black]
48
47
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
49
- [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)][poetry]
48
+ [![uv](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json)][uv]
50
49
 
51
50
  [pypi status]: https://pypi.org/project/dapla-toolbelt-metadata/
52
51
  [documentation]: https://statisticsnorway.github.io/dapla-toolbelt-metadata
53
52
  [tests]: https://github.com/statisticsnorway/dapla-toolbelt-metadata/actions?workflow=Tests
54
-
55
53
  [sonarcov]: https://sonarcloud.io/summary/overall?id=statisticsnorway_dapla-toolbelt-metadata
56
54
  [sonarquality]: https://sonarcloud.io/summary/overall?id=statisticsnorway_dapla-toolbelt-metadata
57
55
  [pre-commit]: https://github.com/pre-commit/pre-commit
58
- [black]: https://github.com/psf/black
59
- [poetry]: https://python-poetry.org/
56
+ [uv]: https://docs.astral.sh/uv/
60
57
 
61
58
  Tools and clients for working with the Dapla Metadata system.
62
59
 
63
60
  ## Features
64
61
 
65
- - Create and update metadata for datasets (Datadoc).
62
+ - Create and update metadata for datasets (aka Datadoc).
63
+ - Read, create and update variable definitions (aka Vardef).
64
+ - Check compliance with SSBs naming standard.
66
65
 
67
66
  ### Coming
68
67
 
69
- - Read, create and update variable definitions.
70
68
  - Publish dataset metadata to Statistics Norway's data catalogue.
69
+ - Maintain classifications and code lists.
71
70
 
72
71
  ## Installation
73
72
 
@@ -111,4 +110,3 @@ This project was generated from [Statistics Norway]'s [SSB PyPI Template].
111
110
  [license]: https://github.com/statisticsnorway/dapla-toolbelt-metadata/blob/main/LICENSE
112
111
  [contributor guide]: https://github.com/statisticsnorway/dapla-toolbelt-metadata/blob/main/CONTRIBUTING.md
113
112
  [reference guide]: https://statisticsnorway.github.io/dapla-toolbelt-metadata/reference.html
114
-
@@ -0,0 +1,97 @@
1
+ dapla_metadata/__init__.py,sha256=37yh9XWYQoLIVIS_fDdwNN8OXzbYY-6kMYwvjQrLMJQ,428
2
+ dapla_metadata/_shared/__init__.py,sha256=qUFgnVhBVlPRQP0ePmY76c8FvWRrJ-9c5GvzibwERnQ,103
3
+ dapla_metadata/_shared/config.py,sha256=qx1Y39EPve0b2b_wCd-OTFE-Hnq3Fa50TcXnWeuSkug,3118
4
+ dapla_metadata/_shared/enums.py,sha256=_YORmacAlxtdC4WAvI0YKlE9dJX-T1Lq1fytL9CSB9A,493
5
+ dapla_metadata/_shared/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ dapla_metadata/dapla/__init__.py,sha256=tkapF-YwmruPPrKvN3pEoCZqb7xvJx_ogBM8XyGMuJI,130
7
+ dapla_metadata/dapla/user_info.py,sha256=UAerZkYfHwF2nrz0IS9vbI2X5lvzjxMrffKydU_UM8I,4085
8
+ dapla_metadata/datasets/__init__.py,sha256=an-REJgi7N8-S1SCz-MYO_8as6fMe03WvhjRP_hWWkg,293
9
+ dapla_metadata/datasets/_merge.py,sha256=hoNBqiPi1an2mF9ZFnl4K-E7eg9xhlzG3986iPwHAj0,13005
10
+ dapla_metadata/datasets/code_list.py,sha256=JtCE-5Q8grAKvkn0KKjzeGhO-96O7yGsastbuoakreg,9057
11
+ dapla_metadata/datasets/core.py,sha256=zofQ4MwCPCdStPXXjO9GUwpBVEmqGbzabmef-jmGvyw,20871
12
+ dapla_metadata/datasets/dapla_dataset_path_info.py,sha256=WPeV_mwKk2B9sXd14SaP-kTb1bOQ_8W2KtrqOG7sJIY,26867
13
+ dapla_metadata/datasets/dataset_parser.py,sha256=3dtRXNy1C8SfG8zTYWdY26nV4l-dG25IC_0J5t2bYwI,8285
14
+ dapla_metadata/datasets/model_validation.py,sha256=6qqq1ueTWRWBPTwEGJD49Pv7ksMEaq0iDtuOXelaw-s,7223
15
+ dapla_metadata/datasets/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ dapla_metadata/datasets/statistic_subject_mapping.py,sha256=ovT-bZv6eGPD3L0UIs5nIw4AjJrfZn0hyWyD72JBmhs,6395
17
+ dapla_metadata/datasets/compatibility/__init__.py,sha256=hKoLOIhF-BMS8EZQUaAI_S-rf6QXufyI0tr9LB3ly74,400
18
+ dapla_metadata/datasets/compatibility/_handlers.py,sha256=8ITKPeaNRpg2ACX-IKvu764z52yAHYMkQUx-52SjzVQ,13858
19
+ dapla_metadata/datasets/compatibility/_utils.py,sha256=bPhI0D78Le12IO3fOJhzijYrSBYbf8Lj3_YxJzupS7U,9030
20
+ dapla_metadata/datasets/compatibility/model_backwards_compatibility.py,sha256=W5AgCu1CGQgQh3-enN5_4Syrs12LPCF9dTUpULxY3_g,6038
21
+ dapla_metadata/datasets/external_sources/__init__.py,sha256=qvIdXwqyEmXNUCB94ZtZXRzifdW4hiXASFFPtC70f6E,83
22
+ dapla_metadata/datasets/external_sources/external_sources.py,sha256=9eIcOIUbaodNX1w9Tj2wl4U4wUmr5kF1R0i01fKUzGs,2974
23
+ dapla_metadata/datasets/utility/__init__.py,sha256=pp6tUcgUbo8iq9OPtFKQrTbLuI3uY7NHptwWSTpasOU,33
24
+ dapla_metadata/datasets/utility/constants.py,sha256=4ixDvz5nErQwXa3BEtaGZb2AFUUUldJtNZV46SKwUBc,2817
25
+ dapla_metadata/datasets/utility/enums.py,sha256=i6dcxWya5k4LjLdGGIM_H37rRndizug3peaAgoE5UdM,652
26
+ dapla_metadata/datasets/utility/urn.py,sha256=1NtM9OkTUe4_T5Iy8cR-ofwuR0gUlrtA7oQqEmgWKOc,8141
27
+ dapla_metadata/datasets/utility/utils.py,sha256=q76UJI8W4j2aHSq1jz_AfYnJmLfygEflgUrQpqQEPnY,20157
28
+ dapla_metadata/standards/__init__.py,sha256=n8jnMrudLuScSdfQ4UMJorc-Ptg3Y1-ilT8zAaQnM70,179
29
+ dapla_metadata/standards/name_validator.py,sha256=6-DQE_EKVd6UjL--EXpFcZDQtusVbSFaWaUY-CfOV2c,9184
30
+ dapla_metadata/standards/standard_validators.py,sha256=tcCiCI76wUVtMzXA2oCgdauZc0uGgUi11FKu-t7KGwQ,3767
31
+ dapla_metadata/standards/utils/__init__.py,sha256=AiM7JcpFsAgyuCyLDYZo9kI94wvIImMDGoV2lKhS4pE,42
32
+ dapla_metadata/standards/utils/constants.py,sha256=mhWNFnS6NMsRl0c_deIdzY7_bD_wKn_oej6rzDjgwq4,2578
33
+ dapla_metadata/variable_definitions/__init__.py,sha256=z48vevGb8UuQ8mwkqCtBGoyM-Ts53vUcKo7Ag5rE_Wc,482
34
+ dapla_metadata/variable_definitions/exceptions.py,sha256=ImB81bne-h45kX9lE5hIh80QAWkOPS52uzcOftuoouM,10118
35
+ dapla_metadata/variable_definitions/vardef.py,sha256=WUpiKfvgFGPhMdjYSFSmdlXQKAolmRgW4-t-EocddQs,13934
36
+ dapla_metadata/variable_definitions/vardok_id.py,sha256=hHX3muzz-cJD7fPJbt5QPwIWlUbuoxWxXXz-sn_s92k,1409
37
+ dapla_metadata/variable_definitions/vardok_vardef_id_pair.py,sha256=E4UEddg6VjcL3wdf2DbIu0v6071m7M6ll2MifegPwNA,1540
38
+ dapla_metadata/variable_definitions/variable_definition.py,sha256=CFy5i53zFp6rCoWlALe5HLCx-QaOg5fj3YeUnfWYQ6I,15020
39
+ dapla_metadata/variable_definitions/_generated/.openapi-generator-ignore,sha256=x9lryVB5wtVEuKQ5GcZ94b10RgtkVXbtvWXOArO1XsM,169
40
+ dapla_metadata/variable_definitions/_generated/README.md,sha256=Y4et1oAhZTCr7a-CZfLbIpyYnhKzpygNg-gj7qJ09Eg,7650
41
+ dapla_metadata/variable_definitions/_generated/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ dapla_metadata/variable_definitions/_generated/.openapi-generator/FILES,sha256=262V-LIx_NsddtK6OZVH1rRr6S7AQPhPO6g4scZiypY,800
43
+ dapla_metadata/variable_definitions/_generated/.openapi-generator/VERSION,sha256=Y6lrqS2bXoujk5K-DCAwRFdRmkCKuTgvlngEx6FY5So,7
44
+ dapla_metadata/variable_definitions/_generated/vardef_client/__init__.py,sha256=7WZfJtGCTCWX-IDogKS1V3BQl1HzaIfWzm5Xykrv930,4211
45
+ dapla_metadata/variable_definitions/_generated/vardef_client/api_client.py,sha256=D2Jd8RBNbrhGusN5TGz0JVF9euIwd9GgDrbD1Gbseog,29531
46
+ dapla_metadata/variable_definitions/_generated/vardef_client/api_response.py,sha256=FDrkcrL60n7sBj5kEEfbhGehtIsBcnKV9XsQUF-vZw0,738
47
+ dapla_metadata/variable_definitions/_generated/vardef_client/configuration.py,sha256=bzzTunhv7xUk_rKxipGopP9khWyTCD4-wu4TrJIyZNU,17979
48
+ dapla_metadata/variable_definitions/_generated/vardef_client/exceptions.py,sha256=YiEZFepEuBfg2aBZcuDSp7NXjk6VL06ecySIOJch13o,8444
49
+ dapla_metadata/variable_definitions/_generated/vardef_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ dapla_metadata/variable_definitions/_generated/vardef_client/rest.py,sha256=x4PWmg3IYQBr8OgnrWr3l4Ke2rElHP3zAEVxk2U-mOc,12022
51
+ dapla_metadata/variable_definitions/_generated/vardef_client/api/__init__.py,sha256=LsTxGiOxCBqPeztRvoCANeVr-t0ApkHUqWiouWM8YS8,343
52
+ dapla_metadata/variable_definitions/_generated/vardef_client/api/data_migration_api.py,sha256=P6eY76I0xayOxnqt8e6RS6jPk509qXv7FX6V_1km20s,34811
53
+ dapla_metadata/variable_definitions/_generated/vardef_client/api/draft_variable_definitions_api.py,sha256=C3ZBBNQbinZjVAkNUKg-XvK1tfHxU7JXKEGx5NUt7B8,39930
54
+ dapla_metadata/variable_definitions/_generated/vardef_client/api/patches_api.py,sha256=oAedyr4BaJzIKy2s1x9KsmS6gMaJB4GQrUVhsqxhniQ,39788
55
+ dapla_metadata/variable_definitions/_generated/vardef_client/api/validity_periods_api.py,sha256=MbAHYpKpSiNzSi0c1qrzIlVJ6-L4PYevGKQ7kfzo-z4,27016
56
+ dapla_metadata/variable_definitions/_generated/vardef_client/api/variable_definitions_api.py,sha256=BF6nw3wxw1FzIaQ6ShzPG3Ag7qIrAp2qhrtcD9o2y2o,27768
57
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/CompleteResponse.md,sha256=CpB_PB8BkLAM5pwDPHb9AjMtk5Lxkhrf3bpZZhtFGeo,4092
58
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/Contact.md,sha256=UrWzrB2oK38fWCV2XRQ8SBfBz9yRRKcNuO6h-A8ZOdw,847
59
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/DataMigrationApi.md,sha256=_PSmVqGcyHipdn5dtv3gKpzLkYnZnD6r56n07jN3LEY,3269
60
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/Draft.md,sha256=q0M9ccLM7_OCm4-AMS7oD9pxz5OfGI90x6Hf-vexz7E,2952
61
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/DraftVariableDefinitionsApi.md,sha256=kTuqDARkMqfixTqndJT8XPcRBlLAocR8qNa-XvP3lR8,9674
62
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/LanguageStringType.md,sha256=oruJPTD3C0qc7fhWCbKfkm595UjMWtYTqblOBdDYzRI,1012
63
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/Owner.md,sha256=_pZguqrnnuJzMBFJ0IYgDucjefs47VOB7w869wEWcz4,793
64
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/Patch.md,sha256=2bMQeGYSRy49icB7zviSG8xugSbN3RqrOOSGapE2PVw,3253
65
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/PatchesApi.md,sha256=i_XHjsBRJ2awop7JBHby_UcR0NzAoPhEzOUh79jdrDA,8537
66
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/PublicApi.md,sha256=Wsn54DoVnbO6uG476_uzRukRTTsf-xaZY55OBTarXmI,7839
67
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/SupportedLanguages.md,sha256=2MVFjtoEZVyFclVf7hp2_HqGyVzNFisZShSZRa0Ffoc,304
68
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/UpdateDraft.md,sha256=v8JAfsnJIDYWWXKNf9p88lHdCiBEcY1GUS0grumXpBM,3473
69
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriod.md,sha256=Owio0YiQdgdMB55C-uMb8TAr13sYp1APmJsFEty1AoE,3186
70
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/ValidityPeriodsApi.md,sha256=oKw2fbxeUqdR4JcDSFA0nwX5Emroog8OuoaVt7FORJo,8172
71
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableDefinitionsApi.md,sha256=Gm4oBYTzOx0-pZiocAhLWcWukMzk9980pmH38nGCdYE,10812
72
+ dapla_metadata/variable_definitions/_generated/vardef_client/docs/VariableStatus.md,sha256=UL4LmoMEdHA9Nv1XARIe8YMm6e5sA9KOtxkOU-Ujh74,418
73
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/__init__.py,sha256=AXEkxN7a89KC1oPZ_mZUp8MRJF8o-vXOd5HiL7bH99w,3788
74
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/complete_response.py,sha256=EGYcmV_QRqoSwhWyKcNKP5V2QdLbljgpa6Fc9fu9hY8,13411
75
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/contact.py,sha256=QQbiI34m467sFWV4LpN7vLxualKfOq9lns2QlaXPLkc,5551
76
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/draft.py,sha256=KW7Csy-HO41yIZZLE4l0qxdxNJ_a2AmBkBgMsBiAJ0s,12134
77
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/get_vardok_vardef_mapping_by_id200_response.py,sha256=uS59L1GEMYtcfiUagE-DBygEoYY6hRXJp_mXHz7Q4Yw,8424
78
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/language_string_type.py,sha256=f0gBl5gVpaC4pUcotaH1xtjMuusFfTKwTEjYAmBRBV8,6171
79
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/owner.py,sha256=FGMkldLEwqX56reRJByT9cIWAFWmEbwkD-Yg4nGdKVw,5323
80
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/patch.py,sha256=Nxmuv8hB0fblXzOKn25qei5MGJ1klZvcX1641F_6r90,12881
81
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/problem.py,sha256=UhZDwyLXpAVMMebD6-QhFl99r2IsoO_s1ftkmSdhMU4,7019
82
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/update_draft.py,sha256=a0KKFepHH2DA3HLCVX75O0vNDwDaBOLZoEQLoK9Wq5s,14135
83
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/validity_period.py,sha256=5S4VoIBh76UJSADptYcUctSstNuH1s8YJFGjeqda7Z0,12074
84
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_id_response.py,sha256=ArX_-UcvXaPBt1MGdCwaB-n5wRyzFsnCeEEV_u_zGzE,5149
85
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/vardok_vardef_id_pair_response.py,sha256=7GWZPE63_JdNb3vsecyieEtMPK8qD2995z5yxOS5GjY,5284
86
+ dapla_metadata/variable_definitions/_generated/vardef_client/models/variable_status.py,sha256=x9PZJMkE4rFAPm_d0e1PWdVoa8x049y16Po9iP7npP0,3541
87
+ dapla_metadata/variable_definitions/_utils/__init__.py,sha256=qAhRLJoTBqtR3f9xRXTRhD7-5Xg0Opk1Ks5F4AUYnpA,45
88
+ dapla_metadata/variable_definitions/_utils/_client.py,sha256=v1-9VjrdPI6-sroam5vXMPEV1dQMPsYk7KyGd48HjYw,971
89
+ dapla_metadata/variable_definitions/_utils/config.py,sha256=cc03xlcy_pnn06_6px0taO8LopmVJ9ud75oayGge8Vk,1814
90
+ dapla_metadata/variable_definitions/_utils/constants.py,sha256=zr5FNVCEz6TM9PVErQ672LNm-8CATrXyY94BGhV_ZJQ,2431
91
+ dapla_metadata/variable_definitions/_utils/files.py,sha256=JbPgPNQ7iA38juMqGEdcg5OjZZUwCb6NQtPL0AEspD0,10933
92
+ dapla_metadata/variable_definitions/_utils/template_files.py,sha256=7fcc7yEHOl5JUZ698kqj4IiikXPHBi3SrAVOk4wqQtw,3308
93
+ dapla_metadata/variable_definitions/_utils/variable_definition_files.py,sha256=sGhcSpckR9NtYGNh2oVkiCd5SI3bbJEBhc1PA2uShs0,4701
94
+ dapla_toolbelt_metadata-0.9.11.dist-info/METADATA,sha256=-pzWYKpPE-mwtxkq5QS-QiprNuQANUnOe5Al-9HIxCs,4855
95
+ dapla_toolbelt_metadata-0.9.11.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
96
+ dapla_toolbelt_metadata-0.9.11.dist-info/licenses/LICENSE,sha256=np3IfD5m0ZUofn_kVzDZqliozuiO6wrktw3LRPjyEiI,1073
97
+ dapla_toolbelt_metadata-0.9.11.dist-info/RECORD,,