pysdmx 1.5.2__py3-none-any.whl → 1.7.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.
Files changed (63) hide show
  1. pysdmx/__init__.py +1 -1
  2. pysdmx/api/fmr/__init__.py +8 -3
  3. pysdmx/api/fmr/maintenance.py +158 -0
  4. pysdmx/api/qb/structure.py +1 -0
  5. pysdmx/api/qb/util.py +1 -0
  6. pysdmx/io/csv/__csv_aux_reader.py +99 -0
  7. pysdmx/io/csv/__csv_aux_writer.py +118 -0
  8. pysdmx/io/csv/sdmx10/reader/__init__.py +9 -14
  9. pysdmx/io/csv/sdmx10/writer/__init__.py +28 -2
  10. pysdmx/io/csv/sdmx20/__init__.py +0 -9
  11. pysdmx/io/csv/sdmx20/reader/__init__.py +8 -61
  12. pysdmx/io/csv/sdmx20/writer/__init__.py +32 -25
  13. pysdmx/io/csv/sdmx21/__init__.py +1 -0
  14. pysdmx/io/csv/sdmx21/reader/__init__.py +86 -0
  15. pysdmx/io/csv/sdmx21/writer/__init__.py +70 -0
  16. pysdmx/io/format.py +8 -0
  17. pysdmx/io/input_processor.py +20 -6
  18. pysdmx/io/json/fusion/messages/code.py +21 -4
  19. pysdmx/io/json/fusion/messages/concept.py +10 -8
  20. pysdmx/io/json/fusion/messages/dataflow.py +8 -1
  21. pysdmx/io/json/fusion/messages/dsd.py +15 -0
  22. pysdmx/io/json/fusion/messages/schema.py +8 -1
  23. pysdmx/io/json/sdmxjson2/messages/agency.py +43 -7
  24. pysdmx/io/json/sdmxjson2/messages/category.py +92 -7
  25. pysdmx/io/json/sdmxjson2/messages/code.py +265 -22
  26. pysdmx/io/json/sdmxjson2/messages/concept.py +75 -13
  27. pysdmx/io/json/sdmxjson2/messages/constraint.py +5 -5
  28. pysdmx/io/json/sdmxjson2/messages/core.py +121 -14
  29. pysdmx/io/json/sdmxjson2/messages/dataflow.py +63 -8
  30. pysdmx/io/json/sdmxjson2/messages/dsd.py +215 -20
  31. pysdmx/io/json/sdmxjson2/messages/map.py +200 -24
  32. pysdmx/io/json/sdmxjson2/messages/pa.py +36 -5
  33. pysdmx/io/json/sdmxjson2/messages/provider.py +35 -7
  34. pysdmx/io/json/sdmxjson2/messages/report.py +85 -7
  35. pysdmx/io/json/sdmxjson2/messages/schema.py +11 -12
  36. pysdmx/io/json/sdmxjson2/messages/structure.py +150 -2
  37. pysdmx/io/json/sdmxjson2/messages/vtl.py +547 -17
  38. pysdmx/io/json/sdmxjson2/reader/metadata.py +32 -0
  39. pysdmx/io/json/sdmxjson2/reader/structure.py +32 -0
  40. pysdmx/io/json/sdmxjson2/writer/__init__.py +9 -0
  41. pysdmx/io/json/sdmxjson2/writer/metadata.py +60 -0
  42. pysdmx/io/json/sdmxjson2/writer/structure.py +61 -0
  43. pysdmx/io/reader.py +28 -9
  44. pysdmx/io/serde.py +17 -0
  45. pysdmx/io/writer.py +45 -9
  46. pysdmx/io/xml/__ss_aux_reader.py +1 -2
  47. pysdmx/io/xml/__structure_aux_reader.py +15 -10
  48. pysdmx/io/xml/__structure_aux_writer.py +15 -13
  49. pysdmx/io/xml/__write_data_aux.py +6 -57
  50. pysdmx/io/xml/__write_structure_specific_aux.py +7 -3
  51. pysdmx/io/xml/doc_validation.py +1 -3
  52. pysdmx/io/xml/sdmx21/writer/generic.py +6 -4
  53. pysdmx/model/__init__.py +1 -3
  54. pysdmx/model/code.py +11 -1
  55. pysdmx/model/dataflow.py +23 -0
  56. pysdmx/model/map.py +19 -13
  57. pysdmx/model/message.py +10 -5
  58. pysdmx/toolkit/pd/_data_utils.py +99 -0
  59. pysdmx/toolkit/vtl/_validations.py +2 -3
  60. {pysdmx-1.5.2.dist-info → pysdmx-1.7.0.dist-info}/METADATA +4 -3
  61. {pysdmx-1.5.2.dist-info → pysdmx-1.7.0.dist-info}/RECORD +63 -51
  62. {pysdmx-1.5.2.dist-info → pysdmx-1.7.0.dist-info}/WHEEL +1 -1
  63. {pysdmx-1.5.2.dist-info → pysdmx-1.7.0.dist-info/licenses}/LICENSE +0 -0
