pysdmx 1.3.0__py3-none-any.whl → 1.4.0rc1__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.
Files changed (100) hide show
  1. pysdmx/__extras_check.py +3 -2
  2. pysdmx/__init__.py +1 -1
  3. pysdmx/api/fmr/__init__.py +4 -4
  4. pysdmx/api/gds/__init__.py +328 -0
  5. pysdmx/api/qb/gds.py +153 -0
  6. pysdmx/api/qb/service.py +91 -3
  7. pysdmx/api/qb/structure.py +1 -0
  8. pysdmx/api/qb/util.py +1 -0
  9. pysdmx/io/__init__.py +2 -1
  10. pysdmx/io/csv/sdmx10/reader/__init__.py +4 -2
  11. pysdmx/io/csv/sdmx10/writer/__init__.py +15 -2
  12. pysdmx/io/csv/sdmx20/reader/__init__.py +5 -2
  13. pysdmx/io/csv/sdmx20/writer/__init__.py +13 -2
  14. pysdmx/io/format.py +4 -0
  15. pysdmx/io/input_processor.py +12 -3
  16. pysdmx/io/json/fusion/messages/core.py +2 -0
  17. pysdmx/io/json/fusion/messages/report.py +13 -7
  18. pysdmx/io/json/gds/messages/__init__.py +35 -0
  19. pysdmx/io/json/gds/messages/agencies.py +41 -0
  20. pysdmx/io/json/gds/messages/catalog.py +79 -0
  21. pysdmx/io/json/gds/messages/sdmx_api.py +23 -0
  22. pysdmx/io/json/gds/messages/services.py +49 -0
  23. pysdmx/io/json/gds/messages/urn_resolver.py +43 -0
  24. pysdmx/io/json/gds/reader/__init__.py +12 -0
  25. pysdmx/io/json/sdmxjson2/messages/__init__.py +12 -4
  26. pysdmx/io/json/sdmxjson2/messages/agency.py +72 -0
  27. pysdmx/io/json/sdmxjson2/messages/category.py +22 -29
  28. pysdmx/io/json/sdmxjson2/messages/code.py +68 -64
  29. pysdmx/io/json/sdmxjson2/messages/concept.py +9 -18
  30. pysdmx/io/json/sdmxjson2/messages/constraint.py +2 -13
  31. pysdmx/io/json/sdmxjson2/messages/core.py +113 -21
  32. pysdmx/io/json/sdmxjson2/messages/dataflow.py +51 -21
  33. pysdmx/io/json/sdmxjson2/messages/dsd.py +110 -36
  34. pysdmx/io/json/sdmxjson2/messages/map.py +61 -49
  35. pysdmx/io/json/sdmxjson2/messages/pa.py +9 -17
  36. pysdmx/io/json/sdmxjson2/messages/provider.py +88 -0
  37. pysdmx/io/json/sdmxjson2/messages/report.py +84 -14
  38. pysdmx/io/json/sdmxjson2/messages/schema.py +14 -5
  39. pysdmx/io/json/sdmxjson2/messages/structure.py +105 -36
  40. pysdmx/io/json/sdmxjson2/messages/vtl.py +42 -96
  41. pysdmx/io/pd.py +2 -9
  42. pysdmx/io/reader.py +72 -27
  43. pysdmx/io/serde.py +11 -0
  44. pysdmx/io/writer.py +134 -0
  45. pysdmx/io/xml/{sdmx21/reader/__data_aux.py → __data_aux.py} +9 -2
  46. pysdmx/io/xml/{sdmx21/reader/__parse_xml.py → __parse_xml.py} +30 -6
  47. pysdmx/io/xml/__ss_aux_reader.py +96 -0
  48. pysdmx/io/xml/__structure_aux_reader.py +1174 -0
  49. pysdmx/io/xml/__structure_aux_writer.py +1233 -0
  50. pysdmx/io/xml/{sdmx21/__tokens.py → __tokens.py} +33 -1
  51. pysdmx/io/xml/{sdmx21/writer/__write_aux.py → __write_aux.py} +129 -37
  52. pysdmx/io/xml/{sdmx21/writer/__write_data_aux.py → __write_data_aux.py} +1 -1
  53. pysdmx/io/xml/__write_structure_specific_aux.py +254 -0
  54. pysdmx/io/xml/{sdmx21/reader/doc_validation.py → doc_validation.py} +10 -2
  55. pysdmx/io/xml/{sdmx21/reader/header.py → header.py} +11 -3
  56. pysdmx/io/xml/sdmx21/reader/error.py +2 -2
  57. pysdmx/io/xml/sdmx21/reader/generic.py +12 -8
  58. pysdmx/io/xml/sdmx21/reader/structure.py +5 -840
  59. pysdmx/io/xml/sdmx21/reader/structure_specific.py +13 -97
  60. pysdmx/io/xml/sdmx21/reader/submission.py +2 -2
  61. pysdmx/io/xml/sdmx21/writer/error.py +1 -1
  62. pysdmx/io/xml/sdmx21/writer/generic.py +13 -7
  63. pysdmx/io/xml/sdmx21/writer/structure.py +16 -828
  64. pysdmx/io/xml/sdmx21/writer/structure_specific.py +13 -238
  65. pysdmx/io/xml/sdmx30/__init__.py +1 -0
  66. pysdmx/io/xml/sdmx30/reader/__init__.py +1 -0
  67. pysdmx/io/xml/sdmx30/reader/structure.py +39 -0
  68. pysdmx/io/xml/sdmx30/reader/structure_specific.py +39 -0
  69. pysdmx/io/xml/sdmx30/writer/__init__.py +1 -0
  70. pysdmx/io/xml/sdmx30/writer/structure.py +67 -0
  71. pysdmx/io/xml/sdmx30/writer/structure_specific.py +108 -0
  72. pysdmx/model/__base.py +99 -34
  73. pysdmx/model/__init__.py +4 -0
  74. pysdmx/model/category.py +20 -0
  75. pysdmx/model/code.py +29 -8
  76. pysdmx/model/concept.py +52 -11
  77. pysdmx/model/dataflow.py +117 -33
  78. pysdmx/model/dataset.py +66 -14
  79. pysdmx/model/gds.py +161 -0
  80. pysdmx/model/map.py +51 -8
  81. pysdmx/model/message.py +235 -55
  82. pysdmx/model/metadata.py +79 -16
  83. pysdmx/model/submission.py +12 -7
  84. pysdmx/model/vtl.py +30 -13
  85. pysdmx/toolkit/__init__.py +1 -1
  86. pysdmx/toolkit/pd/__init__.py +85 -0
  87. pysdmx/toolkit/vtl/__init__.py +2 -1
  88. pysdmx/toolkit/vtl/_validations.py +1 -1
  89. pysdmx/toolkit/vtl/{generate_vtl_script.py → script_generation.py} +30 -4
  90. pysdmx/toolkit/vtl/validation.py +119 -0
  91. pysdmx/util/_model_utils.py +1 -1
  92. pysdmx-1.4.0rc1.dist-info/METADATA +119 -0
  93. pysdmx-1.4.0rc1.dist-info/RECORD +140 -0
  94. pysdmx/io/json/sdmxjson2/messages/org.py +0 -140
  95. pysdmx/toolkit/vtl/model_validations.py +0 -50
  96. pysdmx-1.3.0.dist-info/METADATA +0 -76
  97. pysdmx-1.3.0.dist-info/RECORD +0 -116
  98. /pysdmx/io/xml/{sdmx21/writer/config.py → config.py} +0 -0
  99. {pysdmx-1.3.0.dist-info → pysdmx-1.4.0rc1.dist-info}/LICENSE +0 -0
  100. {pysdmx-1.3.0.dist-info → pysdmx-1.4.0rc1.dist-info}/WHEEL +0 -0
