pysdmx 1.10.1__py3-none-any.whl → 1.11.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/maintenance.py +10 -5
- pysdmx/io/input_processor.py +4 -0
- pysdmx/io/json/fusion/messages/dsd.py +19 -14
- pysdmx/io/json/fusion/messages/msd.py +6 -9
- pysdmx/io/json/sdmxjson2/messages/core.py +12 -5
- pysdmx/io/json/sdmxjson2/messages/dsd.py +11 -17
- pysdmx/io/json/sdmxjson2/messages/msd.py +2 -5
- pysdmx/io/json/sdmxjson2/messages/report.py +7 -3
- pysdmx/io/json/sdmxjson2/messages/structure.py +7 -3
- pysdmx/io/json/sdmxjson2/reader/metadata.py +3 -3
- pysdmx/io/json/sdmxjson2/reader/structure.py +3 -3
- pysdmx/io/json/sdmxjson2/writer/_helper.py +118 -0
- pysdmx/io/json/sdmxjson2/writer/v2_0/__init__.py +1 -0
- pysdmx/io/json/sdmxjson2/writer/v2_0/metadata.py +33 -0
- pysdmx/io/json/sdmxjson2/writer/v2_0/structure.py +33 -0
- pysdmx/io/json/sdmxjson2/writer/v2_1/__init__.py +1 -0
- pysdmx/io/json/sdmxjson2/writer/v2_1/metadata.py +31 -0
- pysdmx/io/json/sdmxjson2/writer/v2_1/structure.py +33 -0
- pysdmx/io/reader.py +12 -3
- pysdmx/io/writer.py +13 -3
- pysdmx/io/xml/__ss_aux_reader.py +39 -17
- pysdmx/io/xml/__structure_aux_reader.py +221 -33
- pysdmx/io/xml/__structure_aux_writer.py +304 -5
- pysdmx/io/xml/__tokens.py +12 -0
- pysdmx/io/xml/__write_aux.py +9 -0
- pysdmx/io/xml/sdmx21/writer/generic.py +2 -2
- pysdmx/model/dataflow.py +2 -2
- pysdmx/toolkit/pd/_data_utils.py +1 -1
- {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/METADATA +7 -1
- {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/RECORD +33 -28
- {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/WHEEL +1 -1
- pysdmx/io/json/sdmxjson2/writer/metadata.py +0 -60
- pysdmx/io/json/sdmxjson2/writer/structure.py +0 -61
- {pysdmx-1.10.1.dist-info → pysdmx-1.11.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -14,6 +14,7 @@ from pysdmx.io.xml.__tokens import (
|
|
|
14
14
|
CL,
|
|
15
15
|
CL_LOW,
|
|
16
16
|
CLASS,
|
|
17
|
+
COMPONENT_MAP,
|
|
17
18
|
CON,
|
|
18
19
|
CON_ID,
|
|
19
20
|
CONDITIONAL,
|
|
@@ -52,10 +53,12 @@ from pysdmx.io.xml.__tokens import (
|
|
|
52
53
|
POSITION,
|
|
53
54
|
PROV_AGREEMENT,
|
|
54
55
|
REF,
|
|
56
|
+
REPRESENTATION_MAP,
|
|
55
57
|
ROLE,
|
|
56
58
|
RULE,
|
|
57
59
|
RULE_SCHEME,
|
|
58
60
|
STR_USAGE,
|
|
61
|
+
STRUCTURE_MAP,
|
|
59
62
|
TELEPHONE,
|
|
60
63
|
TEXT_FORMAT,
|
|
61
64
|
TEXT_TYPE,
|
|
@@ -89,21 +92,30 @@ from pysdmx.io.xml.__write_aux import (
|
|
|
89
92
|
from pysdmx.model import (
|
|
90
93
|
AgencyScheme,
|
|
91
94
|
Codelist,
|
|
95
|
+
ComponentMap,
|
|
92
96
|
Concept,
|
|
93
97
|
ConceptScheme,
|
|
94
98
|
CustomType,
|
|
95
99
|
CustomTypeScheme,
|
|
96
100
|
DataType,
|
|
101
|
+
DatePatternMap,
|
|
97
102
|
Facets,
|
|
103
|
+
FixedValueMap,
|
|
98
104
|
Hierarchy,
|
|
105
|
+
ImplicitComponentMap,
|
|
106
|
+
MultiComponentMap,
|
|
107
|
+
MultiValueMap,
|
|
99
108
|
NamePersonalisation,
|
|
100
109
|
NamePersonalisationScheme,
|
|
110
|
+
RepresentationMap,
|
|
101
111
|
Ruleset,
|
|
102
112
|
RulesetScheme,
|
|
113
|
+
StructureMap,
|
|
103
114
|
Transformation,
|
|
104
115
|
TransformationScheme,
|
|
105
116
|
UserDefinedOperator,
|
|
106
117
|
UserDefinedOperatorScheme,
|
|
118
|
+
ValueMap,
|
|
107
119
|
VtlCodelistMapping,
|
|
108
120
|
VtlConceptMapping,
|
|
109
121
|
VtlDataflowMapping,
|
|
@@ -173,6 +185,9 @@ STR_DICT_TYPE_LIST_21 = {
|
|
|
173
185
|
ConceptScheme: "Concepts",
|
|
174
186
|
DataStructureDefinition: "DataStructures",
|
|
175
187
|
Dataflow: "Dataflows",
|
|
188
|
+
RepresentationMap: "RepresentationMaps",
|
|
189
|
+
StructureMap: "StructureMaps",
|
|
190
|
+
DatePatternMap: "DatePatternMaps",
|
|
176
191
|
CustomTypeScheme: "CustomTypes",
|
|
177
192
|
VtlMappingScheme: "VtlMappings",
|
|
178
193
|
NamePersonalisationScheme: "NamePersonalisations",
|
|
@@ -189,6 +204,9 @@ STR_DICT_TYPE_LIST_30 = {
|
|
|
189
204
|
ConceptScheme: "ConceptSchemes",
|
|
190
205
|
DataStructureDefinition: "DataStructures",
|
|
191
206
|
Dataflow: "Dataflows",
|
|
207
|
+
RepresentationMap: "RepresentationMaps",
|
|
208
|
+
StructureMap: "StructureMaps",
|
|
209
|
+
DatePatternMap: "DatePatternMaps",
|
|
192
210
|
CustomTypeScheme: "CustomTypeSchemes",
|
|
193
211
|
VtlMappingScheme: "VtlMappingSchemes",
|
|
194
212
|
NamePersonalisationScheme: "NamePersonalisationSchemes",
|
|
@@ -564,10 +582,25 @@ def __write_attribute_relation( # noqa: C901
|
|
|
564
582
|
f"{group_id}</{ABBR_STR}:{GROUP}>"
|
|
565
583
|
)
|
|
566
584
|
else:
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
585
|
+
is_dimension = comps_to_relate[0] in dim_names
|
|
586
|
+
if is_dimension:
|
|
587
|
+
for comp_name in comps_to_relate:
|
|
588
|
+
outfile += (
|
|
589
|
+
f"{add_indent(indent)}<{ABBR_STR}:{DIM}>"
|
|
590
|
+
f"{comp_name}</{ABBR_STR}:{DIM}>"
|
|
591
|
+
)
|
|
592
|
+
else:
|
|
593
|
+
outfile += f"{add_indent(indent)}<{ABBR_STR}:Observation/>"
|
|
594
|
+
measure_relationship += (
|
|
595
|
+
f"{indent}<{ABBR_STR}:{MEASURE_RELATIONSHIP}>"
|
|
596
|
+
)
|
|
597
|
+
for comp_name in comps_to_relate:
|
|
598
|
+
measure_relationship += (
|
|
599
|
+
f"{add_indent(indent)}<{ABBR_STR}:{MSR}>"
|
|
600
|
+
f"{comp_name}</{ABBR_STR}:{MSR}>"
|
|
601
|
+
)
|
|
602
|
+
measure_relationship += (
|
|
603
|
+
f"{indent}</{ABBR_STR}:{MEASURE_RELATIONSHIP}>"
|
|
571
604
|
)
|
|
572
605
|
|
|
573
606
|
else:
|
|
@@ -675,8 +708,13 @@ def __write_concept_identity(
|
|
|
675
708
|
) -> str:
|
|
676
709
|
if isinstance(identity, ItemReference):
|
|
677
710
|
ref = identity
|
|
711
|
+
elif identity.urn is not None:
|
|
712
|
+
ref = parse_item_urn(identity.urn)
|
|
678
713
|
else:
|
|
679
|
-
|
|
714
|
+
raise Invalid(
|
|
715
|
+
f"Cannot select concept identity without URN. "
|
|
716
|
+
f"Concept id={identity.id!r}"
|
|
717
|
+
)
|
|
680
718
|
|
|
681
719
|
outfile = f"{indent}<{ABBR_STR}:{CON_ID}>"
|
|
682
720
|
if references_30:
|
|
@@ -841,12 +879,273 @@ def __write_prov_agreement(
|
|
|
841
879
|
return outfile
|
|
842
880
|
|
|
843
881
|
|
|
882
|
+
def __write_value_map(
|
|
883
|
+
value_map: Union[ValueMap, MultiValueMap], indent: str
|
|
884
|
+
) -> str:
|
|
885
|
+
"""Writes a ValueMap or MultiValueMap (RepresentationMapping)."""
|
|
886
|
+
outfile = f"{indent}<{ABBR_STR}:RepresentationMapping>"
|
|
887
|
+
|
|
888
|
+
# MultiValueMap
|
|
889
|
+
if isinstance(value_map, MultiValueMap):
|
|
890
|
+
for s in value_map.source:
|
|
891
|
+
outfile += (
|
|
892
|
+
f"{add_indent(indent)}<{ABBR_STR}:SourceValue>"
|
|
893
|
+
f"{__escape_xml(str(s))}"
|
|
894
|
+
f"</{ABBR_STR}:SourceValue>"
|
|
895
|
+
)
|
|
896
|
+
for t in value_map.target:
|
|
897
|
+
outfile += (
|
|
898
|
+
f"{add_indent(indent)}<{ABBR_STR}:TargetValue>"
|
|
899
|
+
f"{__escape_xml(str(t))}"
|
|
900
|
+
f"</{ABBR_STR}:TargetValue>"
|
|
901
|
+
)
|
|
902
|
+
outfile += f"{indent}</{ABBR_STR}:RepresentationMapping>"
|
|
903
|
+
return outfile
|
|
904
|
+
|
|
905
|
+
# ValueMap
|
|
906
|
+
outfile += (
|
|
907
|
+
f"{add_indent(indent)}<{ABBR_STR}:SourceValue>"
|
|
908
|
+
f"{__escape_xml(str(value_map.source))}"
|
|
909
|
+
f"</{ABBR_STR}:SourceValue>"
|
|
910
|
+
)
|
|
911
|
+
outfile += (
|
|
912
|
+
f"{add_indent(indent)}<{ABBR_STR}:TargetValue>"
|
|
913
|
+
f"{__escape_xml(str(value_map.target))}"
|
|
914
|
+
f"</{ABBR_STR}:TargetValue>"
|
|
915
|
+
)
|
|
916
|
+
outfile += f"{indent}</{ABBR_STR}:RepresentationMapping>"
|
|
917
|
+
return outfile
|
|
918
|
+
|
|
919
|
+
|
|
920
|
+
def __write_multi_component_map(
|
|
921
|
+
comp_map: MultiComponentMap, indent: str
|
|
922
|
+
) -> str:
|
|
923
|
+
"""Writes a MultiComponentMap (1-n, n-1, n-n) to the XML file."""
|
|
924
|
+
outfile = f"{indent}<{ABBR_STR}:{COMPONENT_MAP}>"
|
|
925
|
+
|
|
926
|
+
for s in comp_map.source:
|
|
927
|
+
outfile += (
|
|
928
|
+
f"{add_indent(indent)}<{ABBR_STR}:Source>"
|
|
929
|
+
f"{__escape_xml(str(s))}"
|
|
930
|
+
f"</{ABBR_STR}:Source>"
|
|
931
|
+
)
|
|
932
|
+
|
|
933
|
+
for t in comp_map.target:
|
|
934
|
+
outfile += (
|
|
935
|
+
f"{add_indent(indent)}<{ABBR_STR}:Target>"
|
|
936
|
+
f"{__escape_xml(str(t))}"
|
|
937
|
+
f"</{ABBR_STR}:Target>"
|
|
938
|
+
)
|
|
939
|
+
|
|
940
|
+
outfile += (
|
|
941
|
+
f"{add_indent(indent)}<{ABBR_STR}:RepresentationMap>"
|
|
942
|
+
f"{__escape_xml(str(comp_map.values))}"
|
|
943
|
+
f"</{ABBR_STR}:RepresentationMap>"
|
|
944
|
+
)
|
|
945
|
+
|
|
946
|
+
outfile += f"{indent}</{ABBR_STR}:{COMPONENT_MAP}>"
|
|
947
|
+
return outfile
|
|
948
|
+
|
|
949
|
+
|
|
950
|
+
def __write_representation_map(
|
|
951
|
+
rep_map: RepresentationMap, indent: str, references_30: bool = False
|
|
952
|
+
) -> str:
|
|
953
|
+
"""Writes a RepresentationMap to the XML file."""
|
|
954
|
+
data = __write_maintainable(rep_map, indent, references_30)
|
|
955
|
+
|
|
956
|
+
label = f"{ABBR_STR}:{REPRESENTATION_MAP}"
|
|
957
|
+
attributes = data.get("Attributes") or ""
|
|
958
|
+
attributes = attributes.replace("'", '"')
|
|
959
|
+
|
|
960
|
+
outfile = f"{indent}<{label}{attributes}>"
|
|
961
|
+
outfile += __export_intern_data(data)
|
|
962
|
+
|
|
963
|
+
# Write Source and Target references
|
|
964
|
+
outfile += (
|
|
965
|
+
f"{add_indent(indent)}<{ABBR_STR}:SourceCodelist>"
|
|
966
|
+
f"{rep_map.source}"
|
|
967
|
+
f"</{ABBR_STR}:SourceCodelist>"
|
|
968
|
+
)
|
|
969
|
+
outfile += (
|
|
970
|
+
f"{add_indent(indent)}<{ABBR_STR}:TargetCodelist>"
|
|
971
|
+
f"{rep_map.target}"
|
|
972
|
+
f"</{ABBR_STR}:TargetCodelist>"
|
|
973
|
+
)
|
|
974
|
+
|
|
975
|
+
# Write ValueMaps
|
|
976
|
+
for value_map in rep_map.maps:
|
|
977
|
+
outfile += __write_value_map(value_map, add_indent(indent))
|
|
978
|
+
|
|
979
|
+
outfile += f"{indent}</{label}>"
|
|
980
|
+
|
|
981
|
+
return outfile
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
def __write_component_map(
|
|
985
|
+
comp_map: ComponentMap, indent: str, references_30: bool = False
|
|
986
|
+
) -> str:
|
|
987
|
+
"""Writes a ComponentMap to the XML file."""
|
|
988
|
+
outfile = f"{indent}<{ABBR_STR}:{COMPONENT_MAP}>"
|
|
989
|
+
outfile += (
|
|
990
|
+
f"{add_indent(indent)}<{ABBR_STR}:Source>"
|
|
991
|
+
f"{comp_map.source}"
|
|
992
|
+
f"</{ABBR_STR}:Source>"
|
|
993
|
+
)
|
|
994
|
+
outfile += (
|
|
995
|
+
f"{add_indent(indent)}<{ABBR_STR}:Target>"
|
|
996
|
+
f"{comp_map.target}"
|
|
997
|
+
f"</{ABBR_STR}:Target>"
|
|
998
|
+
)
|
|
999
|
+
|
|
1000
|
+
# Write the RepresentationMap reference
|
|
1001
|
+
outfile += (
|
|
1002
|
+
f"{add_indent(indent)}<{ABBR_STR}:RepresentationMap>"
|
|
1003
|
+
f"{comp_map.values}"
|
|
1004
|
+
f"</{ABBR_STR}:RepresentationMap>"
|
|
1005
|
+
)
|
|
1006
|
+
|
|
1007
|
+
outfile += f"{indent}</{ABBR_STR}:{COMPONENT_MAP}>"
|
|
1008
|
+
return outfile
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
def __write_implicit_component_map(
|
|
1012
|
+
imp_comp_map: ImplicitComponentMap, indent: str
|
|
1013
|
+
) -> str:
|
|
1014
|
+
"""Writes an ImplicitComponentMap (no RepresentationMap)."""
|
|
1015
|
+
outfile = f"{indent}<{ABBR_STR}:ComponentMap>"
|
|
1016
|
+
outfile += (
|
|
1017
|
+
f"{add_indent(indent)}<{ABBR_STR}:Source>"
|
|
1018
|
+
f"{imp_comp_map.source}"
|
|
1019
|
+
f"</{ABBR_STR}:Source>"
|
|
1020
|
+
)
|
|
1021
|
+
outfile += (
|
|
1022
|
+
f"{add_indent(indent)}<{ABBR_STR}:Target>"
|
|
1023
|
+
f"{imp_comp_map.target}"
|
|
1024
|
+
f"</{ABBR_STR}:Target>"
|
|
1025
|
+
)
|
|
1026
|
+
outfile += f"{indent}</{ABBR_STR}:ComponentMap>"
|
|
1027
|
+
return outfile
|
|
1028
|
+
|
|
1029
|
+
|
|
1030
|
+
def __write_fixed_value_map(fixed_map: FixedValueMap, indent: str) -> str:
|
|
1031
|
+
"""Writes a FixedValueMap to the XML file."""
|
|
1032
|
+
outfile = f"{indent}<{ABBR_STR}:FixedValueMap>"
|
|
1033
|
+
outfile += (
|
|
1034
|
+
f"{add_indent(indent)}<{ABBR_STR}:Target>"
|
|
1035
|
+
f"{fixed_map.target}"
|
|
1036
|
+
f"</{ABBR_STR}:Target>"
|
|
1037
|
+
)
|
|
1038
|
+
outfile += (
|
|
1039
|
+
f"{add_indent(indent)}<{ABBR_STR}:Value>"
|
|
1040
|
+
f"{__escape_xml(str(fixed_map.value))}"
|
|
1041
|
+
f"</{ABBR_STR}:Value>"
|
|
1042
|
+
)
|
|
1043
|
+
outfile += f"{indent}</{ABBR_STR}:FixedValueMap>"
|
|
1044
|
+
return outfile
|
|
1045
|
+
|
|
1046
|
+
|
|
1047
|
+
def __write_date_pattern_map(date_map: DatePatternMap, indent: str) -> str:
|
|
1048
|
+
"""Writes a DatePatternMap to the XML file."""
|
|
1049
|
+
attrs = ""
|
|
1050
|
+
if date_map.id is not None:
|
|
1051
|
+
attrs += f' id="{__escape_xml(date_map.id)}"'
|
|
1052
|
+
if date_map.resolve_period is not None:
|
|
1053
|
+
attrs += f' resolvePeriod="{__escape_xml(date_map.resolve_period)}"'
|
|
1054
|
+
|
|
1055
|
+
attrs += f' sourcePattern="{__escape_xml(date_map.pattern)}"'
|
|
1056
|
+
attrs += f' locale="{__escape_xml(date_map.locale)}"'
|
|
1057
|
+
|
|
1058
|
+
outfile = f"{indent}<{ABBR_STR}:DatePatternMap{attrs}>"
|
|
1059
|
+
outfile += (
|
|
1060
|
+
f"{add_indent(indent)}<{ABBR_STR}:Source>"
|
|
1061
|
+
f"{__escape_xml(date_map.source)}"
|
|
1062
|
+
f"</{ABBR_STR}:Source>"
|
|
1063
|
+
)
|
|
1064
|
+
outfile += (
|
|
1065
|
+
f"{add_indent(indent)}<{ABBR_STR}:Target>"
|
|
1066
|
+
f"{__escape_xml(date_map.target)}"
|
|
1067
|
+
f"</{ABBR_STR}:Target>"
|
|
1068
|
+
)
|
|
1069
|
+
|
|
1070
|
+
if date_map.pattern_type == "variable":
|
|
1071
|
+
outfile += (
|
|
1072
|
+
f"{add_indent(indent)}<{ABBR_STR}:FrequencyDimension>"
|
|
1073
|
+
f"{__escape_xml(date_map.frequency)}"
|
|
1074
|
+
f"</{ABBR_STR}:FrequencyDimension>"
|
|
1075
|
+
)
|
|
1076
|
+
else:
|
|
1077
|
+
outfile += (
|
|
1078
|
+
f"{add_indent(indent)}<{ABBR_STR}:TargetFrequencyID>"
|
|
1079
|
+
f"{__escape_xml(date_map.frequency)}"
|
|
1080
|
+
f"</{ABBR_STR}:TargetFrequencyID>"
|
|
1081
|
+
)
|
|
1082
|
+
|
|
1083
|
+
outfile += f"{indent}</{ABBR_STR}:DatePatternMap>"
|
|
1084
|
+
return outfile
|
|
1085
|
+
|
|
1086
|
+
|
|
1087
|
+
def __write_structure_map(
|
|
1088
|
+
struct_map: StructureMap, indent: str, references_30: bool = False
|
|
1089
|
+
) -> str:
|
|
1090
|
+
"""Writes a StructureMap to the XML file."""
|
|
1091
|
+
data = __write_maintainable(struct_map, indent, references_30)
|
|
1092
|
+
|
|
1093
|
+
label = f"{ABBR_STR}:{STRUCTURE_MAP}"
|
|
1094
|
+
attributes = data.get("Attributes") or ""
|
|
1095
|
+
attributes = attributes.replace("'", '"')
|
|
1096
|
+
|
|
1097
|
+
outfile = f"{indent}<{label}{attributes}>"
|
|
1098
|
+
outfile += __export_intern_data(data)
|
|
1099
|
+
|
|
1100
|
+
# Write Source and Target references
|
|
1101
|
+
outfile += (
|
|
1102
|
+
f"{add_indent(indent)}<{ABBR_STR}:Source>"
|
|
1103
|
+
f"{struct_map.source}"
|
|
1104
|
+
f"</{ABBR_STR}:Source>"
|
|
1105
|
+
)
|
|
1106
|
+
outfile += (
|
|
1107
|
+
f"{add_indent(indent)}<{ABBR_STR}:Target>"
|
|
1108
|
+
f"{struct_map.target}"
|
|
1109
|
+
f"</{ABBR_STR}:Target>"
|
|
1110
|
+
)
|
|
1111
|
+
|
|
1112
|
+
# Write component maps and fixed value maps
|
|
1113
|
+
for map_item in struct_map.maps:
|
|
1114
|
+
if isinstance(map_item, DatePatternMap):
|
|
1115
|
+
outfile += __write_date_pattern_map(map_item, add_indent(indent))
|
|
1116
|
+
for map_item in struct_map.maps:
|
|
1117
|
+
if isinstance(map_item, MultiComponentMap):
|
|
1118
|
+
outfile += __write_multi_component_map(
|
|
1119
|
+
map_item, add_indent(indent)
|
|
1120
|
+
)
|
|
1121
|
+
elif isinstance(map_item, ComponentMap):
|
|
1122
|
+
outfile += __write_component_map(
|
|
1123
|
+
map_item, add_indent(indent), references_30
|
|
1124
|
+
)
|
|
1125
|
+
elif isinstance(map_item, ImplicitComponentMap):
|
|
1126
|
+
outfile += __write_implicit_component_map(
|
|
1127
|
+
map_item, add_indent(indent)
|
|
1128
|
+
)
|
|
1129
|
+
if isinstance(map_item, FixedValueMap):
|
|
1130
|
+
outfile += __write_fixed_value_map(map_item, add_indent(indent))
|
|
1131
|
+
|
|
1132
|
+
outfile += f"{indent}</{label}>"
|
|
1133
|
+
|
|
1134
|
+
return outfile
|
|
1135
|
+
|
|
1136
|
+
|
|
844
1137
|
def __write_scheme( # noqa: C901
|
|
845
1138
|
item_scheme: Any, indent: str, scheme: str, references_30: bool = False
|
|
846
1139
|
) -> str:
|
|
847
1140
|
"""Writes the scheme to the XML file."""
|
|
848
1141
|
if getattr(item_scheme, "sdmx_type", None) == "valuelist":
|
|
849
1142
|
scheme = VALUE_LIST
|
|
1143
|
+
|
|
1144
|
+
if scheme == REPRESENTATION_MAP:
|
|
1145
|
+
return __write_representation_map(item_scheme, indent, references_30)
|
|
1146
|
+
if scheme == STRUCTURE_MAP:
|
|
1147
|
+
return __write_structure_map(item_scheme, indent, references_30)
|
|
1148
|
+
|
|
850
1149
|
label = f"{ABBR_STR}:{scheme}"
|
|
851
1150
|
components = ""
|
|
852
1151
|
data = __write_maintainable(item_scheme, indent, references_30)
|
pysdmx/io/xml/__tokens.py
CHANGED
|
@@ -297,3 +297,15 @@ VALUE_LISTS = "ValueLists"
|
|
|
297
297
|
VALUE_LIST = "ValueList"
|
|
298
298
|
VALUE_LIST_LOW = "valuelist"
|
|
299
299
|
VALUE_ITEM = "ValueItem"
|
|
300
|
+
|
|
301
|
+
# Mapping
|
|
302
|
+
STRUCTURE_MAPS = "StructureMaps"
|
|
303
|
+
STRUCTURE_MAP = "StructureMap"
|
|
304
|
+
REPRESENTATION_MAPS = "RepresentationMaps"
|
|
305
|
+
REPRESENTATION_MAP = "RepresentationMap"
|
|
306
|
+
COMPONENT_MAPS = "ComponentMaps"
|
|
307
|
+
COMPONENT_MAP = "ComponentMap"
|
|
308
|
+
FIXED_VALUE_MAPS = "FixedValueMaps"
|
|
309
|
+
FIXED_VALUE_MAP = "FixedValueMap"
|
|
310
|
+
DATE_PATTERN_MAP = "DatePatternMap"
|
|
311
|
+
DATE_PATTERN_MAPS = "DatePatternMaps"
|
pysdmx/io/xml/__write_aux.py
CHANGED
|
@@ -22,10 +22,12 @@ from pysdmx.io.xml.__tokens import (
|
|
|
22
22
|
NAME_PERS,
|
|
23
23
|
PROV_AGREEMENT,
|
|
24
24
|
PROV_AGREMENT,
|
|
25
|
+
REPRESENTATION_MAPS,
|
|
25
26
|
RULE_SCHEMES,
|
|
26
27
|
RULESETS,
|
|
27
28
|
STR_USAGE,
|
|
28
29
|
STRUCTURE,
|
|
30
|
+
STRUCTURE_MAPS,
|
|
29
31
|
TRANS_SCHEMES,
|
|
30
32
|
TRANSFORMATIONS,
|
|
31
33
|
UDO_SCHEMES,
|
|
@@ -70,6 +72,9 @@ DSDS = "DataStructures"
|
|
|
70
72
|
DATAFLOWS = "Dataflows"
|
|
71
73
|
CONSTRAINTS = "Constraints"
|
|
72
74
|
PROV_AGREEMENTS = "ProvisionAgreements"
|
|
75
|
+
REPRESENTATION_MAPS_KEY = "RepresentationMaps"
|
|
76
|
+
STRUCTURE_MAPS_KEY = "StructureMaps"
|
|
77
|
+
DATE_PATTERN_MAP_KEY = "DatePatternMaps"
|
|
73
78
|
ALL_DIM = "AllDimensions"
|
|
74
79
|
|
|
75
80
|
BASE_URL_21 = "http://www.sdmx.org/resources/sdmxml/schemas/v2_1"
|
|
@@ -205,6 +210,8 @@ MSG_CONTENT_PKG_21 = OrderedDict(
|
|
|
205
210
|
(CONCEPTS, "Concepts"),
|
|
206
211
|
(DSDS, "DataStructures"),
|
|
207
212
|
(CONSTRAINTS, "ContentConstraints"),
|
|
213
|
+
(REPRESENTATION_MAPS, "RepresentationMaps"),
|
|
214
|
+
(STRUCTURE_MAPS, "StructureMaps"),
|
|
208
215
|
(CUSTOM_TYPES, "CustomTypes"),
|
|
209
216
|
(VTLMAPPINGS, "VtlMappings"),
|
|
210
217
|
(NAME_PERS, "NamePersonalisations"),
|
|
@@ -224,6 +231,8 @@ MSG_CONTENT_PKG_30 = OrderedDict(
|
|
|
224
231
|
(CONCEPTS_SCHEMES, "ConceptSchemes"),
|
|
225
232
|
(DSDS, "DataStructures"),
|
|
226
233
|
(CONSTRAINTS, "ContentConstraints"),
|
|
234
|
+
(REPRESENTATION_MAPS, "RepresentationMaps"),
|
|
235
|
+
(STRUCTURE_MAPS, "StructureMaps"),
|
|
227
236
|
(CUSTOM_TYPE_SCHEMES, "CustomTypeSchemes"),
|
|
228
237
|
(VTLMAPPING_SCHEMES, "VtlMappingSchemes"),
|
|
229
238
|
(NAME_PER_SCHEMES, "NamePersonalisationSchemes"),
|
|
@@ -379,9 +379,9 @@ def __series_processing(
|
|
|
379
379
|
del data_dict["Series"][0]
|
|
380
380
|
|
|
381
381
|
# Getting each datapoint from data and creating dict
|
|
382
|
-
data = data.sort_values(series_codes, axis=0)
|
|
382
|
+
data = data.sort_values(series_codes + series_att_codes, axis=0)
|
|
383
383
|
data_dict = {
|
|
384
|
-
"Series": data[series_codes]
|
|
384
|
+
"Series": data[series_codes + series_att_codes]
|
|
385
385
|
.drop_duplicates()
|
|
386
386
|
.reset_index(drop=True)
|
|
387
387
|
.to_dict(orient="records")
|
pysdmx/model/dataflow.py
CHANGED
|
@@ -107,8 +107,8 @@ class Component(
|
|
|
107
107
|
statistical domain, i.e. a component attached to a series in a particular
|
|
108
108
|
domain may be attached to, say, the dataset in another domain.
|
|
109
109
|
|
|
110
|
-
The *
|
|
111
|
-
component can take within a particular domain. In addition to
|
|
110
|
+
The *enumeration* field indicates the expected (i.e. allowed) set of
|
|
111
|
+
codes a component can take within a particular domain. In addition to
|
|
112
112
|
(or instead of) a set of codes, additional details about the expected
|
|
113
113
|
format may be found in the *facets* and *dtype* fields.
|
|
114
114
|
|
pysdmx/toolkit/pd/_data_utils.py
CHANGED
|
@@ -25,7 +25,7 @@ def format_labels( # noqa: C901
|
|
|
25
25
|
for k in df.columns:
|
|
26
26
|
for component in components:
|
|
27
27
|
if component.id == k:
|
|
28
|
-
df.rename(
|
|
28
|
+
df.rename( # type: ignore[call-overload, unused-ignore]
|
|
29
29
|
columns={k: component.concept.name}, # type: ignore[union-attr]
|
|
30
30
|
inplace=True,
|
|
31
31
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pysdmx
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.11.0
|
|
4
4
|
Summary: Your opinionated Python SDMX library
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -24,6 +24,12 @@ Requires-Dist: jsonschema (>=4.10) ; extra == "json"
|
|
|
24
24
|
Requires-Dist: lxml (>=5.2) ; extra == "all"
|
|
25
25
|
Requires-Dist: lxml (>=5.2) ; extra == "xml"
|
|
26
26
|
Requires-Dist: msgspec (>=0)
|
|
27
|
+
Requires-Dist: numpy (>=2.0.2,<2.1) ; (python_version < "3.13") and (extra == "all")
|
|
28
|
+
Requires-Dist: numpy (>=2.0.2,<2.1) ; (python_version < "3.13") and (extra == "data")
|
|
29
|
+
Requires-Dist: numpy (>=2.0.2,<2.1) ; (python_version < "3.13") and (extra == "vtl")
|
|
30
|
+
Requires-Dist: numpy (>=2.1.0,<2.3) ; (python_version >= "3.13") and (extra == "all")
|
|
31
|
+
Requires-Dist: numpy (>=2.1.0,<2.3) ; (python_version >= "3.13") and (extra == "data")
|
|
32
|
+
Requires-Dist: numpy (>=2.1.0,<2.3) ; (python_version >= "3.13") and (extra == "vtl")
|
|
27
33
|
Requires-Dist: pandas (>=2.1.4) ; extra == "all"
|
|
28
34
|
Requires-Dist: pandas (>=2.1.4) ; extra == "data"
|
|
29
35
|
Requires-Dist: parsy (>=2.1)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
pysdmx/__extras_check.py,sha256=Tmluui2OuJVyJB6a1Jl0PlrRjpsswhtCjAqtRLOSero,2059
|
|
2
|
-
pysdmx/__init__.py,sha256=
|
|
2
|
+
pysdmx/__init__.py,sha256=8EDbBiciJ8gxk5fE9tPCuRnhh-xaYrjzgW5j86WRuwk,68
|
|
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
|
|
@@ -11,7 +11,7 @@ pysdmx/api/dc/query/_py_parser.py,sha256=_kVUk6Xu5jZdclng1F6eDSZS2-ok_yncI1y1q5l
|
|
|
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
13
|
pysdmx/api/fmr/__init__.py,sha256=uXD2dOY2lJSY6CoracIh8c1_7wWiJcsQ5ebIEIbHumk,50532
|
|
14
|
-
pysdmx/api/fmr/maintenance.py,sha256=
|
|
14
|
+
pysdmx/api/fmr/maintenance.py,sha256=_bdPSlSY3AvABxndlwwCKTk6uiFQfUSYhN9EjBuFRUw,6170
|
|
15
15
|
pysdmx/api/gds/__init__.py,sha256=BBl75wEdcz9zPMfk6kAGHitRW39S774VL9xifMZ_uHs,11560
|
|
16
16
|
pysdmx/api/qb/__init__.py,sha256=vxdMJFFg4J_KWADrnzj_8KcU0UlwpJPdx0yiW3QJo9Y,1498
|
|
17
17
|
pysdmx/api/qb/availability.py,sha256=2yPHnTXu_jACNKNhhtXMkxVkfLK1Ewa5ucGAbRxvC5o,10181
|
|
@@ -38,7 +38,7 @@ pysdmx/io/csv/sdmx21/__init__.py,sha256=I3_dwi4A4if62_mwEjqbOa-F7mhoIMf0D6szpDf3
|
|
|
38
38
|
pysdmx/io/csv/sdmx21/reader/__init__.py,sha256=J1cCkZh3klgZZWjdQ_U1zkfzT_DVzQmdreGZhN33SLs,2866
|
|
39
39
|
pysdmx/io/csv/sdmx21/writer/__init__.py,sha256=CH8Nm7hqvXyN6XM_D2nJRmbKj6CJV-X1QzSF0WJrs0E,2484
|
|
40
40
|
pysdmx/io/format.py,sha256=EO-PyYpiU0WswvEGA5UHokladxPezcwBUo1AJTqxp1Q,5250
|
|
41
|
-
pysdmx/io/input_processor.py,sha256=
|
|
41
|
+
pysdmx/io/input_processor.py,sha256=OPpnhXy8R2H0EKHvC92J3eWojk4I8dlp4jXA03FvvuA,7212
|
|
42
42
|
pysdmx/io/json/fusion/messages/__init__.py,sha256=ac2jWfjGGBcfoSutiKy68LzqwNp_clt2RzmJOaYCxL0,2142
|
|
43
43
|
pysdmx/io/json/fusion/messages/category.py,sha256=2NnYTptQ6nAdeYBIkAysyriTFF6dW8fjb9AvRWtTOao,5606
|
|
44
44
|
pysdmx/io/json/fusion/messages/code.py,sha256=YayxSKiHa124WTr_lK8HTfXHomh_e0oDZvuydd29XKg,8300
|
|
@@ -46,11 +46,11 @@ pysdmx/io/json/fusion/messages/concept.py,sha256=m4lTyncSIriFXWWupE-zLxUVPx3Xrg5
|
|
|
46
46
|
pysdmx/io/json/fusion/messages/constraint.py,sha256=dPkzhCWN49Y9ReSZPRFTdM6GWc0rU2BZTyFfWsqlX34,615
|
|
47
47
|
pysdmx/io/json/fusion/messages/core.py,sha256=GdzF3TNUGrB0gxuaaSpk9LaYqcdy_M6L2azExZQfM0Q,4843
|
|
48
48
|
pysdmx/io/json/fusion/messages/dataflow.py,sha256=lsaMPjmA-KiM51I78wrONfNHyvfBSeAll5Sp0jmTezc,2972
|
|
49
|
-
pysdmx/io/json/fusion/messages/dsd.py,sha256=
|
|
49
|
+
pysdmx/io/json/fusion/messages/dsd.py,sha256=0YA87KkDAoFlOCi4MboU4MhHEqc_5Wqx2A90pZG5q6o,10668
|
|
50
50
|
pysdmx/io/json/fusion/messages/map.py,sha256=TPsCFuUfk5Jhhe7CNvEoHuFNZFpHhvNiYFWeIEUx-sc,7695
|
|
51
51
|
pysdmx/io/json/fusion/messages/metadataflow.py,sha256=Js4j8lUF9ZwqL7lJUrfrjk9tmBmRQPt8qxdrfnZ6R5E,1374
|
|
52
52
|
pysdmx/io/json/fusion/messages/mpa.py,sha256=WvcHn7Pa_UBHxkZbfSzIxc8qeeMfTWThxgCRHuioXFY,1494
|
|
53
|
-
pysdmx/io/json/fusion/messages/msd.py,sha256=
|
|
53
|
+
pysdmx/io/json/fusion/messages/msd.py,sha256=XzQ5JiX0rAswj71a3mCYulhGLtu7GDp_RzL8-kd3t1U,3867
|
|
54
54
|
pysdmx/io/json/fusion/messages/org.py,sha256=gWIvmvVrj5wXCrwbsJL0B13YM3WjlfIQxrRUc_WAoYs,9538
|
|
55
55
|
pysdmx/io/json/fusion/messages/pa.py,sha256=6zN8Qxj5bdf5zo2N9TwYlSLyGxokvsELtk1--1cMbxw,1393
|
|
56
56
|
pysdmx/io/json/fusion/messages/report.py,sha256=ZE62ZmHlCXk3TxRTRWCDCKVMhnN0J5UjMEzrsnD5I3E,1551
|
|
@@ -70,39 +70,44 @@ pysdmx/io/json/sdmxjson2/messages/category.py,sha256=L51-XTUxzELNCfdhLPKaOPoGss2
|
|
|
70
70
|
pysdmx/io/json/sdmxjson2/messages/code.py,sha256=gEdBPOmlO_7_-lHfE7k8RVY95ee7cwJH7eY8ibh5JyA,18205
|
|
71
71
|
pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=x7BoG6AaziZGNjxeypwy_lsFTmdHs-0MPUpqPsTBQIA,5496
|
|
72
72
|
pysdmx/io/json/sdmxjson2/messages/constraint.py,sha256=TCg-Z6ZkZSzlhjvaZebKk1wL_CPhmJzyKjEkE4FPkAc,9055
|
|
73
|
-
pysdmx/io/json/sdmxjson2/messages/core.py,sha256=
|
|
73
|
+
pysdmx/io/json/sdmxjson2/messages/core.py,sha256=dOVa5ibFuhNqmw7e2yVeYMMC8DEjk6jK5T40ev9S-0I,10394
|
|
74
74
|
pysdmx/io/json/sdmxjson2/messages/dataflow.py,sha256=wjeq9yexTa012AtGdZsZflp3WQ6fP-3kas-gxADTFeQ,6256
|
|
75
|
-
pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=
|
|
75
|
+
pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=_dqP-ZwKNM85xb77OMLY_wiGZxMwHvl4d-c1QECCP9Y,20415
|
|
76
76
|
pysdmx/io/json/sdmxjson2/messages/map.py,sha256=ZB7XPX6nUcu2MMHAsgwAR0nxlbEQF7YasplhlS5K9EI,16774
|
|
77
77
|
pysdmx/io/json/sdmxjson2/messages/metadataflow.py,sha256=1hKCyzTEAvB_MOgmtjBObC9RVNSge7Sick6nQMwl17o,2994
|
|
78
78
|
pysdmx/io/json/sdmxjson2/messages/mpa.py,sha256=ryoQCvOvd2j6gPdGOEML4bc-NXUSetuKNOfmd9Ogn2s,3050
|
|
79
|
-
pysdmx/io/json/sdmxjson2/messages/msd.py,sha256=
|
|
79
|
+
pysdmx/io/json/sdmxjson2/messages/msd.py,sha256=cYQqWOex5LVYE-8ASsyIwI_Y0jCuT9IPG_evG3CMnHs,8465
|
|
80
80
|
pysdmx/io/json/sdmxjson2/messages/pa.py,sha256=VoaPBgcWGwWU7h5IaVa5wNWncOoktWihSXjcP4vEb00,2780
|
|
81
81
|
pysdmx/io/json/sdmxjson2/messages/provider.py,sha256=htAwdDzVR3qeyExhmjpvg8W0X4lWqRh2Bvd5H8wsOTY,8197
|
|
82
|
-
pysdmx/io/json/sdmxjson2/messages/report.py,sha256=
|
|
82
|
+
pysdmx/io/json/sdmxjson2/messages/report.py,sha256=jr4HZunfnQicG2AFi15AGX_v031jNb3d6PiQgc8TPgY,6672
|
|
83
83
|
pysdmx/io/json/sdmxjson2/messages/schema.py,sha256=JwFYjgvhK_1NN5KQIUYNb0ul4ywQhDQ28ZQBGnsX5X4,2862
|
|
84
|
-
pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=
|
|
84
|
+
pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=GCpQboHEpDyfCmXVJGbCyKpIaLCbOXYDxj6WXnvv9pw,12851
|
|
85
85
|
pysdmx/io/json/sdmxjson2/messages/vtl.py,sha256=C-JQY1_W8SrJd2lLdUGCmQO9Br1pdqdT8WmB1K4e_yY,35284
|
|
86
86
|
pysdmx/io/json/sdmxjson2/reader/__init__.py,sha256=RbNnZSrGQa4OE0HBWJau9tPFSQbDklcKZaBWOzxEw4I,1629
|
|
87
87
|
pysdmx/io/json/sdmxjson2/reader/doc_validation.py,sha256=Li0N5UmTKJy_FWT5vfwt7DEtp8xiYaXccDRBna_Q0Jw,3822
|
|
88
|
-
pysdmx/io/json/sdmxjson2/reader/metadata.py,sha256=
|
|
89
|
-
pysdmx/io/json/sdmxjson2/reader/structure.py,sha256=
|
|
88
|
+
pysdmx/io/json/sdmxjson2/reader/metadata.py,sha256=sktlmqyXnGhoDTypSDeJU97Evfb9HB0II4-LPnvfMrk,1248
|
|
89
|
+
pysdmx/io/json/sdmxjson2/reader/structure.py,sha256=6WtSmwx9KRSLX9Ovb1rFoIpghhy72o-1uZ9qN1Fo0zw,1236
|
|
90
90
|
pysdmx/io/json/sdmxjson2/writer/__init__.py,sha256=DZGkas1ghei4p6SZsIQI1LPToS-d8F1Nx75MC8reT7g,270
|
|
91
|
-
pysdmx/io/json/sdmxjson2/writer/
|
|
92
|
-
pysdmx/io/json/sdmxjson2/writer/
|
|
91
|
+
pysdmx/io/json/sdmxjson2/writer/_helper.py,sha256=sXZw2exVyHBUpdVf4NjieTrexXfA27NcxUo594h6ArE,4214
|
|
92
|
+
pysdmx/io/json/sdmxjson2/writer/v2_0/__init__.py,sha256=7PBjEmFonZtbhURmon4UQufFoR_dpZqLILXnq6oPIoo,58
|
|
93
|
+
pysdmx/io/json/sdmxjson2/writer/v2_0/metadata.py,sha256=AU-VstrSHpTrIQSx3e2JmeIRuC-CQn79OQODllz6BB8,1212
|
|
94
|
+
pysdmx/io/json/sdmxjson2/writer/v2_0/structure.py,sha256=jiJ9ww7zTZRaGzZTZVY2-0Tzj9JdSeXkI2fggqfqKRc,1245
|
|
95
|
+
pysdmx/io/json/sdmxjson2/writer/v2_1/__init__.py,sha256=-CwxbfR9kgwXYU_SMrmkkf0jgFPhcHTdG5dwjFhwjfk,58
|
|
96
|
+
pysdmx/io/json/sdmxjson2/writer/v2_1/metadata.py,sha256=9PE3yPpyD1pfF_8-A5VmakzC00XRC-BNEyZpZUIIJI8,1196
|
|
97
|
+
pysdmx/io/json/sdmxjson2/writer/v2_1/structure.py,sha256=s0SULtWmNUckly6cKPI0wGzElmVvgAEK6b32Es2Q0Rw,1243
|
|
93
98
|
pysdmx/io/pd.py,sha256=1C5UnAT25EADOpNsRBooEdWNaJEGdmcwh6_R9O5MOrc,464
|
|
94
|
-
pysdmx/io/reader.py,sha256=
|
|
99
|
+
pysdmx/io/reader.py,sha256=sceCnfJKdUiwNXnIkCKydj5Fcmc1DDnkzUlaz2DNOrU,11403
|
|
95
100
|
pysdmx/io/serde.py,sha256=xTd22JEaefhCpVcUqVthf4gtDQT1KeiDZ-9w52o2zQk,1594
|
|
96
|
-
pysdmx/io/writer.py,sha256=
|
|
101
|
+
pysdmx/io/writer.py,sha256=UEwRe8xVCKV_y9nu7amSVQzQss5x55EBJsH2LI-dsAI,6128
|
|
97
102
|
pysdmx/io/xml/__allowed_lxml_errors.py,sha256=PdIK2i6JwwGRh1Ogc5JA0hRySO7QXJKN-DI8EYtdjA0,225
|
|
98
103
|
pysdmx/io/xml/__data_aux.py,sha256=oLTfk49FuoF0LjMrV5o55PN_5wWPHZTv49aDBdbflYc,4331
|
|
99
104
|
pysdmx/io/xml/__init__.py,sha256=tcUsSEiM3nBA7lDbZPwGZ7Vu_K9gQd8oliASUMTGjFE,105
|
|
100
105
|
pysdmx/io/xml/__parse_xml.py,sha256=4zZKGlvrNAccILH-mlQzZFV2HF15wIUGDXttVG3SvNM,2975
|
|
101
|
-
pysdmx/io/xml/__ss_aux_reader.py,sha256=
|
|
102
|
-
pysdmx/io/xml/__structure_aux_reader.py,sha256=
|
|
103
|
-
pysdmx/io/xml/__structure_aux_writer.py,sha256=
|
|
104
|
-
pysdmx/io/xml/__tokens.py,sha256=
|
|
105
|
-
pysdmx/io/xml/__write_aux.py,sha256=
|
|
106
|
+
pysdmx/io/xml/__ss_aux_reader.py,sha256=_aJO-uWh60SNaOxB8mE8SBWy0c5_GPBNtr9lro_YlEA,3702
|
|
107
|
+
pysdmx/io/xml/__structure_aux_reader.py,sha256=IppBAE7oWeO0FbqdwAb2t6xXmVbZj7PaC2vHIcdWFNE,49122
|
|
108
|
+
pysdmx/io/xml/__structure_aux_writer.py,sha256=smDO5X5PwTXD48pgFBA_rYGvE-yMZb1YVR1WNyXE-EM,55176
|
|
109
|
+
pysdmx/io/xml/__tokens.py,sha256=mTunFE49N4TigxjPiDoyYdbN4Yk_HONZYFz-fRzDknk,7258
|
|
110
|
+
pysdmx/io/xml/__write_aux.py,sha256=Qi_f5K8a0mX4F4IMx3ZQ8J18NPj_2VhdiccjOAtvhQo,15896
|
|
106
111
|
pysdmx/io/xml/__write_data_aux.py,sha256=mnJpooA4koqGbKhF-6eonT3drQ-qCuwwP-lfZLHKqVQ,3403
|
|
107
112
|
pysdmx/io/xml/__write_structure_specific_aux.py,sha256=reRDVw4Xwag0ODyMzm9uOk9WJ_e1ELxAPYHSMUUDJBQ,8919
|
|
108
113
|
pysdmx/io/xml/config.py,sha256=R24cczVkzkhjVLXpv-qfEm88W3_QTqVt2Qofi8IvJ5Y,93
|
|
@@ -117,7 +122,7 @@ pysdmx/io/xml/sdmx21/reader/structure_specific.py,sha256=S3-gLmaBFjBRIr25qQtlrao
|
|
|
117
122
|
pysdmx/io/xml/sdmx21/reader/submission.py,sha256=8daiBW-sIVGaB6lYwHqJNkLI7IixMSydCK-0ZO8ri4I,1711
|
|
118
123
|
pysdmx/io/xml/sdmx21/writer/__init__.py,sha256=QQGFAss26njCC4eKYxhBcI9LYm5NHuJaAJGKCrIrL80,31
|
|
119
124
|
pysdmx/io/xml/sdmx21/writer/error.py,sha256=0wkX7K_n2oZNkOKg_zpl9Id82qP72Lqof-T-ZLGoZ1M,353
|
|
120
|
-
pysdmx/io/xml/sdmx21/writer/generic.py,sha256=
|
|
125
|
+
pysdmx/io/xml/sdmx21/writer/generic.py,sha256=kiTQ3HuO51xxQGrQ6PxpKAYGfoYu_r_oxfOPQHPX2vU,15824
|
|
121
126
|
pysdmx/io/xml/sdmx21/writer/structure.py,sha256=S3qoNgXxrakn2V4NLdL5U5mAA16XisI0PpJDuxqalFE,2084
|
|
122
127
|
pysdmx/io/xml/sdmx21/writer/structure_specific.py,sha256=iXc1J-RzoKyRznvgGgdTSeUfyqZLouI8CtSq2YhGBWI,2877
|
|
123
128
|
pysdmx/io/xml/sdmx30/__init__.py,sha256=8BScJFEgLy8DoUreu2RBUtxjGjKyClkKBI_Qtarbk-Y,38
|
|
@@ -141,7 +146,7 @@ pysdmx/model/category.py,sha256=ksYIOGPHgZI619RhmRXZUXHP_juY9im40tWzR2yuMEc,6796
|
|
|
141
146
|
pysdmx/model/code.py,sha256=Wu6rEXeZf_XA0aBrDXgN-3yvySAHH7SAjrWliFlmC24,12799
|
|
142
147
|
pysdmx/model/concept.py,sha256=mQfqJdtWc10WdTKX_Mw7Znw65cN3QO-kCar9MWYeWO4,9645
|
|
143
148
|
pysdmx/model/constraint.py,sha256=MwI_GLKzwkuo0BzAsgcnDeB-b7bq8qqwHNte5JjCEFA,1960
|
|
144
|
-
pysdmx/model/dataflow.py,sha256=
|
|
149
|
+
pysdmx/model/dataflow.py,sha256=hNeQjNXebjaDbakx05bfzcQ9DoplZMQi1BUW4NH6lnI,24201
|
|
145
150
|
pysdmx/model/dataset.py,sha256=Lbr7tYonGHD3NZUD-M9hK2puaEAluOVPG2DbkOohzMM,4861
|
|
146
151
|
pysdmx/model/gds.py,sha256=QrnmI8Hn--C95gGXCeUeWwhn-Ur7DuT08Cg7oPJIEVI,4976
|
|
147
152
|
pysdmx/model/map.py,sha256=9a3hl6efq_5kAYuJWkepoQOkao8Eqk17N69JGyRfxsk,17506
|
|
@@ -153,7 +158,7 @@ pysdmx/model/vtl.py,sha256=k7WIb89876xKlf7k0R9sgZ1VVlRrIkbV7FzvMFZn8e0,6985
|
|
|
153
158
|
pysdmx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
159
|
pysdmx/toolkit/__init__.py,sha256=yBRw4FXQH_RUJgF6vwZscNwCVBt-FMwslJEfDKa7eXo,26
|
|
155
160
|
pysdmx/toolkit/pd/__init__.py,sha256=3JoCZHamJR4mZfLt9GmaznLlG_YilmY0hAhuW5COQC8,3138
|
|
156
|
-
pysdmx/toolkit/pd/_data_utils.py,sha256=
|
|
161
|
+
pysdmx/toolkit/pd/_data_utils.py,sha256=S-u17kdYoWlZRLHFvCBKIO489cGBWcFcdCVjEhqJWuA,3311
|
|
157
162
|
pysdmx/toolkit/vtl/__init__.py,sha256=jYWScnAomHlkvTtl07ur82UEqALCveiAEmMbqdWhT1A,388
|
|
158
163
|
pysdmx/toolkit/vtl/_validations.py,sha256=k0le8fDUOGNl97P-QbNglrNyr5fCh5dLPMiTk1yu1jw,5590
|
|
159
164
|
pysdmx/toolkit/vtl/convert.py,sha256=FNToVTG4Zu9n7h_Fre-LEGihx8RMGSJb7G6-FFyPg8Y,11355
|
|
@@ -163,7 +168,7 @@ pysdmx/util/__init__.py,sha256=m_XWRAmVJ7F6ai4Ckrj_YuPbhg3cJZAXeZrEThrL88k,3997
|
|
|
163
168
|
pysdmx/util/_date_pattern_map.py,sha256=IS1qONwVHbTBNIFCT0Rqbijj2a9mYvs7onXSK6GeQAQ,1620
|
|
164
169
|
pysdmx/util/_model_utils.py,sha256=nQ1yWBt-tZYDios9xvRvJ7tHq6A8_RoGdY1wi7WGz2w,3793
|
|
165
170
|
pysdmx/util/_net_utils.py,sha256=nOTz_x3FgFrwKh42_J70IqYXz9duQkMFJWtejZXcLHs,1326
|
|
166
|
-
pysdmx-1.
|
|
167
|
-
pysdmx-1.
|
|
168
|
-
pysdmx-1.
|
|
169
|
-
pysdmx-1.
|
|
171
|
+
pysdmx-1.11.0.dist-info/METADATA,sha256=eO9SWX3mB1x9glSSm9wEJxu7JQoiHz9Rj9Ac1oPnQZI,5364
|
|
172
|
+
pysdmx-1.11.0.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
|
|
173
|
+
pysdmx-1.11.0.dist-info/licenses/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
|
|
174
|
+
pysdmx-1.11.0.dist-info/RECORD,,
|