@@ -21,11 +21,11 @@ from pysdmx.io.xml.__write_aux import (
21
21
  from pysdmx.io.xml.__write_data_aux import (
22
22
  check_content_dataset,
23
23
  check_dimension_at_observation,
24
- get_codes,
25
24
  writing_validation,
26
25
  )
27
26
  from pysdmx.io.xml.config import CHUNKSIZE
28
27
  from pysdmx.model.message import Header
28
+ from pysdmx.toolkit.pd._data_utils import get_codes
29
29
  from pysdmx.util import parse_short_urn
30
30
 
31
31
 
@@ -327,10 +327,12 @@ def __group_processing(
327
327
  .to_dict(orient="records")
328
328
  )
329
329
 
330
- for record in grouped_data:
331
- out_list.append(
330
+ out_list.extend(
331
+ [
332
332
  __format_group_str(record, group_id, dimensions, attribute)
333
- )
333
+ for record in grouped_data
334
+ ]
335
+ )
334
336
 
335
337
  return "".join(out_list)
336
338
 
pysdmx/model/__init__.py CHANGED
@@ -131,9 +131,7 @@ def decoders(type: Type, obj: Any) -> Any: # type: ignore[type-arg]
131
131
  target types
132
132
  """
133
133
  if type is Components:
134
- comps = []
135
- for item in obj:
136
- comps.append(msgspec.convert(item, Component))
134
+ comps = [msgspec.convert(item, Component) for item in obj]
137
135
  return Components(comps)
138
136
  else:
139
137
  raise NotImplementedError(f"Objects of type {type} are not supported")
pysdmx/model/code.py CHANGED
@@ -21,7 +21,13 @@ from typing import Iterator, Literal, Optional, Sequence, Union
21
21
 
22
22
  from msgspec import Struct
23
23
 
24
- from pysdmx.model.__base import Agency, Item, ItemScheme, MaintainableArtefact
24
+ from pysdmx.model.__base import (
25
+ Agency,
26
+ Annotation,
27
+ Item,
28
+ ItemScheme,
29
+ MaintainableArtefact,
30
+ )
25
31
 
26
32
 
27
33
  class Code(Item, frozen=True, omit_defaults=True):
@@ -139,6 +145,8 @@ class HierarchicalCode(
139
145
  rel_valid_from: Start of the hierarchical relationship validity.
140
146
  rel_valid_to: End of the hierarchical relationship validity.
141
147
  codes: The child codes.
148
+ annotations: Annotations attached to the code.
149
+ urn: The URN of the code.
142
150
  """
143
151
 
144
152
  id: str
@@ -149,6 +157,8 @@ class HierarchicalCode(
149
157
  rel_valid_from: Optional[datetime] = None
150
158
  rel_valid_to: Optional[datetime] = None
151
159
  codes: Sequence["HierarchicalCode"] = ()
160
+ annotations: Sequence[Annotation] = ()
161
+ urn: Optional[str] = None
152
162
 
153
163
  def __iter__(self) -> Iterator["HierarchicalCode"]:
154
164
  """Return an iterator over the list of codes."""
pysdmx/model/dataflow.py CHANGED
@@ -130,6 +130,9 @@ class Component(
130
130
  commas, for series- and group-level attributes).
131
131
  A post_init check makes this attribute mandatory for attributes.
132
132
  array_def: Any additional constraints for array types.
133
+ urn: The URN of the component.
134
+ local_enum_ref: The URN of the enumeration (codelist or valuelist) from
135
+ which the local codes are taken.
133
136
  """
134
137
 
135
138
  id: str
@@ -144,6 +147,7 @@ class Component(
144
147
  attachment_level: Optional[str] = None
145
148
  array_def: Optional[ArrayBoundaries] = None
146
149
  urn: Optional[str] = None
150
+ local_enum_ref: Optional[str] = None
147
151
 
148
152
  def __post_init__(self) -> None:
149
153
  """Validate the component."""
@@ -217,6 +221,20 @@ class Component(
217
221
  else:
218
222
  return None
219
223
 
224
+ @property
225
+ def enum_ref(self) -> Optional[str]:
226
+ """Returns the URN of the enumeration from which the codes are taken.
227
+
228
+ Returns:
229
+ The URN of the enumeration from which the codes are taken.
230
+ """
231
+ if self.local_enum_ref:
232
+ return self.local_enum_ref
233
+ elif isinstance(self.concept, Concept) and self.concept.enum_ref:
234
+ return self.concept.enum_ref
235
+ else:
236
+ return None
237
+
220
238
  def __str__(self) -> str:
221
239
  """Custom string representation without the class name."""
222
240
  processed_output = []
@@ -393,6 +411,7 @@ class DataflowInfo(
393
411
  end_period: The oldest period for which data are available.
394
412
  last_updated: When the dataflow was last updated.
395
413
  dsd_ref: The URN of the data structure used by the dataflow.
414
+ groups: The sequence of groups defined in the data structure.
396
415
  """
397
416
 
398
417
  id: str
@@ -408,6 +427,7 @@ class DataflowInfo(
408
427
  end_period: Optional[str] = None
409
428
  last_updated: Optional[datetime] = None
410
429
  dsd_ref: Optional[str] = None
430
+ groups: Optional[Sequence[Group]] = None
411
431
 
412
432
  def __str__(self) -> str:
413
433
  """Custom string representation without the class name."""
@@ -472,6 +492,7 @@ class Schema(Struct, frozen=True, omit_defaults=True, repr_omit_defaults=True):
472
492
  version: str = "1.0"
473
493
  artefacts: Sequence[str] = ()
474
494
  generated: datetime = datetime.now(timezone.utc)
495
+ name: Optional[str] = None
475
496
  groups: Optional[Sequence[Group]] = None
476
497
 
477
498
  def __str__(self) -> str:
@@ -533,6 +554,7 @@ class DataStructureDefinition(MaintainableArtefact, frozen=True, kw_only=True):
533
554
  valid_from: The date from which the data structure is valid.
534
555
  valid_to: The date until which the data structure is valid.
535
556
  version: The version of the data structure.
557
+ components: The list of relevant components for this data structure.
536
558
  evolving_structure: Whether new dimensions may be added under a
537
559
  minor version update.
538
560
  """
@@ -572,6 +594,7 @@ class DataStructureDefinition(MaintainableArtefact, frozen=True, kw_only=True):
572
594
  components=self.components,
573
595
  version=self.version,
574
596
  artefacts=self.__extract_artefacts(),
597
+ name=self.name,
575
598
  )
576
599
 
577
600
  @property
pysdmx/model/map.py CHANGED
@@ -6,7 +6,7 @@ from typing import Any, Iterator, Literal, Optional, Sequence, Tuple, Union
6
6
 
7
7
  from msgspec import Struct
8
8
 
9
- from pysdmx.model.__base import MaintainableArtefact
9
+ from pysdmx.model.__base import Agency, MaintainableArtefact
10
10
  from pysdmx.util._date_pattern_map import convert_dpm
11
11
 
12
12
 
@@ -77,7 +77,7 @@ class DatePatternMap(_BaseMap, frozen=True, omit_defaults=True, tag=True):
77
77
  the target structure (e.g. `FREQ`). In this case, the input date
78
78
  can be converted to a different format, depending on the
79
79
  frequency of the converted data.
80
- resolvePeriod: The point in time to resolve to when mapping from low
80
+ resolve_period: The point in time to resolve to when mapping from low
81
81
  frequency to higher frequency periods.
82
82
  """
83
83
 
@@ -88,7 +88,7 @@ class DatePatternMap(_BaseMap, frozen=True, omit_defaults=True, tag=True):
88
88
  id: Optional[str] = None
89
89
  locale: str = "en"
90
90
  pattern_type: Literal["fixed", "variable"] = "fixed"
91
- resolvePeriod: Optional[
91
+ resolve_period: Optional[
92
92
  Literal["startOfPeriod", "endOfPeriod", "midPeriod"]
93
93
  ] = None
94
94
 
@@ -264,6 +264,14 @@ class MultiRepresentationMap(
264
264
  target: Sequence[str] = []
265
265
  maps: Sequence[MultiValueMap] = []
266
266
 
267
+ @property
268
+ def short_urn(self) -> str:
269
+ """Returns the short URN for the MultiRepresentationMap."""
270
+ agency = (
271
+ self.agency.id if isinstance(self.agency, Agency) else self.agency
272
+ )
273
+ return f"RepresentationMap={agency}:{self.id}({self.version})"
274
+
267
275
  def __iter__(
268
276
  self,
269
277
  ) -> Iterator[MultiValueMap]:
@@ -300,7 +308,7 @@ class MultiComponentMap(_BaseMap, frozen=True, omit_defaults=True, tag=True):
300
308
 
301
309
  source: Sequence[str]
302
310
  target: Sequence[str]
303
- values: MultiRepresentationMap
311
+ values: Union[MultiRepresentationMap, str]
304
312
 
305
313
 
306
314
  class RepresentationMap(MaintainableArtefact, frozen=True, omit_defaults=True):
@@ -478,9 +486,7 @@ class StructureMap(MaintainableArtefact, frozen=True, omit_defaults=True):
478
486
  """Return the number of mapping rules in the structure map."""
479
487
  return len(self.maps)
480
488
 
481
- def __getitem__(
482
- self, id_: str
483
- ) -> Optional[
489
+ def __getitem__(self, id_: str) -> Optional[
484
490
  Sequence[
485
491
  Union[
486
492
  ComponentMap,
@@ -492,12 +498,12 @@ class StructureMap(MaintainableArtefact, frozen=True, omit_defaults=True):
492
498
  ]
493
499
  ]:
494
500
  """Return the mapping rules for the supplied component."""
495
- out = []
496
- for m in self.maps:
497
- if (
498
- hasattr(m, "source") and (m.source == id_ or id_ in m.source)
499
- ) or (isinstance(m, FixedValueMap) and m.target == id_):
500
- out.append(m)
501
+ out = [
502
+ m
503
+ for m in self.maps
504
+ if (hasattr(m, "source") and (m.source == id_ or id_ in m.source))
505
+ or (isinstance(m, FixedValueMap) and m.target == id_)
506
+ ]
501
507
  if len(out) == 0:
502
508
  return None
503
509
  else:
pysdmx/model/message.py CHANGED
@@ -168,10 +168,7 @@ class StructureMessage(Struct, repr_omit_defaults=True, frozen=True):
168
168
  raise NotFound(
169
169
  f"No {type_.__name__} found in message.",
170
170
  )
171
- structures = []
172
- for element in self.structures:
173
- if isinstance(element, type_):
174
- structures.append(element)
171
+ structures = [e for e in self.structures if isinstance(e, type_)]
175
172
  return structures
176
173
 
177
174
  def __get_enumerations(
@@ -332,7 +329,7 @@ class MetadataMessage(Struct, frozen=True):
332
329
  if self.reports:
333
330
  return self.reports
334
331
  else:
335
- raise NotFound("No metadata reports werefound in the message.")
332
+ raise NotFound("No metadata reports were found in the message.")
336
333
 
337
334
 
338
335
  class Message(StructureMessage, frozen=True):
@@ -349,6 +346,7 @@ class Message(StructureMessage, frozen=True):
349
346
 
350
347
  data: Optional[Sequence[Dataset]] = None
351
348
  submission: Optional[Sequence[SubmissionResult]] = None
349
+ reports: Optional[Sequence[MetadataReport]] = None
352
350
 
353
351
  def __post_init__(self) -> None:
354
352
  """Checks if the content is valid."""
@@ -382,3 +380,10 @@ class Message(StructureMessage, frozen=True):
382
380
  f"No Dataset with Short URN {short_urn} found in data.",
383
381
  "Could not find the requested Dataset.",
384
382
  )
383
+
384
+ def get_reports(self) -> Sequence[MetadataReport]:
385
+ """Returns the metadata reports."""
386
+ if self.reports:
387
+ return self.reports
388
+ else:
389
+ raise NotFound("No metadata reports were found in the message.")
@@ -0,0 +1,99 @@
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
+ groups = structure.groups
57
+ group_codes = []
58
+ obs_codes = [dimension_code, structure.components.measures[0].id]
59
+
60
+ # Getting the series and obs codes
61
+ series_codes = [
62
+ d.id for d in structure.components.dimensions if d.id != dimension_code
63
+ ]
64
+
65
+ # Adding the attributes based on the attachment level
66
+ for att in structure.components.attributes:
67
+ matching_group = next(
68
+ (
69
+ group
70
+ for group in groups or []
71
+ if set(group.dimensions)
72
+ == set(att.attachment_level.split(",")) # type: ignore[union-attr]
73
+ ),
74
+ None,
75
+ )
76
+
77
+ if (
78
+ att.attachment_level != "D"
79
+ and att.id in data.columns
80
+ and groups is not None
81
+ and matching_group
82
+ ):
83
+ group_codes.append(
84
+ {
85
+ "group_id": matching_group.id,
86
+ "attribute": att.id,
87
+ "dimensions": matching_group.dimensions,
88
+ }
89
+ )
90
+ elif att.attachment_level == "O" and att.id in data.columns:
91
+ obs_codes.append(att.id)
92
+ elif (
93
+ att.attachment_level is not None
94
+ and att.attachment_level != "D"
95
+ and att.id in data.columns
96
+ ):
97
+ series_codes.append(att.id)
98
+
99
+ 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 != RULE_SCHEME:
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 != UDO_SCHEME:
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.3
1
+ Metadata-Version: 2.4
2
2
  Name: pysdmx
3
- Version: 1.5.2
3
+ Version: 1.7.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>
@@ -17,7 +18,7 @@ Provides-Extra: data
17
18
  Provides-Extra: dc
18
19
  Provides-Extra: vtl
19
20
  Provides-Extra: xml
20
- Requires-Dist: httpx (>=0)
21
+ Requires-Dist: httpx[http2] (>=0)
21
22
  Requires-Dist: lxml (>=5.2) ; extra == "all"
22
23
  Requires-Dist: lxml (>=5.2) ; extra == "xml"
23
24
  Requires-Dist: msgspec (>=0)
@@ -1,5 +1,5 @@
1
1
  pysdmx/__extras_check.py,sha256=I39OaM1lAPBnyzHVJ7kA_ZA_tMeDAQLr6ZKqEQ9MK1Q,1659
2
- pysdmx/__init__.py,sha256=lCxIWAalK5owRQR4jCgDW0NekksEmfHD_f-6xsEa4gM,67
2
+ pysdmx/__init__.py,sha256=wT-iFGPp5NSw97EUGKgaqjmRmRqdND7Pc58tuIjjcro,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=04PEKA7fW9hKBUr2QQSO6lzYSY9kjNu0ddL1P4CF-Jw,40811
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=NA4-Xlnj55xNLFlAC2qmaSRgKYbzFjQTKXA5G-SYlBo,17783
24
- pysdmx/api/qb/util.py,sha256=Meysdjad-ZyE2WZ1xwMGYrVQPapCKG5QdT4LkdF5CSw,3651
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=13TXdR7aqw1RxPnYuq6OG7Uz7a9eIzfDRi_wNMRaG54,2877
30
- pysdmx/io/csv/sdmx10/writer/__init__.py,sha256=c7WvEufF8UBu6Lf417a4ujY8cQ7QOiQ9_cu_MIej0Gg,1648
31
- pysdmx/io/csv/sdmx20/__init__.py,sha256=mNfMJKSpmMfk4CbbHhjnBOTQ2IZFY15cNUhHtJPcs90,231
32
- pysdmx/io/csv/sdmx20/reader/__init__.py,sha256=HSSUE3iL9g2Bzb_vKw97-Uw_3H3yUQxN8ssAyr1EJkI,4925
33
- pysdmx/io/csv/sdmx20/writer/__init__.py,sha256=xqNg2L2BdCkKVIkMrBpkbR6wq2gZ3r1K7oZRkZ1aBoU,2062
34
- pysdmx/io/format.py,sha256=BJghvHaXNvsfqJCWvB8jhjGMaLPv7zi7N12O0qRwChc,4749
35
- pysdmx/io/input_processor.py,sha256=KJPWOumYqjoewetbFQ4qzqDqOC6hpcksaThvLp_Y7Oc,6366
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=rj2GzDs3xVQRzikzWonPWJGEa4_mxUPgCqHQ50JI5xY,6917
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=kB3RJiSA75G4IJYObYR0hdiXYcRs-vNMKqUeA6F4SSo,7529
39
- pysdmx/io/json/fusion/messages/concept.py,sha256=aOfJxQSC3b1cgDdxZNFUcab3mpPEvtnXIbNjbIwPIog,2750
44
+ pysdmx/io/json/fusion/messages/code.py,sha256=YayxSKiHa124WTr_lK8HTfXHomh_e0oDZvuydd29XKg,8300
45
+ pysdmx/io/json/fusion/messages/concept.py,sha256=m4lTyncSIriFXWWupE-zLxUVPx3Xrg56qahzKr4HEag,2824
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=oxocZAdl_uMroO6Msu6k7lEz_tGLvj3oKeDhH_IMb7E,2833
43
- pysdmx/io/json/fusion/messages/dsd.py,sha256=ccNKx3RlWNkIDMpDJ036mxzkNy8-ZFSOBGfZyjEOths,7755
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=47uiSD5GSrd6TCnDFeg10SztP3vNuzKbYSvvKNK4wB0,2371
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,39 +62,44 @@ 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=m8ltYpMfAzNllM2sd9K4BskS1_nF-gByXmjAizRwlBM,2478
60
- pysdmx/io/json/sdmxjson2/messages/category.py,sha256=cqBjFm6o7XrhWWAjdR2lTbfOCJJWa6DlfAKjnQUq7uk,4737
61
- pysdmx/io/json/sdmxjson2/messages/code.py,sha256=yo1-bx2brHfhPjymsj71SHz_PyOWJODBNa7oiMIAcDc,9381
62
- pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=fvwnfaBh10AtvCXkQuHbeYu5C7Fvn7wsg2zdBOV1kWc,3086
63
- pysdmx/io/json/sdmxjson2/messages/constraint.py,sha256=XJsf7O8LBROOy8uyHzdBXyUUpOCUn46IrzuhETSF4_g,1636
64
- pysdmx/io/json/sdmxjson2/messages/core.py,sha256=lMrlWg1Qbrj5ZG3duewr94YFmyiEu0jgnUHFL0f41T0,6381
65
- pysdmx/io/json/sdmxjson2/messages/dataflow.py,sha256=EylbN2s7fz-rH5F0D5wtomJYX3DhNnWd0lbIMBXizjw,4506
66
- pysdmx/io/json/sdmxjson2/messages/dsd.py,sha256=8rEqsZ_oHcAhtbWsGgKc_VUqUYgWmWC0Aj5-X7bZ2y8,11518
67
- pysdmx/io/json/sdmxjson2/messages/map.py,sha256=VBsCO9QE_vItWZSPqySUU0W1r7qcc-2LNDZxqusFqcc,9891
68
- pysdmx/io/json/sdmxjson2/messages/pa.py,sha256=vmL47EVrdbw3YhyH3ZJB6_EEaLAwULQv5Bfd4qVrzx0,1665
69
- pysdmx/io/json/sdmxjson2/messages/provider.py,sha256=d2_UbNlgLLWqR9JCIBFwI7qswMaFuWKoSPc2bsnL23c,3165
70
- pysdmx/io/json/sdmxjson2/messages/report.py,sha256=E4Xo3CcUPf_ihF5bTSczBXhupYLjtOdMH6XQh5eunhA,3508
71
- pysdmx/io/json/sdmxjson2/messages/schema.py,sha256=hGEqEnNJ2LKnDTanVSPoF82ZsFvMWqZmYdzYEA--FaA,2634
72
- pysdmx/io/json/sdmxjson2/messages/structure.py,sha256=WpQttjSdGK1AuWfR69gpe4E7HP9zkG6TWOvFhIpbis4,5446
73
- pysdmx/io/json/sdmxjson2/messages/vtl.py,sha256=UrcNP5p_R2R_bFrY-vbOKCGYXkD5N4yBAwZlCWetDMQ,14700
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=t2MMvx2nQzlu4l8MMAPDEq15w5UIjHGgaJI2HoFPdus,17908
68
+ pysdmx/io/json/sdmxjson2/messages/concept.py,sha256=x7BoG6AaziZGNjxeypwy_lsFTmdHs-0MPUpqPsTBQIA,5496
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=saAQ71aRKqze2XeOSV5xcSEB056h8OTKbvm_qwRSfuk,9695
77
- pysdmx/io/serde.py,sha256=l8z9qulrUkRNZq63YOUqTTs7zpl1hdYZe3UAZW1aEpM,1062
78
- pysdmx/io/writer.py,sha256=I7n0yW4c2Hu7eUSWbyHcmWd2VtPkiTUlVE4zTNmdxIg,4759
87
+ pysdmx/io/reader.py,sha256=RJJ55TMYUX5B06ELwKPtfKR3rJIkfyg_q8UskfnM76Y,10470
88
+ pysdmx/io/serde.py,sha256=I6Cpq0gLacko7x-GrT_YQP0UZhC3xrnjVbKCrY9xIYk,1421
89
+ pysdmx/io/writer.py,sha256=EiKGKujhfzr-Max3_nUNMvZOm8QPWmkXeZi50QLjT6A,5847
79
90
  pysdmx/io/xml/__allowed_lxml_errors.py,sha256=PdIK2i6JwwGRh1Ogc5JA0hRySO7QXJKN-DI8EYtdjA0,225
80
91
  pysdmx/io/xml/__data_aux.py,sha256=ztivjZANN1PJ63IvoMfx-5TA2AiPQTVPC_0YYHOT9Ns,4069
81
92
  pysdmx/io/xml/__init__.py,sha256=tcUsSEiM3nBA7lDbZPwGZ7Vu_K9gQd8oliASUMTGjFE,105
82
93
  pysdmx/io/xml/__parse_xml.py,sha256=SITC7Yptq_qY_exetRez90lJCukH1WsKDMqlk7Q1RaY,2899
83
- pysdmx/io/xml/__ss_aux_reader.py,sha256=Tfp7oSb_0-AVEVdu7YFtj-SlBuEKp7fpg3-SxCmOHW0,2868
84
- pysdmx/io/xml/__structure_aux_reader.py,sha256=dGPmAiW4j38fbsAJ8xCDwXgUcwpOCwgO5jQpvgoKD4Q,40258
85
- pysdmx/io/xml/__structure_aux_writer.py,sha256=9x2wGYRP9vPGLlHA-3P5Xr3gY5g3gW5fmz0tDQJyH4U,43543
94
+ pysdmx/io/xml/__ss_aux_reader.py,sha256=6mumQYcDdF_vrX65vSodE4I1b7upKbP6yNNSM2N6pUs,2853
95
+ pysdmx/io/xml/__structure_aux_reader.py,sha256=xqwZZ2qWi8IUW2KMVhuABp1TSx6dSRH4BmvKh5kXxyk,40348
96
+ pysdmx/io/xml/__structure_aux_writer.py,sha256=jOcp7Ywx7mEUrrhgKj6Kz5-6KctQoD7TbOSOoPxj_ZE,43583
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=DlFwR1KmVMJmwID_G7Tl9zasah9iiQKHuuHKJpd0huk,5052
89
- pysdmx/io/xml/__write_structure_specific_aux.py,sha256=Z5CIiy30TxK8igzcnwcruhGdohFxJaFyYyCojMU8nnY,8825
99
+ pysdmx/io/xml/__write_data_aux.py,sha256=x-RNwVfUgEkBoGG_Sen-rPg7MnqE5_0SV-6PmjDdAxY,3373
100
+ pysdmx/io/xml/__write_structure_specific_aux.py,sha256=reRDVw4Xwag0ODyMzm9uOk9WJ_e1ELxAPYHSMUUDJBQ,8919
90
101
  pysdmx/io/xml/config.py,sha256=R24cczVkzkhjVLXpv-qfEm88W3_QTqVt2Qofi8IvJ5Y,93
91
- pysdmx/io/xml/doc_validation.py,sha256=qS-riLo3fMNLBrsQWzizeVNePuYT9W8wp9q-xE3QXto,1842
102
+ pysdmx/io/xml/doc_validation.py,sha256=WXDhte96VEAeZMMHJ0Y68WW8HEoOhEiOYEnbGP5Zwjw,1795
92
103
  pysdmx/io/xml/header.py,sha256=_XiruPAfMtr4wudCpiuhFXDvRgWITGQ9GZVG3lMvWcc,5535
93
104
  pysdmx/io/xml/sdmx21/__init__.py,sha256=_rh_dz1d-LmUw4iVbsZQkTXANTJeR8ov8z_4jNRGhtg,38
94
105
  pysdmx/io/xml/sdmx21/reader/__init__.py,sha256=2jMsySFbbq-So3ymqzKVi5gOPRwO0qasBBwntD03rTw,34
@@ -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=I5PQCJvoRMHtbr7i2h27NinW4-to6x6jB0ZNIAh9r9g,15722
113
+ pysdmx/io/xml/sdmx21/writer/generic.py,sha256=8_kUMMUiIFVdKMyhpR2LKDyfiinBohO_aL_6GZpOInY,15786
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
@@ -118,15 +129,15 @@ pysdmx/io/xml/sdmx31/writer/structure.py,sha256=hK-BYOsyyuqLTqxe6qC3PxeDJDp3_qyB
118
129
  pysdmx/io/xml/sdmx31/writer/structure_specific.py,sha256=OtP_uxn-y9tVB9eNRP6ov3zBL1wtr4SRef9llB4A3yk,3236
119
130
  pysdmx/io/xml/utils.py,sha256=ljrocQwPTYycg3I68sqYI5pF8qukNccSCMM9Xf_Tag0,583
120
131
  pysdmx/model/__base.py,sha256=H5OpCpi6fGxB30vFn-lCstTczSdOB4YJiBynThovQs4,13810
121
- pysdmx/model/__init__.py,sha256=gmY8uGK0_SK9Ca5TqtYJqPSXvO9godlDKu2rhYouPSU,4984
132
+ pysdmx/model/__init__.py,sha256=PHfVmxbfBzRNoCJ2kqRl-aSvGN4fLz2E8DYAoDxBTRA,4948
122
133
  pysdmx/model/category.py,sha256=WWWysaTdlcU8KZpQyZgbZkrOelNVCGOfVUk_APJxm-w,6031
123
- pysdmx/model/code.py,sha256=KEG2D74UHbZuOplSrztLWCNTzFTOg22imRe_eQvqAM8,12600
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=gcpPJnyl0FI4mtk52VvPsPU4msFw67AiM0MaV1nsyiE,22972
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=IYoxKYpt0-9kYAgU24wryrSchR-lrc3NMacI5Vt5las,17213
129
- pysdmx/model/message.py,sha256=hO-kxYTxt19lhx4xIIQE8RiLjz6peZK6CabFzlo5DRs,14469
139
+ pysdmx/model/map.py,sha256=BR23koomqDGDYvHLTg2axVwlTkst7aJ0X65-0tw11j4,17492
140
+ pysdmx/model/message.py,sha256=tuUr0sQf6P3QflhNAbmYjQaz4_3ly06psk19c8zlJ2s,14697
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=fzXl_a1M8NI7HHI23tRmLlS4PBZ9N4Tgtqh-zxg19qk,3265
137
149
  pysdmx/toolkit/vtl/__init__.py,sha256=nVwtISeFiT4tr2gNjb2A-P_IRAdqv6Mn7EOgFkaRleg,216
138
- pysdmx/toolkit/vtl/_validations.py,sha256=seDf83sodg9Jn7Y-L4vo2Zmfqyh_ivBLdH7tz1DjyO4,5677
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.5.2.dist-info/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
146
- pysdmx-1.5.2.dist-info/METADATA,sha256=hHjNyQNC0uUh9cF40kLB4LBRnPRXJ3vqU3iu-BVRbvs,4690
147
- pysdmx-1.5.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
148
- pysdmx-1.5.2.dist-info/RECORD,,
157
+ pysdmx-1.7.0.dist-info/METADATA,sha256=3zJX2O0JkzICIK-VuqsZ84oRhJCn5D_B70P2LTx3QxM,4719
158
+ pysdmx-1.7.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
159
+ pysdmx-1.7.0.dist-info/licenses/LICENSE,sha256=3XTNDPtv2RxDUNkQzn9MIWit2u7_Ob5daMLEq-4pBJs,649
160
+ pysdmx-1.7.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any