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.
- pysdmx/__extras_check.py +3 -2
- pysdmx/__init__.py +1 -1
- pysdmx/api/fmr/__init__.py +4 -4
- pysdmx/api/gds/__init__.py +328 -0
- pysdmx/api/qb/gds.py +153 -0
- pysdmx/api/qb/service.py +91 -3
- pysdmx/api/qb/structure.py +1 -0
- pysdmx/api/qb/util.py +1 -0
- pysdmx/io/__init__.py +2 -1
- pysdmx/io/csv/sdmx10/reader/__init__.py +4 -2
- pysdmx/io/csv/sdmx10/writer/__init__.py +15 -2
- pysdmx/io/csv/sdmx20/reader/__init__.py +5 -2
- pysdmx/io/csv/sdmx20/writer/__init__.py +13 -2
- pysdmx/io/format.py +4 -0
- pysdmx/io/input_processor.py +12 -3
- pysdmx/io/json/fusion/messages/core.py +2 -0
- pysdmx/io/json/fusion/messages/report.py +13 -7
- pysdmx/io/json/gds/messages/__init__.py +35 -0
- pysdmx/io/json/gds/messages/agencies.py +41 -0
- pysdmx/io/json/gds/messages/catalog.py +79 -0
- pysdmx/io/json/gds/messages/sdmx_api.py +23 -0
- pysdmx/io/json/gds/messages/services.py +49 -0
- pysdmx/io/json/gds/messages/urn_resolver.py +43 -0
- pysdmx/io/json/gds/reader/__init__.py +12 -0
- pysdmx/io/json/sdmxjson2/messages/__init__.py +12 -4
- pysdmx/io/json/sdmxjson2/messages/agency.py +72 -0
- pysdmx/io/json/sdmxjson2/messages/category.py +22 -29
- pysdmx/io/json/sdmxjson2/messages/code.py +68 -64
- pysdmx/io/json/sdmxjson2/messages/concept.py +9 -18
- pysdmx/io/json/sdmxjson2/messages/constraint.py +2 -13
- pysdmx/io/json/sdmxjson2/messages/core.py +113 -21
- pysdmx/io/json/sdmxjson2/messages/dataflow.py +51 -21
- pysdmx/io/json/sdmxjson2/messages/dsd.py +110 -36
- pysdmx/io/json/sdmxjson2/messages/map.py +61 -49
- pysdmx/io/json/sdmxjson2/messages/pa.py +9 -17
- pysdmx/io/json/sdmxjson2/messages/provider.py +88 -0
- pysdmx/io/json/sdmxjson2/messages/report.py +84 -14
- pysdmx/io/json/sdmxjson2/messages/schema.py +14 -5
- pysdmx/io/json/sdmxjson2/messages/structure.py +105 -36
- pysdmx/io/json/sdmxjson2/messages/vtl.py +42 -96
- pysdmx/io/pd.py +2 -9
- pysdmx/io/reader.py +72 -27
- pysdmx/io/serde.py +11 -0
- pysdmx/io/writer.py +134 -0
- pysdmx/io/xml/{sdmx21/reader/__data_aux.py → __data_aux.py} +9 -2
- pysdmx/io/xml/{sdmx21/reader/__parse_xml.py → __parse_xml.py} +30 -6
- pysdmx/io/xml/__ss_aux_reader.py +96 -0
- pysdmx/io/xml/__structure_aux_reader.py +1174 -0
- pysdmx/io/xml/__structure_aux_writer.py +1233 -0
- pysdmx/io/xml/{sdmx21/__tokens.py → __tokens.py} +33 -1
- pysdmx/io/xml/{sdmx21/writer/__write_aux.py → __write_aux.py} +129 -37
- pysdmx/io/xml/{sdmx21/writer/__write_data_aux.py → __write_data_aux.py} +1 -1
- pysdmx/io/xml/__write_structure_specific_aux.py +254 -0
- pysdmx/io/xml/{sdmx21/reader/doc_validation.py → doc_validation.py} +10 -2
- pysdmx/io/xml/{sdmx21/reader/header.py → header.py} +11 -3
- pysdmx/io/xml/sdmx21/reader/error.py +2 -2
- pysdmx/io/xml/sdmx21/reader/generic.py +12 -8
- pysdmx/io/xml/sdmx21/reader/structure.py +5 -840
- pysdmx/io/xml/sdmx21/reader/structure_specific.py +13 -97
- pysdmx/io/xml/sdmx21/reader/submission.py +2 -2
- pysdmx/io/xml/sdmx21/writer/error.py +1 -1
- pysdmx/io/xml/sdmx21/writer/generic.py +13 -7
- pysdmx/io/xml/sdmx21/writer/structure.py +16 -828
- pysdmx/io/xml/sdmx21/writer/structure_specific.py +13 -238
- pysdmx/io/xml/sdmx30/__init__.py +1 -0
- pysdmx/io/xml/sdmx30/reader/__init__.py +1 -0
- pysdmx/io/xml/sdmx30/reader/structure.py +39 -0
- pysdmx/io/xml/sdmx30/reader/structure_specific.py +39 -0
- pysdmx/io/xml/sdmx30/writer/__init__.py +1 -0
- pysdmx/io/xml/sdmx30/writer/structure.py +67 -0
- pysdmx/io/xml/sdmx30/writer/structure_specific.py +108 -0
- pysdmx/model/__base.py +99 -34
- pysdmx/model/__init__.py +4 -0
- pysdmx/model/category.py +20 -0
- pysdmx/model/code.py +29 -8
- pysdmx/model/concept.py +52 -11
- pysdmx/model/dataflow.py +117 -33
- pysdmx/model/dataset.py +66 -14
- pysdmx/model/gds.py +161 -0
- pysdmx/model/map.py +51 -8
- pysdmx/model/message.py +235 -55
- pysdmx/model/metadata.py +79 -16
- pysdmx/model/submission.py +12 -7
- pysdmx/model/vtl.py +30 -13
- pysdmx/toolkit/__init__.py +1 -1
- pysdmx/toolkit/pd/__init__.py +85 -0
- pysdmx/toolkit/vtl/__init__.py +2 -1
- pysdmx/toolkit/vtl/_validations.py +1 -1
- pysdmx/toolkit/vtl/{generate_vtl_script.py → script_generation.py} +30 -4
- pysdmx/toolkit/vtl/validation.py +119 -0
- pysdmx/util/_model_utils.py +1 -1
- pysdmx-1.4.0rc1.dist-info/METADATA +119 -0
- pysdmx-1.4.0rc1.dist-info/RECORD +140 -0
- pysdmx/io/json/sdmxjson2/messages/org.py +0 -140
- pysdmx/toolkit/vtl/model_validations.py +0 -50
- pysdmx-1.3.0.dist-info/METADATA +0 -76
- pysdmx-1.3.0.dist-info/RECORD +0 -116
- /pysdmx/io/xml/{sdmx21/writer/config.py → config.py} +0 -0
- {pysdmx-1.3.0.dist-info → pysdmx-1.4.0rc1.dist-info}/LICENSE +0 -0
- {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")
|
pysdmx-1.3.0.dist-info/METADATA
DELETED
|
@@ -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
|
-
|
pysdmx-1.3.0.dist-info/RECORD
DELETED
|
@@ -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
|
|
File without changes
|
|
File without changes
|