pysdmx 1.5.2__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/__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 +23 -0
- 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.2.dist-info → pysdmx-1.6.0.dist-info}/METADATA +3 -2
- {pysdmx-1.5.2.dist-info → pysdmx-1.6.0.dist-info}/RECORD +58 -46
- {pysdmx-1.5.2.dist-info → pysdmx-1.6.0.dist-info}/WHEEL +1 -1
- {pysdmx-1.5.2.dist-info → pysdmx-1.6.0.dist-info/licenses}/LICENSE +0 -0
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,26 +62,31 @@ 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
|
|
@@ -85,8 +96,8 @@ pysdmx/io/xml/__structure_aux_reader.py,sha256=dGPmAiW4j38fbsAJ8xCDwXgUcwpOCwgO5
|
|
|
85
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
|