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 |
AvailabilityValues |
precomputed availability values, for unfiltered requests | always scans |
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.5.1
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.5.1.tar.gz | 88.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sdmxlib_rest-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 198.5 kB
Release files / sdmxlib_rest-0.5.1.tar.gz
| Download URL | sdmxlib_rest-0.5.1.tar.gz |
|---|---|
| Size | 88.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
887cd4de8135caf7471f0c2b0d5cfc96555287bef31d4af3364f6c473c3c9e8f
|
|
BLAKE2b-256 checksum How to use checksums |
4ae9fd4bd4ffb42dd8781d644ac3f1249c14dd268c4a6ad2744f88aa13f428e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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.5.1-py3-none-any.whl
| Download URL | sdmxlib_rest-0.5.1-py3-none-any.whl |
|---|---|
| Size | 110.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f0fd96047adb7c268645e837d06cba9a4c994689887b4036e2d4869c2c47279a
|
|
BLAKE2b-256 checksum How to use checksums |
2c46119dd5555944114d5836459da0af3c61fc88e81e06ef9b5e4c05fca34250
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","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}
|