Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reorganize the FMR module #52

Merged
merged 10 commits into from
Jun 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/api/fmr.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Examples:
``EDUCAT_CLASS_A`` dataflow maintained by the UNESCO Institute for
Statistics (``UIS``). The following code demonstrates this:

>>> from pysdmx.fmr import RegistryClient
>>> from pysdmx.api.fmr import RegistryClient
>>> gr = RegistryClient("https://registry.sdmx.org/sdmx/v2/")
>>> schema = gr.get_schema("dataflow", "UIS", "EDUCAT_CLASS_A", "1.0")

Expand Down
2 changes: 1 addition & 1 deletion docs/api/fmr/async.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ This is the client to be used for retrieving metadata from an SDMX Registry or
SDMX service in an asynchronous (i.e. non-blocking fashion).

>>> import asyncio
>>> from pysdmx.fmr import AsyncRegistryClient
>>> from pysdmx.api.fmr import AsyncRegistryClient
>>> async def main():
>>> gr = AsyncRegistryClient("https://registry.sdmx.org/sdmx/v2/")
>>> mapping = await gr.get_schema("dataflow", "UIS", "EDUCAT_CLASS_A", "1.0")
Expand Down
2 changes: 1 addition & 1 deletion docs/api/fmr/sync.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Synchronous client
This is the client to be used for retrieving metadata from an SDMX Registry or
SDMX service in a synchronous (i.e. blocking fashion).

>>> from pysdmx.fmr import RegistryClient
>>> from pysdmx.api.fmr import RegistryClient
>>> gr = RegistryClient("https://registry.sdmx.org/sdmx/v2/")
>>> schema = gr.get_schema("dataflow", "UIS", "EDUCAT_CLASS_A", "1.0")

Expand Down
2 changes: 1 addition & 1 deletion docs/howto/config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ the endpoint is the URL at which the FMR is available, followed by

.. code-block:: python

from pysdmx.fmr import AsyncRegistryClient
from pysdmx.api.fmr import AsyncRegistryClient

client = AsyncRegistryClient("[endpoint_comes_here]")

Expand Down
2 changes: 1 addition & 1 deletion docs/howto/map.rst
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ endpoint will be the URL at which the FMR is available, followed by

.. code-block:: python

from pysdmx.fmr import AsyncRegistryClient
from pysdmx.api.fmr import AsyncRegistryClient
client = AsyncRegistryClient("[Your_endpoint_comes_here]")

Retrieving Simple Code Mappings
Expand Down
2 changes: 1 addition & 1 deletion docs/howto/structure_db.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ data structure maintained by Eurostats (``ESTAT``), as published on the

.. code-block:: python

from pysdmx.fmr import AsyncRegistryClient
from pysdmx.api.fmr import AsyncRegistryClient
client = AsyncRegistryClient("https://registry.sdmx.org/sdmx/v2/")

Retrieving the Schema Information
Expand Down
2 changes: 1 addition & 1 deletion docs/howto/structure_fs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ the endpoint is the URL at which the FMR is available, followed by ``/sdmx/v2/``

.. code-block:: python

from pysdmx.fmr import AsyncRegistryClient
from pysdmx.api.fmr import AsyncRegistryClient
client = AsyncRegistryClient("[endpoint_comes_here]")

Creating the Dataflow Folders
Expand Down
2 changes: 1 addition & 1 deletion docs/howto/validate.rst
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ will be the URL at which the FMR is available, followed by ``/sdmx/v2/``.

.. code-block:: python

from pysdmx.fmr import AsyncRegistryClient
from pysdmx.api.fmr import AsyncRegistryClient
gr = AsyncRegistryClient("https://registry.sdmx.org/sdmx/v2/")

Retrieving the schema information
Expand Down
1 change: 1 addition & 0 deletions src/pysdmx/api/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""pysdmx api package."""
10 changes: 5 additions & 5 deletions src/pysdmx/fmr/__init__.py → src/pysdmx/api/fmr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
import httpx
from msgspec.json import decode

from pysdmx.api.fmr.reader import Deserializer
from pysdmx.errors import ClientError, NotFound, ServiceError, Unavailable
from pysdmx.fmr.fusion import deserializers as fusion_deserializers
from pysdmx.fmr.reader import Deserializer
from pysdmx.fmr.sdmx import deserializers as sdmx_deserializers
from pysdmx.io.json.fusion.reader import deserializers as fusion_readers
from pysdmx.io.json.sdmxjson2.reader import deserializers as sdmx_readers
from pysdmx.model import (
Agency,
CategoryScheme,
Expand Down Expand Up @@ -121,9 +121,9 @@ def __init__(
self.api_endpoint = api_endpoint
self.format = fmt
if fmt == Format.FUSION_JSON:
self.deser = fusion_deserializers
self.deser = fusion_readers
else:
self.deser = sdmx_deserializers
self.deser = sdmx_readers
self.ssl_context = (
httpx.create_ssl_context(
verify=pem,
Expand Down
File renamed without changes.
33 changes: 0 additions & 33 deletions src/pysdmx/fmr/fusion/__init__.py

This file was deleted.

33 changes: 0 additions & 33 deletions src/pysdmx/fmr/sdmx/__init__.py

This file was deleted.

35 changes: 35 additions & 0 deletions src/pysdmx/io/json/fusion/messages/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""Schemas for Fusion-JSON messages."""

from pysdmx.io.json.fusion.messages.category import FusionCategorySchemeMessage
from pysdmx.io.json.fusion.messages.code import (
FusionCodelistMessage,
FusionHierarchyAssociationMessage,
FusionHierarchyMessage,
)
from pysdmx.io.json.fusion.messages.concept import FusionConcepSchemeMessage
from pysdmx.io.json.fusion.messages.dataflow import FusionDataflowMessage
from pysdmx.io.json.fusion.messages.map import (
FusionMappingMessage,
FusionRepresentationMapMessage,
)
from pysdmx.io.json.fusion.messages.org import (
FusionAgencyMessage,
FusionProviderMessage,
)
from pysdmx.io.json.fusion.messages.report import FusionMetadataMessage
from pysdmx.io.json.fusion.messages.schema import FusionSchemaMessage

__all__ = [
"FusionCategorySchemeMessage",
"FusionCodelistMessage",
"FusionHierarchyAssociationMessage",
"FusionHierarchyMessage",
"FusionConcepSchemeMessage",
"FusionDataflowMessage",
"FusionMappingMessage",
"FusionRepresentationMapMessage",
"FusionAgencyMessage",
"FusionProviderMessage",
"FusionMetadataMessage",
"FusionSchemaMessage",
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@

from msgspec import Struct

from pysdmx.fmr.fusion.core import FusionString
from pysdmx.fmr.fusion.dataflow import FusionDataflowRef
from pysdmx.io.json.fusion.messages.core import FusionString
from pysdmx.io.json.fusion.messages.dataflow import FusionDataflowRef
from pysdmx.model import Category, CategoryScheme as CS, DataflowRef
from pysdmx.util import find_by_urn

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@

from msgspec import Struct

from pysdmx.fmr.fusion.core import FusionAnnotation, FusionLink, FusionString
from pysdmx.io.json.fusion.messages.core import (
FusionAnnotation,
FusionLink,
FusionString,
)
from pysdmx.model import (
Code,
Codelist as CL,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@

from msgspec import Struct

from pysdmx.fmr.fusion.code import FusionCodelist
from pysdmx.fmr.fusion.core import FusionRepresentation, FusionString
from pysdmx.io.json.fusion.messages.code import FusionCodelist
from pysdmx.io.json.fusion.messages.core import (
FusionRepresentation,
FusionString,
)
from pysdmx.model.concept import Concept, ConceptScheme as CS, DataType


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

from msgspec import Struct

from pysdmx.fmr.fusion.core import FusionString
from pysdmx.fmr.fusion.org import FusionProviderScheme
from pysdmx.io.json.fusion.messages.core import FusionString
from pysdmx.io.json.fusion.messages.org import FusionProviderScheme
from pysdmx.model import (
Agency,
Components,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,16 @@
from msgspec import Struct

from pysdmx.errors import ServiceError
from pysdmx.fmr.fusion.code import FusionCodelist
from pysdmx.fmr.fusion.concept import FusionConcept, FusionConceptScheme
from pysdmx.fmr.fusion.constraint import FusionContentConstraint
from pysdmx.fmr.fusion.core import FusionRepresentation, FusionString
from pysdmx.io.json.fusion.messages.code import FusionCodelist
from pysdmx.io.json.fusion.messages.concept import (
FusionConcept,
FusionConceptScheme,
)
from pysdmx.io.json.fusion.messages.constraint import FusionContentConstraint
from pysdmx.io.json.fusion.messages.core import (
FusionRepresentation,
FusionString,
)
from pysdmx.model import (
ArrayBoundaries,
Codelist,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

from msgspec import Struct

from pysdmx.fmr.fusion.core import FusionString
from pysdmx.io.json.fusion.messages.core import FusionString
from pysdmx.model import (
ComponentMap,
DataType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from msgspec import Struct

from pysdmx.fmr.fusion.core import FusionString
from pysdmx.io.json.fusion.messages.core import FusionString
from pysdmx.model import Agency, Contact, DataflowRef, DataProvider
from pysdmx.util import parse_urn

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

from msgspec import Struct

from pysdmx.fmr.fusion.core import FusionString
from pysdmx.fmr.reader import _merge_attributes
from pysdmx.api.fmr.reader import _merge_attributes
from pysdmx.io.json.fusion.messages.core import FusionString
from pysdmx.model import MetadataAttribute, MetadataReport


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

import msgspec

from pysdmx.fmr.fusion.code import FusionCodelist
from pysdmx.fmr.fusion.concept import FusionConceptScheme
from pysdmx.fmr.fusion.constraint import FusionContentConstraint
from pysdmx.fmr.fusion.core import FusionLink
from pysdmx.fmr.fusion.dsd import FusionDataStructure
from pysdmx.io.json.fusion.messages.code import FusionCodelist
from pysdmx.io.json.fusion.messages.concept import FusionConceptScheme
from pysdmx.io.json.fusion.messages.constraint import FusionContentConstraint
from pysdmx.io.json.fusion.messages.core import FusionLink
from pysdmx.io.json.fusion.messages.dsd import FusionDataStructure
from pysdmx.model import Components, HierarchyAssociation, Schema
from pysdmx.util import parse_item_urn

Expand Down
19 changes: 19 additions & 0 deletions src/pysdmx/io/json/fusion/reader/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
"""Collection of readers for Fusion-JSON messages."""

from pysdmx.api.fmr.reader import Deserializers
from pysdmx.io.json.fusion import messages as msg

deserializers = Deserializers(
agencies=msg.FusionAgencyMessage, # type: ignore[arg-type]
categories=msg.FusionCategorySchemeMessage, # type: ignore[arg-type]
codes=msg.FusionCodelistMessage, # type: ignore[arg-type]
concepts=msg.FusionConcepSchemeMessage, # type: ignore[arg-type]
dataflow=msg.FusionDataflowMessage, # type: ignore[arg-type]
providers=msg.FusionProviderMessage, # type: ignore[arg-type]
schema=msg.FusionSchemaMessage, # type: ignore[arg-type]
hier_assoc=msg.FusionHierarchyAssociationMessage, # type: ignore[arg-type]
hierarchy=msg.FusionHierarchyMessage, # type: ignore[arg-type]
report=msg.FusionMetadataMessage, # type: ignore[arg-type]
mapping=msg.FusionMappingMessage, # type: ignore[arg-type]
code_map=msg.FusionRepresentationMapMessage, # type: ignore[arg-type]
)
37 changes: 37 additions & 0 deletions src/pysdmx/io/json/sdmxjson2/messages/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""Schemas for SDMX-JSON messages."""

from pysdmx.io.json.sdmxjson2.messages.category import (
JsonCategorySchemeMessage,
)
from pysdmx.io.json.sdmxjson2.messages.code import (
JsonCodelistMessage,
JsonHierarchyAssociationMessage,
JsonHierarchyMessage,
)
from pysdmx.io.json.sdmxjson2.messages.concept import JsonConcepSchemeMessage
from pysdmx.io.json.sdmxjson2.messages.dataflow import JsonDataflowMessage
from pysdmx.io.json.sdmxjson2.messages.map import (
JsonMappingMessage,
JsonRepresentationMapMessage,
)
from pysdmx.io.json.sdmxjson2.messages.org import (
JsonAgencyMessage,
JsonProviderMessage,
)
from pysdmx.io.json.sdmxjson2.messages.report import JsonMetadataMessage
from pysdmx.io.json.sdmxjson2.messages.schema import JsonSchemaMessage

__all__ = [
"JsonAgencyMessage",
"JsonCategorySchemeMessage",
"JsonCodelistMessage",
"JsonConcepSchemeMessage",
"JsonDataflowMessage",
"JsonProviderMessage",
"JsonSchemaMessage",
"JsonHierarchyAssociationMessage",
"JsonHierarchyMessage",
"JsonMetadataMessage",
"JsonMappingMessage",
"JsonRepresentationMapMessage",
]
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from msgspec import Struct

from pysdmx.fmr.sdmx.dataflow import JsonDataflowRef
from pysdmx.io.json.sdmxjson2.messages.dataflow import JsonDataflowRef
from pysdmx.model import Category, CategoryScheme, DataflowRef
from pysdmx.util import find_by_urn

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

from msgspec import Struct

from pysdmx.fmr.sdmx.core import JsonAnnotation, JsonLink
from pysdmx.io.json.sdmxjson2.messages.core import JsonAnnotation, JsonLink
from pysdmx.model import (
Code,
Codelist,
Expand Down
Loading