@@ -1,140 +0,0 @@
1
- """Collection of SDMX-JSON schemas for organisations."""
2
-
3
- from collections import defaultdict
4
- from datetime import datetime
5
- from typing import Dict, Optional, Sequence, Set
6
-
7
- from msgspec import Struct
8
-
9
- from pysdmx.io.json.sdmxjson2.messages.core import JsonAnnotation
10
- from pysdmx.io.json.sdmxjson2.messages.pa import JsonProvisionAgreement
11
- from pysdmx.model import (
12
- Agency,
13
- AgencyScheme,
14
- DataflowRef,
15
- DataProvider,
16
- DataProviderScheme,
17
- )
18
- from pysdmx.util import parse_item_urn, parse_urn
19
-
20
-
21
- class JsonDataProviderScheme(Struct, frozen=True):
22
- """SDMX-JSON payload for a data provider scheme."""
23
-
24
- agencyID: str
25
- name: str
26
- dataProviders: Sequence[DataProvider] = ()
27
- description: Optional[str] = None
28
- isExternalReference: bool = False
29
- validFrom: Optional[datetime] = None
30
- validTo: Optional[datetime] = None
31
- annotations: Optional[Sequence[JsonAnnotation]] = None
32
- isPartial: bool = False
33
-
34
- def __get_df_ref(self, ref: str) -> DataflowRef:
35
- a = parse_urn(ref)
36
- return DataflowRef(id=a.id, agency=a.agency, version=a.version)
37
-
38
- def to_model(
39
- self, pas: Sequence[JsonProvisionAgreement]
40
- ) -> DataProviderScheme:
41
- """Converts a JsonDataProviderScheme to a list of Organisations."""
42
- if pas:
43
- paprs: Dict[str, Set[DataflowRef]] = defaultdict(set)
44
- for pa in pas:
45
- df = self.__get_df_ref(pa.dataflow)
46
- ref = parse_item_urn(pa.dataProvider)
47
- paprs[f"{ref.agency}:{ref.item_id}"].add(df)
48
- provs = [
49
- DataProvider(
50
- id=p.id,
51
- name=p.name,
52
- description=p.description,
53
- contacts=p.contacts,
54
- dataflows=list(paprs[f"{self.agencyID}:{p.id}"]),
55
- )
56
- for p in self.dataProviders
57
- ]
58
- return DataProviderScheme(
59
- agency=self.agencyID,
60
- name=self.name,
61
- description=self.description,
62
- items=provs,
63
- )
64
- else:
65
- return DataProviderScheme(
66
- agency=self.agencyID,
67
- name=self.name,
68
- description=self.description,
69
- items=self.dataProviders,
70
- )
71
-
72
-
73
- class JsonDataProviderSchemes(Struct, frozen=True):
74
- """SDMX-JSON payload for the list of data provider schemes."""
75
-
76
- dataProviderSchemes: Sequence[JsonDataProviderScheme]
77
- provisionAgreements: Sequence[JsonProvisionAgreement] = ()
78
-
79
- def to_model(self) -> Sequence[DataProviderScheme]:
80
- """Converts a JsonDataProviderSchemes to a list of Organisations."""
81
- return [
82
- s.to_model(self.provisionAgreements)
83
- for s in self.dataProviderSchemes
84
- ]
85
-
86
-
87
- class JsonProviderMessage(Struct, frozen=True):
88
- """SDMX-JSON payload for /dataproviderscheme queries."""
89
-
90
- data: JsonDataProviderSchemes
91
-
92
- def to_model(self) -> Sequence[DataProviderScheme]:
93
- """Returns the requested list of data provider schemes."""
94
- return self.data.to_model()
95
-
96
-
97
- class JsonAgencyScheme(Struct, frozen=True):
98
- """SDMX-JSON payload for an agency scheme."""
99
-
100
- agencyID: str
101
- agencies: Sequence[Agency] = ()
102
- description: Optional[str] = None
103
- isExternalReference: bool = False
104
- validFrom: Optional[datetime] = None
105
- validTo: Optional[datetime] = None
106
- annotations: Optional[Sequence[JsonAnnotation]] = None
107
- isPartial: bool = False
108
-
109
- def __add_owner(self, owner: str, a: Agency) -> Agency:
110
- oid = f"{owner}.{a.id}" if owner != "SDMX" else a.id
111
- return Agency(
112
- id=oid, name=a.name, description=a.description, contacts=a.contacts
113
- )
114
-
115
- def to_model(self) -> AgencyScheme:
116
- """Returns the requested list of agencies."""
117
- agencies = [self.__add_owner(self.agencyID, a) for a in self.agencies]
118
- return AgencyScheme(
119
- description=self.description, agency=self.agencyID, items=agencies
120
- )
121
-
122
-
123
- class JsonAgencySchemes(Struct, frozen=True):
124
- """SDMX-JSON payload for the list of agency schemes."""
125
-
126
- agencySchemes: Sequence[JsonAgencyScheme]
127
-
128
- def to_model(self) -> Sequence[AgencyScheme]:
129
- """Returns the requested agency schemes."""
130
- return [a.to_model() for a in self.agencySchemes]
131
-
132
-
133
- class JsonAgencyMessage(Struct, frozen=True):
134
- """SDMX-JSON payload for /agencyscheme queries."""
135
-
136
- data: JsonAgencySchemes
137
-
138
- def to_model(self) -> Sequence[AgencyScheme]:
139
- """Returns the requested agency schemes."""
140
- return self.data.to_model()
@@ -1,50 +0,0 @@
1
- """Model validations for VTL models."""
2
-
3
- from typing import Union
4
-
5
- from pysdmx.__extras_check import __check_vtl_extra
6
- from pysdmx.errors import Invalid
7
- from pysdmx.model import (
8
- Ruleset,
9
- RulesetScheme,
10
- Transformation,
11
- TransformationScheme,
12
- UserDefinedOperator,
13
- UserDefinedOperatorScheme,
14
- VtlScheme,
15
- )
16
- from pysdmx.model.__base import Item
17
- from pysdmx.toolkit.vtl._validations import (
18
- _ruleset_scheme_validations,
19
- _ruleset_validation,
20
- _transformation_scheme_validations,
21
- _transformation_validations,
22
- _user_defined_operator_scheme_validations,
23
- _user_defined_operator_validation,
24
- )
25
-
26
-
27
- def model_validations(model_obj: Union[VtlScheme, Item]) -> None:
28
- """Validation checks for VTL models.
29
-
30
- Args:
31
- model_obj: A vtlscheme or Item object.
32
- raises:
33
- Invalid: Invalid model object if the model object is not valid.
34
- """
35
- __check_vtl_extra()
36
-
37
- if isinstance(model_obj, Ruleset):
38
- _ruleset_validation(model_obj)
39
- elif isinstance(model_obj, RulesetScheme):
40
- _ruleset_scheme_validations(model_obj)
41
- elif isinstance(model_obj, UserDefinedOperator):
42
- _user_defined_operator_validation(model_obj)
43
- elif isinstance(model_obj, UserDefinedOperatorScheme):
44
- _user_defined_operator_scheme_validations(model_obj)
45
- elif isinstance(model_obj, Transformation):
46
- _transformation_validations(model_obj)
47
- elif isinstance(model_obj, TransformationScheme):
48
- _transformation_scheme_validations(model_obj)
49
- else:
50
- raise Invalid("Invalid model object")
@@ -1,76 +0,0 @@
1
- Metadata-Version: 2.3
2
- Name: pysdmx
3
- Version: 1.3.0
4
- Summary: Your opinionated Python SDMX library
5
- License: Apache-2.0
6
- Keywords: sdmx,data discovery,data retrieval,metadata,fmr
7
- Author: Xavier Sosnovsky
8
- Author-email: <xavier.sosnovsky@bis.org>
9
- Requires-Python: >=3.9
10
- Classifier: Development Status :: 5 - Production/Stable
11
- Classifier: Intended Audience :: Developers
12
- Classifier: Intended Audience :: Science/Research
13
- Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: Typing :: Typed
15
- Provides-Extra: all
16
- Provides-Extra: data
17
- Provides-Extra: dc
18
- Provides-Extra: vtl
19
- Provides-Extra: xml
20
- Requires-Dist: httpx (>=0)
21
- Requires-Dist: lxml (>=5.2) ; extra == "all"
22
- Requires-Dist: lxml (>=5.2) ; extra == "xml"
23
- Requires-Dist: msgspec (>=0)
24
- Requires-Dist: pandas (>=2.1.4) ; extra == "all"
25
- Requires-Dist: pandas (>=2.1.4) ; extra == "data"
26
- Requires-Dist: parsy (>=2.1)
27
- Requires-Dist: python-dateutil (>=2.8.2) ; extra == "all"
28
- Requires-Dist: python-dateutil (>=2.8.2) ; extra == "dc"
29
- Requires-Dist: sdmxschemas (>=0.2.0) ; extra == "all"
30
- Requires-Dist: sdmxschemas (>=0.2.0) ; extra == "xml"
31
- Requires-Dist: vtlengine (>=1.1rc1) ; extra == "all"
32
- Requires-Dist: vtlengine (>=1.1rc1) ; extra == "vtl"
33
- Requires-Dist: xmltodict (>=0.13) ; extra == "all"
34
- Requires-Dist: xmltodict (>=0.13) ; extra == "xml"
35
- Project-URL: Bug Tracker, https://bis-med-it.github.io/pysdmx/issues
36
- Project-URL: Documentation, https://bis-med-it.github.io/pysdmx
37
- Project-URL: Homepage, https://sdmx.io/tools/pysdmx
38
- Project-URL: Repository, https://github.com/bis-med-it/pysdmx
39
- Description-Content-Type: text/x-rst
40
-
41
- .. |pypi badge| image:: https://img.shields.io/pypi/v/pysdmx.svg
42
- :target: https://pypi.org/project/pysdmx/
43
-
44
- .. |awesome badge| image:: https://awesome.re/mentioned-badge.svg
45
- :target: http://www.awesomeofficialstatistics.org
46
-
47
- |pypi badge| |awesome badge|
48
-
49
- ``pysdmx`` in a nutshell
50
- ========================
51
-
52
- ``pysdmx`` is a pragmatic and **opinionated** library written in Python. It
53
- focuses on simplicity, providing a subset of SDMX functionalities without
54
- requiring advanced knowledge of SDMX.
55
-
56
- Key features:
57
-
58
- - **SDMX information model in Python**: ``pysdmx`` offers Python classes
59
- representing a **simplified subset of the SDMX information model**,
60
- enabling a domain-driven development of SDMX processes with Python. These
61
- classes are serializable.
62
- - **Metadata in action**: ``pysdmx`` supports retrieving metadata from an SDMX
63
- Registry or any service compliant with the SDMX-REST 2.0.0 API. Use these
64
- metadata to power statistical processes.
65
- - **Reading and writing SDMX files**: ``pysdmx`` support reading and writing
66
- SDMX data and structure messages, in various formats.
67
- - **Data discovery and retrieval**: This functionality is under development.
68
- ``pysdmx`` will enable listing public SDMX services, discovering available
69
- data available, and retrieving data from these services.
70
-
71
- ``pysdmx`` is available on `PyPI <https://pypi.org/>`_ and can be
72
- installed using options such as pip, pipx, poetry, etc.
73
-
74
- For more details, check the `project documentation
75
- <https://py.sdmx.io>`_.
76
-
@@ -1,116 +0,0 @@
1
- pysdmx/__extras_check.py,sha256=33-IZ0_sqpU4uDthd07dpQSNKMYIu7JaEPuji4-TbEA,1620
2
- pysdmx/__init__.py,sha256=Ui84qa-cveADydAjXKZL4EjAKO1PKwIyXWO6zTO7Gho,67
3
- pysdmx/api/__init__.py,sha256=8lRaF6kEO51ehl0fmW_pHLvkN_34TtEhqhr3oKo6E6g,26
4
- pysdmx/api/dc/__init__.py,sha256=oPU32X8CRZy4T1to9mO5KMqMwxQsVI424dPqai-I8zI,121
5
- pysdmx/api/dc/_api.py,sha256=poy1FYFXnF6maBGy5lpOodf32-7QQjH8PCBNDkuOXxQ,7747
6
- pysdmx/api/dc/query/__init__.py,sha256=wcgbCaULRRixC1S9KjQrwHnaM3gwIGIZw8W1JwrZCQY,459
7
- pysdmx/api/dc/query/_model.py,sha256=PsKXQbAk5_iT-jRukiCuWjoGaStAOyRBtAPewz0C6WM,2910
8
- pysdmx/api/dc/query/_parsing_model.py,sha256=89UMQVExPC7ebYZRX6o7gwYLhlzhwK8X02lZxHv6P0U,1200
9
- pysdmx/api/dc/query/_parsing_util.py,sha256=pUc5z6sijGmJZsLilAxiPsCSRIO7l2iznzL3oE24eU8,2391
10
- pysdmx/api/dc/query/_py_parser.py,sha256=_kVUk6Xu5jZdclng1F6eDSZS2-ok_yncI1y1q5lYpBU,1502
11
- pysdmx/api/dc/query/_sql_parser.py,sha256=vQjhSyt6qA4jAHchkq4XXVhNPtKjKSVLzhoPkUyhJKk,1561
12
- pysdmx/api/dc/query/util.py,sha256=9HALmvlgVCckaMTVG7sEFbAw_mBwfbL4K-Pac2KPSYw,915
13
- pysdmx/api/fmr/__init__.py,sha256=7DQq87PrjE_G13AsW9dwQEUSGjeR_zWa-KA7C108hvM,40791
14
- pysdmx/api/qb/__init__.py,sha256=vxdMJFFg4J_KWADrnzj_8KcU0UlwpJPdx0yiW3QJo9Y,1498
15
- pysdmx/api/qb/availability.py,sha256=2yPHnTXu_jACNKNhhtXMkxVkfLK1Ewa5ucGAbRxvC5o,10181
16
- pysdmx/api/qb/data.py,sha256=RUcSQBZYkqlrD2ehrGxUWUEAyjbfl5CSgjQ6BwN3hus,22049
17
- pysdmx/api/qb/refmeta.py,sha256=rWhMcUkcQ0zYoiEVAVFOnykLLhMWFFZssFZh8z3kRng,10677
18
- pysdmx/api/qb/registration.py,sha256=IURlmXcXQi8e-w5YXCgRNs07EQJZJ2bOdZb7M_k5iZ8,7132
19
- pysdmx/api/qb/schema.py,sha256=f0V-fQl9GQ2YWhnZqUF_wogB2L9dRIdY_vT4XvYkqoI,5747
20
- pysdmx/api/qb/service.py,sha256=acWS8Xzh291IaHQv8pjmSXhvSUF5E7K8wm8Kcnjjudw,12039
21
- pysdmx/api/qb/structure.py,sha256=LPWtO_3z2HbGJk0Rosu9QZ5vZhLGUrw1VeYUKgEaa7Y,17752
22
- pysdmx/api/qb/util.py,sha256=j_7JFGcNm6jk-tdcaDQZBWNAK2xty1-eS7w0vpqd524,3635
23
- pysdmx/errors.py,sha256=9bfujYykzfGMa1TuUOmH9QqghnZGOo556fvbKH2jFa8,3295
24
- pysdmx/io/__init__.py,sha256=fV_rK2NVgrvcwRqsf-soyJbZJ0Y146KP_-ev_Aw2p9w,126
25
- pysdmx/io/csv/__init__.py,sha256=53f2rPkwILigOqArgRQOOwLk-ha6zVTe4EypIsR7K6I,107
26
- pysdmx/io/csv/sdmx10/__init__.py,sha256=NAAm_yodK-gzkuzewGQeYpF3f5nZmDA4vWGfT2KGTWc,38
27
- pysdmx/io/csv/sdmx10/reader/__init__.py,sha256=i_WOMyTwSmfhMTNzhTK8mWxMWC3ExNqKnwpAvrc6V4U,2793
28
- pysdmx/io/csv/sdmx10/writer/__init__.py,sha256=rUJj2uuqeADP1QxbzNbMgjWw-sR5RiL6dLJDUJe0Klc,1286
29
- pysdmx/io/csv/sdmx20/__init__.py,sha256=mNfMJKSpmMfk4CbbHhjnBOTQ2IZFY15cNUhHtJPcs90,231
30
- pysdmx/io/csv/sdmx20/reader/__init__.py,sha256=6gtMBA4-NES5Znn9f3S8Vnr7SfWfWuoN1-7fOQvwoKs,4771
31
- pysdmx/io/csv/sdmx20/writer/__init__.py,sha256=SyOl0S9B2Frx2Gn8RvcABNYfjyXE0ztAbbZ0qvYq090,1759
32
- pysdmx/io/format.py,sha256=1VdfMWgLduoWx-BHEHZB_hG1NE6THEmzojasgKZoLg0,4046
33
- pysdmx/io/input_processor.py,sha256=IaR7mMKDgLk2IZtkUDCCfvIPPUFaUK-tDqzOF-9g4fI,4756
34
- pysdmx/io/json/fusion/messages/__init__.py,sha256=C0LAG6UfIZcQdlCv5d_D1ZNIcCq04RxZYLAp6tLDqwY,1573
35
- pysdmx/io/json/fusion/messages/category.py,sha256=E9jrzXenEpqDNUhT1JJLYxty37PSGegRtx45mB3-COg,4589
36
- pysdmx/io/json/fusion/messages/code.py,sha256=kB3RJiSA75G4IJYObYR0hdiXYcRs-vNMKqUeA6F4SSo,7529
37
- pysdmx/io/json/fusion/messages/concept.py,sha256=aOfJxQSC3b1cgDdxZNFUcab3mpPEvtnXIbNjbIwPIog,2750
38
- pysdmx/io/json/fusion/messages/constraint.py,sha256=dPkzhCWN49Y9ReSZPRFTdM6GWc0rU2BZTyFfWsqlX34,615
39
- pysdmx/io/json/fusion/messages/core.py,sha256=wIRathhG-0PsVy-Tw_RpiBQHresgRLEn8u86NKitLvw,4746
40
- pysdmx/io/json/fusion/messages/dataflow.py,sha256=oxocZAdl_uMroO6Msu6k7lEz_tGLvj3oKeDhH_IMb7E,2833
41
- pysdmx/io/json/fusion/messages/dsd.py,sha256=ccNKx3RlWNkIDMpDJ036mxzkNy8-ZFSOBGfZyjEOths,7755
42
- pysdmx/io/json/fusion/messages/map.py,sha256=TPsCFuUfk5Jhhe7CNvEoHuFNZFpHhvNiYFWeIEUx-sc,7695
43
- pysdmx/io/json/fusion/messages/org.py,sha256=9gZpHg6o4fPGY9fUIDUCyKQCCLL6NYFHnQJkxdXD8v8,6264
44
- pysdmx/io/json/fusion/messages/pa.py,sha256=6zN8Qxj5bdf5zo2N9TwYlSLyGxokvsELtk1--1cMbxw,1393
45
- pysdmx/io/json/fusion/messages/report.py,sha256=MiWqJIB6_jbqO4R9b7FSHZL2SMHgNqeHGqS4Ehp-JZI,1409
46
- pysdmx/io/json/fusion/messages/schema.py,sha256=47uiSD5GSrd6TCnDFeg10SztP3vNuzKbYSvvKNK4wB0,2371
47
- pysdmx/io/json/fusion/messages/vtl.py,sha256=7VGjDRWzKMO6WT4CnGvGBKinhX06DzrJmDRudnvN4XM,16092
48
- pysdmx/io/json/fusion/reader/__init__.py,sha256=fpya2W7YJ6lcdupAybBawMtJI7PT0gy48gLkDbuPTWU,1295
49
- pysdmx/io/json/sdmxjson2/messages/__init__.py,sha256=V4ojpSgSTtwSVp_RWSJkp1FbIqFpf9R-ogmBjoIVMVA,1534
50
- pysdmx/io/json/sdmxjson2/messages/category.py,sha256=V4SNY4UoXU9A_pDvnA1_S17ijEH__oyFYBX5jEqNWx0,4993
51
- pysdmx/io/json/sdmxjson2/messages/code.py,sha256=Xi20wxUCDHEKbIJxsRRna4vz5MfAweTUmIZvkwOHAaQ,9137
52
- pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=xO828jTWrHLTJ4BWRzXHxp55FakIJUOS1vJDcZeUG4Y,3326
53
- pysdmx/io/json/sdmxjson2/messages/constraint.py,sha256=MGKFyDLxkPrQby1eV_Ar5fr6hqdmXeJHOS2N03w9ebA,1995
54
- pysdmx/io/json/sdmxjson2/messages/core.py,sha256=_7Zki9Mdr3QHTR-9uh2rfaF1suFZ2I3gPhtYRY89IEs,3976
55
- pysdmx/io/json/sdmxjson2/messages/dataflow.py,sha256=peAQo2Y-rQzISPBQHz-jo3SQmnDZNEdwxrpWKF76wyY,3258
56
- pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=hKAHK7hYnef2RhJNYwYvYP0HdE9beDljc410IuK_hRU,8998
57
- pysdmx/io/json/sdmxjson2/messages/map.py,sha256=sd4ymlsSE6jaNIOHwNb6-nlHrBF_Q9H42_d4iEQRg3s,9373
58
- pysdmx/io/json/sdmxjson2/messages/org.py,sha256=F1FcOtsyxcvq-3DtVYnPd-JRficgGbgC8q_7ugS2fu0,4630
59
- pysdmx/io/json/sdmxjson2/messages/pa.py,sha256=v7qNkugu9WvMaC3QzlwP1GD6VD-6GRTxudPqz-nBz2Y,1867
60
- pysdmx/io/json/sdmxjson2/messages/report.py,sha256=Er991TRzpUxUnv-3WsHKi3SuQGVMOGfdGg_TaUXWijA,1017
61
- pysdmx/io/json/sdmxjson2/messages/schema.py,sha256=-Zne5KpLWratp4CmzK4X5E2AlQKuY_rPuL66WISkCos,2527
62
- pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=hlhsPiWts4lkRVfn4PyAJTuRK8iUpcyErhe9ovb9VjU,2364
63
- pysdmx/io/json/sdmxjson2/messages/vtl.py,sha256=VHx3YvB-bVwo_vg--1uzT0lrG0yPE9KTxRW6nO4N9Ps,15556
64
- pysdmx/io/json/sdmxjson2/reader/__init__.py,sha256=f9vTKscFIAQpAKh3pZ4ZKlZSKyGfj1yaZS9w7S0_hIc,1264
65
- pysdmx/io/pd.py,sha256=IO6JC_QK99atn05mtbUBMgaB5ououQNT0K2KLfv0ssc,701
66
- pysdmx/io/reader.py,sha256=6TUbOWQ95ioTDiAnv8Nb9CnvWIcBBpdORcROmRnolbw,6164
67
- pysdmx/io/serde.py,sha256=cQEKqNP-2pKAbQsi8CtQ-OTdY2UhZ3QgqaS9mNH3BE4,874
68
- pysdmx/io/xml/__allowed_lxml_errors.py,sha256=PdIK2i6JwwGRh1Ogc5JA0hRySO7QXJKN-DI8EYtdjA0,225
69
- pysdmx/io/xml/__init__.py,sha256=tcUsSEiM3nBA7lDbZPwGZ7Vu_K9gQd8oliASUMTGjFE,105
70
- pysdmx/io/xml/sdmx21/__init__.py,sha256=_rh_dz1d-LmUw4iVbsZQkTXANTJeR8ov8z_4jNRGhtg,38
71
- pysdmx/io/xml/sdmx21/__tokens.py,sha256=_CKp4V8tOJwjc2tKtfKQJSxKV9MeIvbl8jHtDHr1q1E,5672
72
- pysdmx/io/xml/sdmx21/reader/__data_aux.py,sha256=tq_uz9Up1acjnD-e84X7x6RQ9r8le47SdthwFWdYcto,3769
73
- pysdmx/io/xml/sdmx21/reader/__init__.py,sha256=2jMsySFbbq-So3ymqzKVi5gOPRwO0qasBBwntD03rTw,34
74
- pysdmx/io/xml/sdmx21/reader/__parse_xml.py,sha256=lLzNtDgDyqhGkxltdhO7qoww-KuXHvOJRMeufWuC-ps,1359
75
- pysdmx/io/xml/sdmx21/reader/doc_validation.py,sha256=x5VsfwctLgcq6rpkhpyUZwGOx97KstXmSAA68ONrx84,1345
76
- pysdmx/io/xml/sdmx21/reader/error.py,sha256=n6xGo9kUtTUYI2hppnUXpP6amO0FARZ_rSwuJQ3g9lw,906
77
- pysdmx/io/xml/sdmx21/reader/generic.py,sha256=ff6aDIWBUAmQ7cv13AqShP9jkqpYifamrKfW_LLakjA,4970
78
- pysdmx/io/xml/sdmx21/reader/header.py,sha256=nSdqR1J-uN7FOaLsACcg5Ag_bPWd_4YQSjLHrHrvQ7o,5215
79
- pysdmx/io/xml/sdmx21/reader/structure.py,sha256=6aPFRoMzPWiZR-kozQrJA8t8kTl-QtTAb7RgdIAJ6ig,26792
80
- pysdmx/io/xml/sdmx21/reader/structure_specific.py,sha256=udDLkIdiIaZLCJTHj7V22yWsDv7wcJXM7H2n-UEqOxk,3809
81
- pysdmx/io/xml/sdmx21/reader/submission.py,sha256=e9VfKYF48_oKJCfe_UiL4O-x-sC6pUtxvD-_otc5FH4,1732
82
- pysdmx/io/xml/sdmx21/writer/__init__.py,sha256=QQGFAss26njCC4eKYxhBcI9LYm5NHuJaAJGKCrIrL80,31
83
- pysdmx/io/xml/sdmx21/writer/__write_aux.py,sha256=x98g9BosrZMzYSLIZl6PH83Z0vr2N14JmxSjvPYNeVo,10884
84
- pysdmx/io/xml/sdmx21/writer/__write_data_aux.py,sha256=8gnOGlCCM3pOY67xQ6MRQjEy5pLQHNP7UmoON0btB28,4291
85
- pysdmx/io/xml/sdmx21/writer/config.py,sha256=R24cczVkzkhjVLXpv-qfEm88W3_QTqVt2Qofi8IvJ5Y,93
86
- pysdmx/io/xml/sdmx21/writer/error.py,sha256=hzJQTobAyjq71YmOIuV0M5tJMotip9kxzZ2Xh_YK0Ck,367
87
- pysdmx/io/xml/sdmx21/writer/generic.py,sha256=tDHUV4529oJ_6sum_4qEACoYnELZlZ7RH1Fumm_ogJE,13522
88
- pysdmx/io/xml/sdmx21/writer/structure.py,sha256=gqcCwUxSeQ-KpC_BmeyT13mlwf1avodOdiaKyuj7EgA,26743
89
- pysdmx/io/xml/sdmx21/writer/structure_specific.py,sha256=sATfkyE9IdhDZ-DXM_7KDmc5XD004bdro_Z89BEkI_c,9516
90
- pysdmx/io/xml/utils.py,sha256=ljrocQwPTYycg3I68sqYI5pF8qukNccSCMM9Xf_Tag0,583
91
- pysdmx/model/__base.py,sha256=LvbIvMA8a2rhAYwm3QfqDjVAwhjPzfnrUHxQjn7amEM,11137
92
- pysdmx/model/__init__.py,sha256=EoAkQKLBVuVL6t-_OfhXcXlJslL6ns1gyMQUp3PG8dM,4890
93
- pysdmx/model/category.py,sha256=av8eu6q7earofxVKd8xqoRC3lpqy5a7bYkt3iWpodGM,5194
94
- pysdmx/model/code.py,sha256=eKS5nqcYqUzQSfprqk4sD-Rr9e6RTfzAlzaawXmBUZ0,10960
95
- pysdmx/model/concept.py,sha256=gJL83cNk_LBB-eNtyDyEbT456bPTVx4BS6RLNCa71FQ,7666
96
- pysdmx/model/dataflow.py,sha256=-v4vQeY8xCxm4mukKc6rKdpfAqTE13dsq5l427zzLGY,18692
97
- pysdmx/model/dataset.py,sha256=8xBg8JxItI5kxkd6ZOVoX08yTMHDyC2jrLP6VjJWzAE,2349
98
- pysdmx/model/map.py,sha256=MGx2uKwZ0STyvMLp72Nmsoc4KGzGJZaR-kjt_O9AV5Y,15587
99
- pysdmx/model/message.py,sha256=VQLfaTnc3HRrJGL7TosCEy5BB9gJ1rEhrzgUY1xsb8I,7419
100
- pysdmx/model/metadata.py,sha256=TykcCH36skabLYKxon10vjir1MlylPAhmWylStKFRE4,4722
101
- pysdmx/model/organisation.py,sha256=k6ZQ_O4l7174Y8tr-nnMnsUL0q0O8Rw3q4mIWmJUh2A,4706
102
- pysdmx/model/submission.py,sha256=r34nMNK0QS_pIGPpH3PGUPL1dExWebS62rdmIx7dS-Y,517
103
- pysdmx/model/vtl.py,sha256=8hynKB_K1Ez4MLxC-HcStG34ela3IoYUO1J-Gjrexns,6571
104
- pysdmx/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
- pysdmx/toolkit/__init__.py,sha256=oBy8tqcfxashUf0Bkrs4scH0jNo8GnPa6VO3DoM3YrM,30
106
- pysdmx/toolkit/vtl/__init__.py,sha256=Q1Wd9KtVyEox5AxInPz1cYo_AXio8bkFUc_SFprh1-g,157
107
- pysdmx/toolkit/vtl/_validations.py,sha256=fIXsSYAAKHFWfkH90OPxVSEf-o1LzSPBA2yuFdYda3o,5684
108
- pysdmx/toolkit/vtl/generate_vtl_script.py,sha256=cFV01gVZVjUDoeysoPU5tODSSEJuRiPX4De6z16eWkk,2362
109
- pysdmx/toolkit/vtl/model_validations.py,sha256=0L7gd-OG80P_mq_tzfcB0-9Ilw_EqFtmupRuNQpG0kI,1574
110
- pysdmx/util/__init__.py,sha256=6sSo9wq6BQIrCV1aaeNj8AWztxqsEkDZA-pRAFzwmUQ,3921
111
- pysdmx/util/_date_pattern_map.py,sha256=IS1qONwVHbTBNIFCT0Rqbijj2a9mYvs7onXSK6GeQAQ,1620
112
- pysdmx/util/_model_utils.py,sha256=6IMOo474zXID2K3ql5Xmb_Vpghny7YPndZ_vTZsCS64,2278
113
- pysdmx-1.3.0.dist-info/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
114
- pysdmx-1.3.0.dist-info/METADATA,sha256=9Sr8JOUoKEqpTG9sy8DOFcaCtgC37zm3xm0NiGnxyEo,3102
115
- pysdmx-1.3.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
116
- pysdmx-1.3.0.dist-info/RECORD,,
File without changes