pysdmx 1.5.1__py3-none-any.whl → 1.6.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.
- pysdmx/__init__.py +1 -1
- pysdmx/api/fmr/__init__.py +8 -3
- pysdmx/api/fmr/maintenance.py +158 -0
- pysdmx/api/qb/structure.py +1 -0
- pysdmx/api/qb/util.py +1 -0
- pysdmx/io/csv/__csv_aux_reader.py +99 -0
- pysdmx/io/csv/__csv_aux_writer.py +118 -0
- pysdmx/io/csv/sdmx10/reader/__init__.py +9 -14
- pysdmx/io/csv/sdmx10/writer/__init__.py +28 -2
- pysdmx/io/csv/sdmx20/__init__.py +0 -9
- pysdmx/io/csv/sdmx20/reader/__init__.py +8 -61
- pysdmx/io/csv/sdmx20/writer/__init__.py +32 -25
- pysdmx/io/csv/sdmx21/__init__.py +1 -0
- pysdmx/io/csv/sdmx21/reader/__init__.py +86 -0
- pysdmx/io/csv/sdmx21/writer/__init__.py +70 -0
- pysdmx/io/format.py +8 -0
- pysdmx/io/input_processor.py +16 -2
- pysdmx/io/json/fusion/messages/code.py +21 -4
- pysdmx/io/json/fusion/messages/concept.py +16 -8
- pysdmx/io/json/fusion/messages/dataflow.py +8 -1
- pysdmx/io/json/fusion/messages/dsd.py +15 -0
- pysdmx/io/json/fusion/messages/schema.py +8 -1
- pysdmx/io/json/sdmxjson2/messages/agency.py +43 -7
- pysdmx/io/json/sdmxjson2/messages/category.py +92 -7
- pysdmx/io/json/sdmxjson2/messages/code.py +239 -18
- pysdmx/io/json/sdmxjson2/messages/concept.py +78 -13
- pysdmx/io/json/sdmxjson2/messages/constraint.py +5 -5
- pysdmx/io/json/sdmxjson2/messages/core.py +121 -14
- pysdmx/io/json/sdmxjson2/messages/dataflow.py +63 -8
- pysdmx/io/json/sdmxjson2/messages/dsd.py +215 -20
- pysdmx/io/json/sdmxjson2/messages/map.py +200 -24
- pysdmx/io/json/sdmxjson2/messages/pa.py +36 -5
- pysdmx/io/json/sdmxjson2/messages/provider.py +35 -7
- pysdmx/io/json/sdmxjson2/messages/report.py +85 -7
- pysdmx/io/json/sdmxjson2/messages/schema.py +11 -12
- pysdmx/io/json/sdmxjson2/messages/structure.py +150 -2
- pysdmx/io/json/sdmxjson2/messages/vtl.py +547 -17
- pysdmx/io/json/sdmxjson2/reader/metadata.py +32 -0
- pysdmx/io/json/sdmxjson2/reader/structure.py +32 -0
- pysdmx/io/json/sdmxjson2/writer/__init__.py +9 -0
- pysdmx/io/json/sdmxjson2/writer/metadata.py +60 -0
- pysdmx/io/json/sdmxjson2/writer/structure.py +61 -0
- pysdmx/io/reader.py +28 -9
- pysdmx/io/serde.py +17 -0
- pysdmx/io/writer.py +45 -9
- pysdmx/io/xml/__structure_aux_reader.py +2 -2
- pysdmx/io/xml/__structure_aux_writer.py +5 -5
- pysdmx/io/xml/__write_data_aux.py +1 -54
- pysdmx/io/xml/__write_structure_specific_aux.py +1 -1
- pysdmx/io/xml/sdmx21/writer/generic.py +1 -1
- pysdmx/model/code.py +11 -1
- pysdmx/model/dataflow.py +26 -3
- pysdmx/model/map.py +12 -4
- pysdmx/model/message.py +9 -1
- pysdmx/toolkit/pd/_data_utils.py +100 -0
- pysdmx/toolkit/vtl/_validations.py +2 -3
- {pysdmx-1.5.1.dist-info → pysdmx-1.6.0.dist-info}/METADATA +3 -2
- {pysdmx-1.5.1.dist-info → pysdmx-1.6.0.dist-info}/RECORD +60 -48
- {pysdmx-1.5.1.dist-info → pysdmx-1.6.0.dist-info}/WHEEL +1 -1
- {pysdmx-1.5.1.dist-info → pysdmx-1.6.0.dist-info/licenses}/LICENSE +0 -0
pysdmx/model/dataflow.py
CHANGED
|
@@ -130,6 +130,9 @@ class Component(
|
|
|
130
130
|
commas, for series- and group-level attributes).
|
|
131
131
|
A post_init check makes this attribute mandatory for attributes.
|
|
132
132
|
array_def: Any additional constraints for array types.
|
|
133
|
+
urn: The URN of the component.
|
|
134
|
+
local_enum_ref: The URN of the enumeration (codelist or valuelist) from
|
|
135
|
+
which the local codes are taken.
|
|
133
136
|
"""
|
|
134
137
|
|
|
135
138
|
id: str
|
|
@@ -144,6 +147,7 @@ class Component(
|
|
|
144
147
|
attachment_level: Optional[str] = None
|
|
145
148
|
array_def: Optional[ArrayBoundaries] = None
|
|
146
149
|
urn: Optional[str] = None
|
|
150
|
+
local_enum_ref: Optional[str] = None
|
|
147
151
|
|
|
148
152
|
def __post_init__(self) -> None:
|
|
149
153
|
"""Validate the component."""
|
|
@@ -217,6 +221,20 @@ class Component(
|
|
|
217
221
|
else:
|
|
218
222
|
return None
|
|
219
223
|
|
|
224
|
+
@property
|
|
225
|
+
def enum_ref(self) -> Optional[str]:
|
|
226
|
+
"""Returns the URN of the enumeration from which the codes are taken.
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
The URN of the enumeration from which the codes are taken.
|
|
230
|
+
"""
|
|
231
|
+
if self.local_enum_ref:
|
|
232
|
+
return self.local_enum_ref
|
|
233
|
+
elif isinstance(self.concept, Concept) and self.concept.enum_ref:
|
|
234
|
+
return self.concept.enum_ref
|
|
235
|
+
else:
|
|
236
|
+
return None
|
|
237
|
+
|
|
220
238
|
def __str__(self) -> str:
|
|
221
239
|
"""Custom string representation without the class name."""
|
|
222
240
|
processed_output = []
|
|
@@ -232,7 +250,7 @@ class Component(
|
|
|
232
250
|
return f"{self.__class__.__name__}({', '.join(attrs)})"
|
|
233
251
|
|
|
234
252
|
|
|
235
|
-
class
|
|
253
|
+
class Group(
|
|
236
254
|
IdentifiableArtefact, frozen=True, omit_defaults=True, kw_only=True
|
|
237
255
|
):
|
|
238
256
|
"""A group of dimensions that can be used to identify a group."""
|
|
@@ -393,6 +411,7 @@ class DataflowInfo(
|
|
|
393
411
|
end_period: The oldest period for which data are available.
|
|
394
412
|
last_updated: When the dataflow was last updated.
|
|
395
413
|
dsd_ref: The URN of the data structure used by the dataflow.
|
|
414
|
+
groups: The sequence of groups defined in the data structure.
|
|
396
415
|
"""
|
|
397
416
|
|
|
398
417
|
id: str
|
|
@@ -408,6 +427,7 @@ class DataflowInfo(
|
|
|
408
427
|
end_period: Optional[str] = None
|
|
409
428
|
last_updated: Optional[datetime] = None
|
|
410
429
|
dsd_ref: Optional[str] = None
|
|
430
|
+
groups: Optional[Sequence[Group]] = None
|
|
411
431
|
|
|
412
432
|
def __str__(self) -> str:
|
|
413
433
|
"""Custom string representation without the class name."""
|
|
@@ -472,7 +492,8 @@ class Schema(Struct, frozen=True, omit_defaults=True, repr_omit_defaults=True):
|
|
|
472
492
|
version: str = "1.0"
|
|
473
493
|
artefacts: Sequence[str] = ()
|
|
474
494
|
generated: datetime = datetime.now(timezone.utc)
|
|
475
|
-
|
|
495
|
+
name: Optional[str] = None
|
|
496
|
+
groups: Optional[Sequence[Group]] = None
|
|
476
497
|
|
|
477
498
|
def __str__(self) -> str:
|
|
478
499
|
"""Custom string representation without the class name."""
|
|
@@ -533,12 +554,13 @@ class DataStructureDefinition(MaintainableArtefact, frozen=True, kw_only=True):
|
|
|
533
554
|
valid_from: The date from which the data structure is valid.
|
|
534
555
|
valid_to: The date until which the data structure is valid.
|
|
535
556
|
version: The version of the data structure.
|
|
557
|
+
components: The list of relevant components for this data structure.
|
|
536
558
|
evolving_structure: Whether new dimensions may be added under a
|
|
537
559
|
minor version update.
|
|
538
560
|
"""
|
|
539
561
|
|
|
540
562
|
components: Components
|
|
541
|
-
groups: Optional[Sequence[
|
|
563
|
+
groups: Optional[Sequence[Group]] = None
|
|
542
564
|
evolving_structure: bool = False
|
|
543
565
|
|
|
544
566
|
def __extract_artefacts(self) -> Sequence[str]:
|
|
@@ -572,6 +594,7 @@ class DataStructureDefinition(MaintainableArtefact, frozen=True, kw_only=True):
|
|
|
572
594
|
components=self.components,
|
|
573
595
|
version=self.version,
|
|
574
596
|
artefacts=self.__extract_artefacts(),
|
|
597
|
+
name=self.name,
|
|
575
598
|
)
|
|
576
599
|
|
|
577
600
|
@property
|
pysdmx/model/map.py
CHANGED
|
@@ -6,7 +6,7 @@ from typing import Any, Iterator, Literal, Optional, Sequence, Tuple, Union
|
|
|
6
6
|
|
|
7
7
|
from msgspec import Struct
|
|
8
8
|
|
|
9
|
-
from pysdmx.model.__base import MaintainableArtefact
|
|
9
|
+
from pysdmx.model.__base import Agency, MaintainableArtefact
|
|
10
10
|
from pysdmx.util._date_pattern_map import convert_dpm
|
|
11
11
|
|
|
12
12
|
|
|
@@ -77,7 +77,7 @@ class DatePatternMap(_BaseMap, frozen=True, omit_defaults=True, tag=True):
|
|
|
77
77
|
the target structure (e.g. `FREQ`). In this case, the input date
|
|
78
78
|
can be converted to a different format, depending on the
|
|
79
79
|
frequency of the converted data.
|
|
80
|
-
|
|
80
|
+
resolve_period: The point in time to resolve to when mapping from low
|
|
81
81
|
frequency to higher frequency periods.
|
|
82
82
|
"""
|
|
83
83
|
|
|
@@ -88,7 +88,7 @@ class DatePatternMap(_BaseMap, frozen=True, omit_defaults=True, tag=True):
|
|
|
88
88
|
id: Optional[str] = None
|
|
89
89
|
locale: str = "en"
|
|
90
90
|
pattern_type: Literal["fixed", "variable"] = "fixed"
|
|
91
|
-
|
|
91
|
+
resolve_period: Optional[
|
|
92
92
|
Literal["startOfPeriod", "endOfPeriod", "midPeriod"]
|
|
93
93
|
] = None
|
|
94
94
|
|
|
@@ -264,6 +264,14 @@ class MultiRepresentationMap(
|
|
|
264
264
|
target: Sequence[str] = []
|
|
265
265
|
maps: Sequence[MultiValueMap] = []
|
|
266
266
|
|
|
267
|
+
@property
|
|
268
|
+
def short_urn(self) -> str:
|
|
269
|
+
"""Returns the short URN for the MultiRepresentationMap."""
|
|
270
|
+
agency = (
|
|
271
|
+
self.agency.id if isinstance(self.agency, Agency) else self.agency
|
|
272
|
+
)
|
|
273
|
+
return f"RepresentationMap={agency}:{self.id}({self.version})"
|
|
274
|
+
|
|
267
275
|
def __iter__(
|
|
268
276
|
self,
|
|
269
277
|
) -> Iterator[MultiValueMap]:
|
|
@@ -300,7 +308,7 @@ class MultiComponentMap(_BaseMap, frozen=True, omit_defaults=True, tag=True):
|
|
|
300
308
|
|
|
301
309
|
source: Sequence[str]
|
|
302
310
|
target: Sequence[str]
|
|
303
|
-
values: MultiRepresentationMap
|
|
311
|
+
values: Union[MultiRepresentationMap, str]
|
|
304
312
|
|
|
305
313
|
|
|
306
314
|
class RepresentationMap(MaintainableArtefact, frozen=True, omit_defaults=True):
|
pysdmx/model/message.py
CHANGED
|
@@ -332,7 +332,7 @@ class MetadataMessage(Struct, frozen=True):
|
|
|
332
332
|
if self.reports:
|
|
333
333
|
return self.reports
|
|
334
334
|
else:
|
|
335
|
-
raise NotFound("No metadata reports
|
|
335
|
+
raise NotFound("No metadata reports were found in the message.")
|
|
336
336
|
|
|
337
337
|
|
|
338
338
|
class Message(StructureMessage, frozen=True):
|
|
@@ -349,6 +349,7 @@ class Message(StructureMessage, frozen=True):
|
|
|
349
349
|
|
|
350
350
|
data: Optional[Sequence[Dataset]] = None
|
|
351
351
|
submission: Optional[Sequence[SubmissionResult]] = None
|
|
352
|
+
reports: Optional[Sequence[MetadataReport]] = None
|
|
352
353
|
|
|
353
354
|
def __post_init__(self) -> None:
|
|
354
355
|
"""Checks if the content is valid."""
|
|
@@ -382,3 +383,10 @@ class Message(StructureMessage, frozen=True):
|
|
|
382
383
|
f"No Dataset with Short URN {short_urn} found in data.",
|
|
383
384
|
"Could not find the requested Dataset.",
|
|
384
385
|
)
|
|
386
|
+
|
|
387
|
+
def get_reports(self) -> Sequence[MetadataReport]:
|
|
388
|
+
"""Returns the metadata reports."""
|
|
389
|
+
if self.reports:
|
|
390
|
+
return self.reports
|
|
391
|
+
else:
|
|
392
|
+
raise NotFound("No metadata reports were found in the message.")
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
from typing import Any, Dict, List, Literal, Sequence, Tuple
|
|
2
|
+
|
|
3
|
+
import pandas as pd
|
|
4
|
+
|
|
5
|
+
from pysdmx.model.dataflow import Component, Schema
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def format_labels( # noqa: C901
|
|
9
|
+
df: pd.DataFrame,
|
|
10
|
+
labels: Literal["name", "both", "id"],
|
|
11
|
+
components: Sequence[Component],
|
|
12
|
+
) -> None:
|
|
13
|
+
"""Writes the labels to the DataFrame.
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
df: The DataFrame to write the labels to.
|
|
17
|
+
labels: The label type to write.
|
|
18
|
+
if "id" the id of the data is written.
|
|
19
|
+
if "name" the name of the data is written.
|
|
20
|
+
if "both" a string id:name is written.
|
|
21
|
+
components: The components of the data structure definition.
|
|
22
|
+
|
|
23
|
+
"""
|
|
24
|
+
if labels == "name":
|
|
25
|
+
for k in df.columns:
|
|
26
|
+
for component in components:
|
|
27
|
+
if component.id == k:
|
|
28
|
+
df.rename(
|
|
29
|
+
columns={k: component.concept.name}, # type: ignore[union-attr]
|
|
30
|
+
inplace=True,
|
|
31
|
+
)
|
|
32
|
+
elif labels == "both":
|
|
33
|
+
for k in df.columns:
|
|
34
|
+
v = df[k]
|
|
35
|
+
for component in components:
|
|
36
|
+
if component.id == k:
|
|
37
|
+
df[f"{k}:{component.concept.name}"] = v.apply( # type: ignore[union-attr]
|
|
38
|
+
lambda x: f"{x}:{x}"
|
|
39
|
+
)
|
|
40
|
+
df.drop(columns=[k], inplace=True)
|
|
41
|
+
|
|
42
|
+
else:
|
|
43
|
+
for k in df.columns:
|
|
44
|
+
for component in components:
|
|
45
|
+
if component.concept.name == k: # type: ignore[union-attr]
|
|
46
|
+
df.rename(
|
|
47
|
+
columns={k: component.concept.id},
|
|
48
|
+
inplace=True,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def get_codes(
|
|
53
|
+
dimension_code: str, structure: Schema, data: pd.DataFrame
|
|
54
|
+
) -> Tuple[List[str], List[str], List[Dict[str, Any]]]:
|
|
55
|
+
"""This function divides the components in Series and Obs."""
|
|
56
|
+
series_codes = []
|
|
57
|
+
groups = structure.groups
|
|
58
|
+
group_codes = []
|
|
59
|
+
obs_codes = [dimension_code, structure.components.measures[0].id]
|
|
60
|
+
|
|
61
|
+
# Getting the series and obs codes
|
|
62
|
+
for dim in structure.components.dimensions:
|
|
63
|
+
if dim.id != dimension_code:
|
|
64
|
+
series_codes.append(dim.id)
|
|
65
|
+
|
|
66
|
+
# Adding the attributes based on the attachment level
|
|
67
|
+
for att in structure.components.attributes:
|
|
68
|
+
matching_group = next(
|
|
69
|
+
(
|
|
70
|
+
group
|
|
71
|
+
for group in groups or []
|
|
72
|
+
if set(group.dimensions)
|
|
73
|
+
== set(att.attachment_level.split(",")) # type: ignore[union-attr]
|
|
74
|
+
),
|
|
75
|
+
None,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
if (
|
|
79
|
+
att.attachment_level != "D"
|
|
80
|
+
and att.id in data.columns
|
|
81
|
+
and groups is not None
|
|
82
|
+
and matching_group
|
|
83
|
+
):
|
|
84
|
+
group_codes.append(
|
|
85
|
+
{
|
|
86
|
+
"group_id": matching_group.id,
|
|
87
|
+
"attribute": att.id,
|
|
88
|
+
"dimensions": matching_group.dimensions,
|
|
89
|
+
}
|
|
90
|
+
)
|
|
91
|
+
elif att.attachment_level == "O" and att.id in data.columns:
|
|
92
|
+
obs_codes.append(att.id)
|
|
93
|
+
elif (
|
|
94
|
+
att.attachment_level is not None
|
|
95
|
+
and att.attachment_level != "D"
|
|
96
|
+
and att.id in data.columns
|
|
97
|
+
):
|
|
98
|
+
series_codes.append(att.id)
|
|
99
|
+
|
|
100
|
+
return series_codes, obs_codes, group_codes
|
|
@@ -10,7 +10,6 @@ from vtlengine.AST import (
|
|
|
10
10
|
)
|
|
11
11
|
|
|
12
12
|
from pysdmx.errors import Invalid
|
|
13
|
-
from pysdmx.io.xml.__tokens import RULE_SCHEME, UDO_SCHEME
|
|
14
13
|
from pysdmx.model import Reference
|
|
15
14
|
from pysdmx.model.vtl import (
|
|
16
15
|
Ruleset,
|
|
@@ -62,7 +61,7 @@ def _ruleset_scheme_validations(ruleset_scheme: RulesetScheme) -> None:
|
|
|
62
61
|
|
|
63
62
|
def _ruleset_scheme_reference_validations(ruleset_scheme: Reference) -> None:
|
|
64
63
|
"""Additional validation checks for ruleset schemes."""
|
|
65
|
-
if ruleset_scheme.sdmx_type !=
|
|
64
|
+
if ruleset_scheme.sdmx_type != "RulesetScheme":
|
|
66
65
|
raise Invalid(
|
|
67
66
|
"Reference in Ruleset Schemes must point to a Ruleset Scheme, "
|
|
68
67
|
f"got {ruleset_scheme.sdmx_type}"
|
|
@@ -105,7 +104,7 @@ def _user_defined_operator_scheme_validations(
|
|
|
105
104
|
|
|
106
105
|
def _udo_scheme_reference_validations(udo_scheme: Reference) -> None:
|
|
107
106
|
"""Additional validation checks for ruleset schemes."""
|
|
108
|
-
if udo_scheme.sdmx_type !=
|
|
107
|
+
if udo_scheme.sdmx_type != "UserDefinedOperatorScheme":
|
|
109
108
|
raise Invalid(
|
|
110
109
|
"Reference in User Defined Operator Schemes"
|
|
111
110
|
" must point to a Defined Operator Scheme, "
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pysdmx
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.0
|
|
4
4
|
Summary: Your opinionated Python SDMX library
|
|
5
5
|
License: Apache-2.0
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Keywords: sdmx,data discovery,data retrieval,metadata,fmr
|
|
7
8
|
Author: Xavier Sosnovsky
|
|
8
9
|
Author-email: <xavier.sosnovsky@bis.org>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
pysdmx/__extras_check.py,sha256=I39OaM1lAPBnyzHVJ7kA_ZA_tMeDAQLr6ZKqEQ9MK1Q,1659
|
|
2
|
-
pysdmx/__init__.py,sha256=
|
|
2
|
+
pysdmx/__init__.py,sha256=cHUjmNrPbr3mfScL4Gxdsxgf2PUgEDnYf5v8XTQl04Q,67
|
|
3
3
|
pysdmx/api/__init__.py,sha256=8lRaF6kEO51ehl0fmW_pHLvkN_34TtEhqhr3oKo6E6g,26
|
|
4
4
|
pysdmx/api/dc/__init__.py,sha256=oPU32X8CRZy4T1to9mO5KMqMwxQsVI424dPqai-I8zI,121
|
|
5
5
|
pysdmx/api/dc/_api.py,sha256=poy1FYFXnF6maBGy5lpOodf32-7QQjH8PCBNDkuOXxQ,7747
|
|
@@ -10,7 +10,8 @@ pysdmx/api/dc/query/_parsing_util.py,sha256=pUc5z6sijGmJZsLilAxiPsCSRIO7l2iznzL3
|
|
|
10
10
|
pysdmx/api/dc/query/_py_parser.py,sha256=_kVUk6Xu5jZdclng1F6eDSZS2-ok_yncI1y1q5lYpBU,1502
|
|
11
11
|
pysdmx/api/dc/query/_sql_parser.py,sha256=vQjhSyt6qA4jAHchkq4XXVhNPtKjKSVLzhoPkUyhJKk,1561
|
|
12
12
|
pysdmx/api/dc/query/util.py,sha256=9HALmvlgVCckaMTVG7sEFbAw_mBwfbL4K-Pac2KPSYw,915
|
|
13
|
-
pysdmx/api/fmr/__init__.py,sha256=
|
|
13
|
+
pysdmx/api/fmr/__init__.py,sha256=Ya25AH-os812eOF_laaOBpZqyAfa0um3wWpsKOJTGeA,40965
|
|
14
|
+
pysdmx/api/fmr/maintenance.py,sha256=AnR1beyL6nsoDM5LmDLXnRMW5JvhGHXTADf_INSNgUg,5920
|
|
14
15
|
pysdmx/api/gds/__init__.py,sha256=BBl75wEdcz9zPMfk6kAGHitRW39S774VL9xifMZ_uHs,11560
|
|
15
16
|
pysdmx/api/qb/__init__.py,sha256=vxdMJFFg4J_KWADrnzj_8KcU0UlwpJPdx0yiW3QJo9Y,1498
|
|
16
17
|
pysdmx/api/qb/availability.py,sha256=2yPHnTXu_jACNKNhhtXMkxVkfLK1Ewa5ucGAbRxvC5o,10181
|
|
@@ -20,32 +21,37 @@ pysdmx/api/qb/refmeta.py,sha256=rWhMcUkcQ0zYoiEVAVFOnykLLhMWFFZssFZh8z3kRng,1067
|
|
|
20
21
|
pysdmx/api/qb/registration.py,sha256=IURlmXcXQi8e-w5YXCgRNs07EQJZJ2bOdZb7M_k5iZ8,7132
|
|
21
22
|
pysdmx/api/qb/schema.py,sha256=f0V-fQl9GQ2YWhnZqUF_wogB2L9dRIdY_vT4XvYkqoI,5747
|
|
22
23
|
pysdmx/api/qb/service.py,sha256=ieLgOR27NNRD2P4FGhFmWVkJweGngAx-mWkTDfsVCyI,14001
|
|
23
|
-
pysdmx/api/qb/structure.py,sha256=
|
|
24
|
-
pysdmx/api/qb/util.py,sha256=
|
|
24
|
+
pysdmx/api/qb/structure.py,sha256=OoIlP3twT1-v4pY5wZyNlttmZOXQ5Vk-zc7j-qMtwXw,17814
|
|
25
|
+
pysdmx/api/qb/util.py,sha256=at2Sb2kVltSTDc1gKiqG6HtIFhjSx-Msbe--wCvRbQI,3667
|
|
25
26
|
pysdmx/errors.py,sha256=9bfujYykzfGMa1TuUOmH9QqghnZGOo556fvbKH2jFa8,3295
|
|
26
27
|
pysdmx/io/__init__.py,sha256=96ZCY1PfcWp_q2Nlo2tHJAK31sH_b05v9UkbR0vGdg0,180
|
|
28
|
+
pysdmx/io/csv/__csv_aux_reader.py,sha256=2RGzhga_VDnh2OVX_Bo-rR2hgAQxHXa7zt7-D5MVBu0,3994
|
|
29
|
+
pysdmx/io/csv/__csv_aux_writer.py,sha256=lCPl6hpyp12xhXlyimRlxxOT33RcgXDGTQZb8JguksI,4118
|
|
27
30
|
pysdmx/io/csv/__init__.py,sha256=53f2rPkwILigOqArgRQOOwLk-ha6zVTe4EypIsR7K6I,107
|
|
28
31
|
pysdmx/io/csv/sdmx10/__init__.py,sha256=NAAm_yodK-gzkuzewGQeYpF3f5nZmDA4vWGfT2KGTWc,38
|
|
29
|
-
pysdmx/io/csv/sdmx10/reader/__init__.py,sha256=
|
|
30
|
-
pysdmx/io/csv/sdmx10/writer/__init__.py,sha256=
|
|
31
|
-
pysdmx/io/csv/sdmx20/__init__.py,sha256=
|
|
32
|
-
pysdmx/io/csv/sdmx20/reader/__init__.py,sha256=
|
|
33
|
-
pysdmx/io/csv/sdmx20/writer/__init__.py,sha256=
|
|
34
|
-
pysdmx/io/
|
|
35
|
-
pysdmx/io/
|
|
32
|
+
pysdmx/io/csv/sdmx10/reader/__init__.py,sha256=uGc-sv4YXHteVQZPTdkVUkVZ6iKY7h7Fg56dw7VZ2UU,2735
|
|
33
|
+
pysdmx/io/csv/sdmx10/writer/__init__.py,sha256=d-kLcP711k1nmG_D4whDxqWCzODRT7HTqk95N-jXBK8,2923
|
|
34
|
+
pysdmx/io/csv/sdmx20/__init__.py,sha256=6_YCb4iuUWJRS9y0KSdf4ebNKblSlnTTzNC5c19kNk8,38
|
|
35
|
+
pysdmx/io/csv/sdmx20/reader/__init__.py,sha256=PmVXd8QXvXej6XSDAPsIc8VptLk69NK37-wunHH7Pvc,2846
|
|
36
|
+
pysdmx/io/csv/sdmx20/writer/__init__.py,sha256=puksYRzcog3wv9JGWA--6rvv9aRAn86Vsv1CyA7Em-c,2489
|
|
37
|
+
pysdmx/io/csv/sdmx21/__init__.py,sha256=I3_dwi4A4if62_mwEjqbOa-F7mhoIMf0D6szpDf3W7c,38
|
|
38
|
+
pysdmx/io/csv/sdmx21/reader/__init__.py,sha256=J1cCkZh3klgZZWjdQ_U1zkfzT_DVzQmdreGZhN33SLs,2866
|
|
39
|
+
pysdmx/io/csv/sdmx21/writer/__init__.py,sha256=CH8Nm7hqvXyN6XM_D2nJRmbKj6CJV-X1QzSF0WJrs0E,2484
|
|
40
|
+
pysdmx/io/format.py,sha256=EO-PyYpiU0WswvEGA5UHokladxPezcwBUo1AJTqxp1Q,5250
|
|
41
|
+
pysdmx/io/input_processor.py,sha256=kJuo3-zSuTD3eejGDCXS_5aBxnDwnAh8hO0Tl2dS_XY,6948
|
|
36
42
|
pysdmx/io/json/fusion/messages/__init__.py,sha256=C0LAG6UfIZcQdlCv5d_D1ZNIcCq04RxZYLAp6tLDqwY,1573
|
|
37
43
|
pysdmx/io/json/fusion/messages/category.py,sha256=E9jrzXenEpqDNUhT1JJLYxty37PSGegRtx45mB3-COg,4589
|
|
38
|
-
pysdmx/io/json/fusion/messages/code.py,sha256=
|
|
39
|
-
pysdmx/io/json/fusion/messages/concept.py,sha256=
|
|
44
|
+
pysdmx/io/json/fusion/messages/code.py,sha256=YayxSKiHa124WTr_lK8HTfXHomh_e0oDZvuydd29XKg,8300
|
|
45
|
+
pysdmx/io/json/fusion/messages/concept.py,sha256=k_Ym4J9Nibv7QV_UmIKsO5QfOdJVgJRlbk9SxRHHblA,3113
|
|
40
46
|
pysdmx/io/json/fusion/messages/constraint.py,sha256=dPkzhCWN49Y9ReSZPRFTdM6GWc0rU2BZTyFfWsqlX34,615
|
|
41
47
|
pysdmx/io/json/fusion/messages/core.py,sha256=GdzF3TNUGrB0gxuaaSpk9LaYqcdy_M6L2azExZQfM0Q,4843
|
|
42
|
-
pysdmx/io/json/fusion/messages/dataflow.py,sha256=
|
|
43
|
-
pysdmx/io/json/fusion/messages/dsd.py,sha256=
|
|
48
|
+
pysdmx/io/json/fusion/messages/dataflow.py,sha256=lsaMPjmA-KiM51I78wrONfNHyvfBSeAll5Sp0jmTezc,2972
|
|
49
|
+
pysdmx/io/json/fusion/messages/dsd.py,sha256=5n6AdhoJZ41A-BocFrqmTlprZX4WGOA2bAr_S57CrCw,8433
|
|
44
50
|
pysdmx/io/json/fusion/messages/map.py,sha256=TPsCFuUfk5Jhhe7CNvEoHuFNZFpHhvNiYFWeIEUx-sc,7695
|
|
45
51
|
pysdmx/io/json/fusion/messages/org.py,sha256=9gZpHg6o4fPGY9fUIDUCyKQCCLL6NYFHnQJkxdXD8v8,6264
|
|
46
52
|
pysdmx/io/json/fusion/messages/pa.py,sha256=6zN8Qxj5bdf5zo2N9TwYlSLyGxokvsELtk1--1cMbxw,1393
|
|
47
53
|
pysdmx/io/json/fusion/messages/report.py,sha256=ZE62ZmHlCXk3TxRTRWCDCKVMhnN0J5UjMEzrsnD5I3E,1551
|
|
48
|
-
pysdmx/io/json/fusion/messages/schema.py,sha256=
|
|
54
|
+
pysdmx/io/json/fusion/messages/schema.py,sha256=xBbpLyJNapJpzZA4vAvROmWTSNYymcpggqMZ_NjL444,2603
|
|
49
55
|
pysdmx/io/json/fusion/messages/vtl.py,sha256=7VGjDRWzKMO6WT4CnGvGBKinhX06DzrJmDRudnvN4XM,16092
|
|
50
56
|
pysdmx/io/json/fusion/reader/__init__.py,sha256=fpya2W7YJ6lcdupAybBawMtJI7PT0gy48gLkDbuPTWU,1295
|
|
51
57
|
pysdmx/io/json/gds/messages/__init__.py,sha256=5LqGtO3GDi2B6HM2eDGCSJCncLS8C4MQ7vd5YBvCRok,885
|
|
@@ -56,37 +62,42 @@ pysdmx/io/json/gds/messages/services.py,sha256=OUFmYK4XkNMoaw70n4QabyxzdRDh-0XeY
|
|
|
56
62
|
pysdmx/io/json/gds/messages/urn_resolver.py,sha256=w_wRRAwjaBw_yooSda1MXcD_aN63FdpFE7WFvcjHSeQ,1209
|
|
57
63
|
pysdmx/io/json/gds/reader/__init__.py,sha256=cXQvjSzRe4lTsGmru6qMYE_HU2DEccJSYKsQ5ayIpxw,373
|
|
58
64
|
pysdmx/io/json/sdmxjson2/messages/__init__.py,sha256=pqLbzZf-FkuSJWy8DLxtCXIu-Si2Mm-vDTzCqnJDNVA,1984
|
|
59
|
-
pysdmx/io/json/sdmxjson2/messages/agency.py,sha256=
|
|
60
|
-
pysdmx/io/json/sdmxjson2/messages/category.py,sha256=
|
|
61
|
-
pysdmx/io/json/sdmxjson2/messages/code.py,sha256=
|
|
62
|
-
pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=
|
|
63
|
-
pysdmx/io/json/sdmxjson2/messages/constraint.py,sha256=
|
|
64
|
-
pysdmx/io/json/sdmxjson2/messages/core.py,sha256=
|
|
65
|
-
pysdmx/io/json/sdmxjson2/messages/dataflow.py,sha256=
|
|
66
|
-
pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=
|
|
67
|
-
pysdmx/io/json/sdmxjson2/messages/map.py,sha256
|
|
68
|
-
pysdmx/io/json/sdmxjson2/messages/pa.py,sha256=
|
|
69
|
-
pysdmx/io/json/sdmxjson2/messages/provider.py,sha256=
|
|
70
|
-
pysdmx/io/json/sdmxjson2/messages/report.py,sha256=
|
|
71
|
-
pysdmx/io/json/sdmxjson2/messages/schema.py,sha256=
|
|
72
|
-
pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=
|
|
73
|
-
pysdmx/io/json/sdmxjson2/messages/vtl.py,sha256=
|
|
65
|
+
pysdmx/io/json/sdmxjson2/messages/agency.py,sha256=d9t_2HrcZcqu_Y-EchShWDRF5yJQn86urfcFl5qvWAc,3720
|
|
66
|
+
pysdmx/io/json/sdmxjson2/messages/category.py,sha256=k61oDSLNKl0G_Mov2AmC4ff1efCPsNfyNEbz0iajkpI,7656
|
|
67
|
+
pysdmx/io/json/sdmxjson2/messages/code.py,sha256=XX9-OC_KH1ZF0Gef0ucGky5yVYCZwcWcVAnVCN63noo,17245
|
|
68
|
+
pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=IRr6xfmFKsTrugnxbcWWUiUgEM11s8Oa5IW6mZA5NQA,5624
|
|
69
|
+
pysdmx/io/json/sdmxjson2/messages/constraint.py,sha256=6pONMHr7IT8O026Xnv6AjIMVmoS29ivNiOMPr1OWQZQ,1736
|
|
70
|
+
pysdmx/io/json/sdmxjson2/messages/core.py,sha256=Cb6U1J13KCXnGJ2P8xbThTg9GCdzhkIK-cA8EHbY6Js,10077
|
|
71
|
+
pysdmx/io/json/sdmxjson2/messages/dataflow.py,sha256=wjeq9yexTa012AtGdZsZflp3WQ6fP-3kas-gxADTFeQ,6256
|
|
72
|
+
pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=0J3PYq10aoqyoAw4KyJP4ObW2JHttaxZjR9xvgyA2aU,18941
|
|
73
|
+
pysdmx/io/json/sdmxjson2/messages/map.py,sha256=-hhUyPxIWKoIxij0qbuoFDsZMqmtMfclCMUme4c9SS0,16767
|
|
74
|
+
pysdmx/io/json/sdmxjson2/messages/pa.py,sha256=VoaPBgcWGwWU7h5IaVa5wNWncOoktWihSXjcP4vEb00,2780
|
|
75
|
+
pysdmx/io/json/sdmxjson2/messages/provider.py,sha256=W5FVPd03Q-P4h9ThPoPRTs-MAepsOj3k8m7vtEHt00A,4164
|
|
76
|
+
pysdmx/io/json/sdmxjson2/messages/report.py,sha256=thcZZUuoiJ6OJ9P33EOTN3PIHFKxdQUMapI7HmSoB4A,6571
|
|
77
|
+
pysdmx/io/json/sdmxjson2/messages/schema.py,sha256=Ejs8roep6bSL8Eyu7j18E6IiHXWJ3qSybnnRYNyio-E,2868
|
|
78
|
+
pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=1RBHqgVIigcJXOdFMJ5N7xHJ_aXtwAdma7EFpmFtBqE,10520
|
|
79
|
+
pysdmx/io/json/sdmxjson2/messages/vtl.py,sha256=xCErG_ojn_z1-KrFBInatY2q83lEyWUUB0g-QK-auzk,35168
|
|
74
80
|
pysdmx/io/json/sdmxjson2/reader/__init__.py,sha256=f9vTKscFIAQpAKh3pZ4ZKlZSKyGfj1yaZS9w7S0_hIc,1264
|
|
81
|
+
pysdmx/io/json/sdmxjson2/reader/metadata.py,sha256=fIuJL0y71leopBjqy8NqvzRzf9FeDBBzzh_VnzMGtFo,911
|
|
82
|
+
pysdmx/io/json/sdmxjson2/reader/structure.py,sha256=G2F23BR3BYfc_9thvDbRQHrmpxlK01mnu1myDpOohN0,889
|
|
83
|
+
pysdmx/io/json/sdmxjson2/writer/__init__.py,sha256=DZGkas1ghei4p6SZsIQI1LPToS-d8F1Nx75MC8reT7g,270
|
|
84
|
+
pysdmx/io/json/sdmxjson2/writer/metadata.py,sha256=qse5foElBdTWbxIc9rIH1B4DfOBMeLy7qocp3Y4cV7g,2043
|
|
85
|
+
pysdmx/io/json/sdmxjson2/writer/structure.py,sha256=kqINWWSFjowIKIwsD0Kvb29KYdW5VDT9fg9d1ccjQBY,2102
|
|
75
86
|
pysdmx/io/pd.py,sha256=1C5UnAT25EADOpNsRBooEdWNaJEGdmcwh6_R9O5MOrc,464
|
|
76
|
-
pysdmx/io/reader.py,sha256=
|
|
77
|
-
pysdmx/io/serde.py,sha256=
|
|
78
|
-
pysdmx/io/writer.py,sha256=
|
|
87
|
+
pysdmx/io/reader.py,sha256=RJJ55TMYUX5B06ELwKPtfKR3rJIkfyg_q8UskfnM76Y,10470
|
|
88
|
+
pysdmx/io/serde.py,sha256=I6Cpq0gLacko7x-GrT_YQP0UZhC3xrnjVbKCrY9xIYk,1421
|
|
89
|
+
pysdmx/io/writer.py,sha256=EiKGKujhfzr-Max3_nUNMvZOm8QPWmkXeZi50QLjT6A,5847
|
|
79
90
|
pysdmx/io/xml/__allowed_lxml_errors.py,sha256=PdIK2i6JwwGRh1Ogc5JA0hRySO7QXJKN-DI8EYtdjA0,225
|
|
80
91
|
pysdmx/io/xml/__data_aux.py,sha256=ztivjZANN1PJ63IvoMfx-5TA2AiPQTVPC_0YYHOT9Ns,4069
|
|
81
92
|
pysdmx/io/xml/__init__.py,sha256=tcUsSEiM3nBA7lDbZPwGZ7Vu_K9gQd8oliASUMTGjFE,105
|
|
82
93
|
pysdmx/io/xml/__parse_xml.py,sha256=SITC7Yptq_qY_exetRez90lJCukH1WsKDMqlk7Q1RaY,2899
|
|
83
94
|
pysdmx/io/xml/__ss_aux_reader.py,sha256=Tfp7oSb_0-AVEVdu7YFtj-SlBuEKp7fpg3-SxCmOHW0,2868
|
|
84
|
-
pysdmx/io/xml/__structure_aux_reader.py,sha256=
|
|
85
|
-
pysdmx/io/xml/__structure_aux_writer.py,sha256=
|
|
95
|
+
pysdmx/io/xml/__structure_aux_reader.py,sha256=dGPmAiW4j38fbsAJ8xCDwXgUcwpOCwgO5jQpvgoKD4Q,40258
|
|
96
|
+
pysdmx/io/xml/__structure_aux_writer.py,sha256=9x2wGYRP9vPGLlHA-3P5Xr3gY5g3gW5fmz0tDQJyH4U,43543
|
|
86
97
|
pysdmx/io/xml/__tokens.py,sha256=Y_SlFWYIXolsgjHoFq7pm3TYlEu07CR9TmJKk2jHfQ0,6823
|
|
87
98
|
pysdmx/io/xml/__write_aux.py,sha256=KHZxEhGSjZPRW93OvniZ0kHmiAJtKJu-2aLtMhsKt90,15396
|
|
88
|
-
pysdmx/io/xml/__write_data_aux.py,sha256=
|
|
89
|
-
pysdmx/io/xml/__write_structure_specific_aux.py,sha256=
|
|
99
|
+
pysdmx/io/xml/__write_data_aux.py,sha256=Ma0aGo97dzrkSQ-U0_ytVPec1zn2VB3rffTIoRNTNco,3365
|
|
100
|
+
pysdmx/io/xml/__write_structure_specific_aux.py,sha256=3u7mAgFeP1bmhsYrIGlbOm31LDCN4y7AGA1H-IvW02g,8862
|
|
90
101
|
pysdmx/io/xml/config.py,sha256=R24cczVkzkhjVLXpv-qfEm88W3_QTqVt2Qofi8IvJ5Y,93
|
|
91
102
|
pysdmx/io/xml/doc_validation.py,sha256=qS-riLo3fMNLBrsQWzizeVNePuYT9W8wp9q-xE3QXto,1842
|
|
92
103
|
pysdmx/io/xml/header.py,sha256=_XiruPAfMtr4wudCpiuhFXDvRgWITGQ9GZVG3lMvWcc,5535
|
|
@@ -99,7 +110,7 @@ pysdmx/io/xml/sdmx21/reader/structure_specific.py,sha256=S3-gLmaBFjBRIr25qQtlrao
|
|
|
99
110
|
pysdmx/io/xml/sdmx21/reader/submission.py,sha256=8daiBW-sIVGaB6lYwHqJNkLI7IixMSydCK-0ZO8ri4I,1711
|
|
100
111
|
pysdmx/io/xml/sdmx21/writer/__init__.py,sha256=QQGFAss26njCC4eKYxhBcI9LYm5NHuJaAJGKCrIrL80,31
|
|
101
112
|
pysdmx/io/xml/sdmx21/writer/error.py,sha256=0wkX7K_n2oZNkOKg_zpl9Id82qP72Lqof-T-ZLGoZ1M,353
|
|
102
|
-
pysdmx/io/xml/sdmx21/writer/generic.py,sha256=
|
|
113
|
+
pysdmx/io/xml/sdmx21/writer/generic.py,sha256=eir14yUVXIgCrh-ZM6zVOCcwQWsYLfUYh21UdzPtJp8,15759
|
|
103
114
|
pysdmx/io/xml/sdmx21/writer/structure.py,sha256=S3qoNgXxrakn2V4NLdL5U5mAA16XisI0PpJDuxqalFE,2084
|
|
104
115
|
pysdmx/io/xml/sdmx21/writer/structure_specific.py,sha256=iXc1J-RzoKyRznvgGgdTSeUfyqZLouI8CtSq2YhGBWI,2877
|
|
105
116
|
pysdmx/io/xml/sdmx30/__init__.py,sha256=8BScJFEgLy8DoUreu2RBUtxjGjKyClkKBI_Qtarbk-Y,38
|
|
@@ -120,13 +131,13 @@ pysdmx/io/xml/utils.py,sha256=ljrocQwPTYycg3I68sqYI5pF8qukNccSCMM9Xf_Tag0,583
|
|
|
120
131
|
pysdmx/model/__base.py,sha256=H5OpCpi6fGxB30vFn-lCstTczSdOB4YJiBynThovQs4,13810
|
|
121
132
|
pysdmx/model/__init__.py,sha256=gmY8uGK0_SK9Ca5TqtYJqPSXvO9godlDKu2rhYouPSU,4984
|
|
122
133
|
pysdmx/model/category.py,sha256=WWWysaTdlcU8KZpQyZgbZkrOelNVCGOfVUk_APJxm-w,6031
|
|
123
|
-
pysdmx/model/code.py,sha256=
|
|
134
|
+
pysdmx/model/code.py,sha256=Wu6rEXeZf_XA0aBrDXgN-3yvySAHH7SAjrWliFlmC24,12799
|
|
124
135
|
pysdmx/model/concept.py,sha256=mQfqJdtWc10WdTKX_Mw7Znw65cN3QO-kCar9MWYeWO4,9645
|
|
125
|
-
pysdmx/model/dataflow.py,sha256=
|
|
136
|
+
pysdmx/model/dataflow.py,sha256=RDuL3GMhfMR5Dn1bTb4saWhn5v6igcJSKZ4d7ip7WPw,23887
|
|
126
137
|
pysdmx/model/dataset.py,sha256=Lbr7tYonGHD3NZUD-M9hK2puaEAluOVPG2DbkOohzMM,4861
|
|
127
138
|
pysdmx/model/gds.py,sha256=QrnmI8Hn--C95gGXCeUeWwhn-Ur7DuT08Cg7oPJIEVI,4976
|
|
128
|
-
pysdmx/model/map.py,sha256=
|
|
129
|
-
pysdmx/model/message.py,sha256=
|
|
139
|
+
pysdmx/model/map.py,sha256=vMRfhNUuKBAgJPYrqBCkGYfV6CIzbIr1gPPkYj1Z-aU,17529
|
|
140
|
+
pysdmx/model/message.py,sha256=OWbsHC4w8Qt__cleuKCzd3Y4oKUDv2OJjw7kzwuAG5Q,14773
|
|
130
141
|
pysdmx/model/metadata.py,sha256=EwElZZ8oewpuaEDDWM9ZV95Xvklcq333qxqPwoUqmXU,7653
|
|
131
142
|
pysdmx/model/organisation.py,sha256=k6ZQ_O4l7174Y8tr-nnMnsUL0q0O8Rw3q4mIWmJUh2A,4706
|
|
132
143
|
pysdmx/model/submission.py,sha256=iMQSvt-BYuDrqPEBcjw_wWNp74Vsx2OnEj3tnkth0Z8,833
|
|
@@ -134,15 +145,16 @@ pysdmx/model/vtl.py,sha256=k7WIb89876xKlf7k0R9sgZ1VVlRrIkbV7FzvMFZn8e0,6985
|
|
|
134
145
|
pysdmx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
135
146
|
pysdmx/toolkit/__init__.py,sha256=yBRw4FXQH_RUJgF6vwZscNwCVBt-FMwslJEfDKa7eXo,26
|
|
136
147
|
pysdmx/toolkit/pd/__init__.py,sha256=3JoCZHamJR4mZfLt9GmaznLlG_YilmY0hAhuW5COQC8,3138
|
|
148
|
+
pysdmx/toolkit/pd/_data_utils.py,sha256=_aF2AnN_TY1UuZenxQiFAlFAAnfh8bB5DBEt6uJkd1k,3305
|
|
137
149
|
pysdmx/toolkit/vtl/__init__.py,sha256=nVwtISeFiT4tr2gNjb2A-P_IRAdqv6Mn7EOgFkaRleg,216
|
|
138
|
-
pysdmx/toolkit/vtl/_validations.py,sha256=
|
|
150
|
+
pysdmx/toolkit/vtl/_validations.py,sha256=Djc5hHpj79SksvnAA0vL5EnpsDCdQ_BmB6zsr7Ze9Eg,5639
|
|
139
151
|
pysdmx/toolkit/vtl/script_generation.py,sha256=YOP_-MMcIdDIHYa8HIMuVCN9N-S9CQD8bH5xpF1kc2E,3235
|
|
140
152
|
pysdmx/toolkit/vtl/validation.py,sha256=UieJUYwxkw9McHZwixKFQdgYKFsgFwFo5XCLIIDcr7Q,3594
|
|
141
153
|
pysdmx/util/__init__.py,sha256=m_XWRAmVJ7F6ai4Ckrj_YuPbhg3cJZAXeZrEThrL88k,3997
|
|
142
154
|
pysdmx/util/_date_pattern_map.py,sha256=IS1qONwVHbTBNIFCT0Rqbijj2a9mYvs7onXSK6GeQAQ,1620
|
|
143
155
|
pysdmx/util/_model_utils.py,sha256=d0XY8cnxvviQtkJJInVik7LWeuqX-eb4-zikFortL58,2335
|
|
144
156
|
pysdmx/util/_net_utils.py,sha256=nOTz_x3FgFrwKh42_J70IqYXz9duQkMFJWtejZXcLHs,1326
|
|
145
|
-
pysdmx-1.
|
|
146
|
-
pysdmx-1.
|
|
147
|
-
pysdmx-1.
|
|
148
|
-
pysdmx-1.
|
|
157
|
+
pysdmx-1.6.0.dist-info/METADATA,sha256=lMABrenHbBZfRuFItDBUNi99bSi1pRmIFm9NuQ78vZc,4712
|
|
158
|
+
pysdmx-1.6.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
159
|
+
pysdmx-1.6.0.dist-info/licenses/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
|
|
160
|
+
pysdmx-1.6.0.dist-info/RECORD,,
|
|
File without changes
|