sdmxlib-rest
A generic SDMX-REST HTTP surface over a
sdmxlib LocalRegistry.
It owns the parts of an SDMX-REST service that are the same everywhere — URL grammar, content negotiation, localisation, streaming, response assembly — and leaves everything catalog-specific to the consumer, behind explicit seams.
from sdmxlib_rest.app import RestSettings, create_app, library_routers
from sdmxlib_rest.runtime import CatalogRuntime
runtime = CatalogRuntime(MyCatalogProvider())
app = create_app(
runtime,
RestSettings(title="my-sdmx-api", version="1.0.0"),
routers=list(library_routers()),
)
That serves the structure, metadata and availability planes. Serving data is the consumer's job — see Why there is no data route below.
What you supply
Everything catalog-shaped is a Protocol on CatalogRuntime, each with a no-op
default. A bare consumer implements only the first one.
| Seam | Purpose | Default |
|---|---|---|
CatalogProvider |
how the registry is opened | required |
SpliceRegistry |
post-serialise JSON transforms | empty |
StructureCache |
cache rendered structure responses | never caches |
AvailabilityCache |
cache rendered availability responses | never caches |
MetadataStore |
reference-metadata lookups | returns nothing |
ComponentFilterShaper |
rewrite a parsed filter before SQL | identity |
MessageAnnotator |
pre-serialise message annotation | no-op |
The defaults are all inert, not broken: a consumer that installs none of them gets a correct service, just one that recomputes more than it needs to.
What create_app gives you
Routes are the easy part. The assembly is what's worth not rewriting:
- The middleware stack, in the one order that works. The chain has real
adjacency constraints — the ETag has to hash uncompressed bytes, so it runs
inside compression;
?lang=has to rewrite the header before the ETag layer reads it; CORS has to be outermost or preflights fall through to a 404 that browsers report as a CORS failure. Each constraint is documented at_install_middleware. - Runtime sharing across mounts, so a service exposing several surfaces (a canonical one plus compatibility variants) opens the registry once.
- A multi-spec docs page, which has to be hand-rolled because FastAPI's
helper emits a single-spec page and Swagger UI renders nothing when given
both
urlandurls.
Why there is no data route
The library owns data-plane helpers — key and query-parameter parsing,
projection, paging headers, binding-driven SQL fragments, and the
arrow→CSV/parquet encoders, all under sdmxlib_rest.data. It does not own the
/data route itself.
That is deliberate. Orchestration is where response caching, partition pushdown and vendor extensions live, and every catalog shapes those differently — one catalog's hierarchy descent and partition-pruning tricks are noise to the next. A second consumer gets the hard, fiddly parts and writes its own handler around them.
Status
Extracted from a production SDMX-REST service and versioned independently from
0.1.0. The seam set is settled; the create_app signature may still move
before 1.0.
Licence
Apache-2.0.
Metadata
Release files for sdmxlib-rest 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sdmxlib_rest-0.4.0.tar.gz | 85.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sdmxlib_rest-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 190.3 kB
Release files / sdmxlib_rest-0.4.0.tar.gz
| Download URL | sdmxlib_rest-0.4.0.tar.gz |
|---|---|
| Size | 85.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ecb3676b6191e710578add36c2ffc827df2ee16e45fafcabe835bc33de525223
|
|
BLAKE2b-256 checksum How to use checksums |
248e22b0ef72862a7b90cdce93b54e35eba5c5e5b6ef36d8b99f33e57ce00dd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / sdmxlib_rest-0.4.0-py3-none-any.whl
| Download URL | sdmxlib_rest-0.4.0-py3-none-any.whl |
|---|---|
| Size | 105.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
07eda306c5232cc5622333ba4e6fe89f0ae4737079dcb246b68d0d0ccb7cde45
|
|
BLAKE2b-256 checksum How to use checksums |
1e30f2b3fe255212d37d863b169411accb0bbeac38f1ad5ed9778e97ad6ce107
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.22 {"installer":{"name":"uv","version":"0.12.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|