Skip to content

Support private/enterprise SDMX endpoints with full feature flags #39

@aborruso

Description

@aborruso

Problem

set_provider() currently accepts a custom base URL for non-preset providers, but only allows four fields: base_url, agency_id, rate_limit, language.

All the richer feature flags defined in portals.jsonconstraints_supported, data_format_param, user_agent, data_key_format, unsupported_params, etc. — are silently ignored for custom URLs. This makes it impossible to configure a private or enterprise SDMX endpoint correctly without modifying the package source.

Use cases

  • Internal statistical offices running a private SDMX server (e.g. .Stat Suite, SDMX-RI)
  • Enterprise data platforms with SDMX APIs that have non-standard behaviour (no constraints, custom auth headers, specific data format)
  • Organizations that want to point opensdmx at a staging or test endpoint without forking the package

Proposed solution

Two complementary changes:

1. Extend set_provider() to accept arbitrary keyword arguments

Allow passing any flag supported by portals.json:

opensdmx.set_provider(
    "https://my-internal-sdmx.example.com/rest",
    agency_id="MYORG",
    constraints_supported=False,
    data_format_param="SDMX-CSV",
    user_agent="MyApp/1.0",
)

2. Support a user-level portals.json override file

Load additional (or overriding) provider definitions from a user config file, e.g.:

  • ~/.config/opensdmx/portals.json
  • Path set via OPENSDMX_PORTALS environment variable

Entries in the user file would be merged with the bundled ones, allowing both adding new providers and overriding defaults of existing ones — without touching the package source.

Notes

  • sdmx1 (khaeru/sdmx) has a similar mechanism via add_source() and a source registry pattern.
  • The bundled portals.json already defines the full schema — the gap is only in the runtime API and the user-level loading path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions