Skip to main content

PyO3 bindings for commonmeta-rs's list/batch functions (VRAIX dump fetch+cache, Parquet I/O, batched archives)

Project description

commonmeta-rs (Python bindings)

PyO3 bindings exposing commonmeta-rs's list-command batch functions to Python: VRAIX daily-dump fetch with local caching, lossless Parquet read/write, and batched archive rendering. Records cross the FFI boundary as plain JSON-shaped dicts — the same shape commonmeta-py's own readers and writers already produce and consume.

Install

uv pip install commonmeta-rs

Requires CPython 3.14 or newer. The wheels are built against the stable ABI (abi3-py314), so one wheel per platform also covers later 3.x releases. commonmeta-py itself keeps a 3.9 floor; only this backend needs 3.14.

Development

The interpreter must be 3.14+, matching requires-python; an older venv fails to build rather than falling back.

uv venv --python 3.14 .venv
uv pip install --python .venv/bin/python maturin pytest
source .venv/bin/activate
maturin develop
pytest tests/

Release

Releases are published by hand. PyPI trusted publishing only issues OIDC identities to GitHub, GitLab, Google Cloud and ActiveState, and this repo lives on Codeberg, so CI cannot authenticate to PyPI — the workflow builds and tests wheels only.

The version comes from [workspace.package] in the root Cargo.toml and is shared with the commonmeta crate, so a wheel names the release it wraps. Bump it there, not here.

Build one wheel per platform plus the sdist, then publish. The macOS wheel builds natively; the Linux manylinux wheel builds in the official maturin container (which bundles the manylinux toolchain), so it needs no cross linker on the host — just a running Docker. All commands are run from python/.

rm -rf dist

# macOS (native — arm64 on Apple silicon)
maturin build --release --out dist

# Linux (manylinux2014 x86_64) via Docker. Mount the repo ROOT, not python/:
# the binding depends on the parent crate through `commonmeta = { path = ".." }`.
# --platform linux/amd64 runs the x86_64 image under emulation on Apple silicon
# (slow but reliable). Pinning --target keeps the Linux artifacts out of the
# host's target/release, so they don't collide with the native build.
docker run --rm --platform linux/amd64 \
  -v "$(git rev-parse --show-toplevel)":/io -w /io/python \
  ghcr.io/pyo3/maturin:latest \
  build --release --out dist --target x86_64-unknown-linux-gnu

# Source distribution (lets other platforms build from source as a fallback)
maturin sdist --out dist

uv publish --token "$PYPI_TOKEN" dist/*

Publishing from one machine uploads only the wheels present in dist/; any platform without a wheel falls back to building from the sdist. To ship binaries for more platforms (Windows, Intel macOS, Linux aarch64), add the matching maturin build --target … invocations or collect the wheels-* artifacts from the CI workflow into dist/ first.

API

  • fetch_vraix(source, date, input_path=None, limit=None, offset=0, cache_ttl_days=30) -> list[dict] Fetch records from a VRAIX daily dump (source is "crossref" or "datacite"). With input_path, reads a local SQLite file directly (no network); otherwise downloads {source}-{date}.sqlite3.zst from metadata.vraix.org, caching it locally for cache_ttl_days.
  • write_parquet(records: list[dict]) -> bytes Write records as a single lossless Parquet file.
  • read_parquet(data: bytes) -> list[dict] Read records back from Parquet bytes written by write_parquet.
  • write_archive(records: list[dict], to: str, base_name: str, batch_size=100_000) -> list[tuple[str, bytes]] Render records to to format, split into batches of at most batch_size records, returned as (entry_name, bytes) pairs ready to pack into a zip/tar archive.
  • convert(from_: str, to: str, input: str) -> bytes Convert a single record between formats.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

commonmeta_rs-0.9.45.tar.gz (770.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

commonmeta_rs-0.9.45-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.3 MB view details)

Uploaded CPython 3.14+manylinux: glibc 2.17+ x86-64

commonmeta_rs-0.9.45-cp314-abi3-macosx_11_0_arm64.whl (13.7 MB view details)

Uploaded CPython 3.14+macOS 11.0+ ARM64

File details

Details for the file commonmeta_rs-0.9.45.tar.gz.

File metadata

  • Download URL: commonmeta_rs-0.9.45.tar.gz
  • Upload date:
  • Size: 770.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for commonmeta_rs-0.9.45.tar.gz
Algorithm Hash digest
SHA256 5920411006ee95f342211efa66ceb3f1d11a081b7b0a4bb3775a08f81fbbd2d8
MD5 9e2658a9c8e6f54390f463c98e6d21cb
BLAKE2b-256 567f2d84f5e14a8285e81e3fec1bed1dc674a0c97ccf491941828cb58064b036

See more details on using hashes here.

File details

Details for the file commonmeta_rs-0.9.45-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: commonmeta_rs-0.9.45-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 15.3 MB
  • Tags: CPython 3.14+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for commonmeta_rs-0.9.45-cp314-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 660add21e24e75ddc4f66ca565457f727c59ad5d12d7a5b2c97955b74e522682
MD5 1de5a37fd73f0dc8643fb31576f8bbe8
BLAKE2b-256 7097f33ed855e7bd48cf6d1cd15872f7a598f33366a8f4ae90aec1e7a434a908

See more details on using hashes here.

File details

Details for the file commonmeta_rs-0.9.45-cp314-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: commonmeta_rs-0.9.45-cp314-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 13.7 MB
  • Tags: CPython 3.14+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for commonmeta_rs-0.9.45-cp314-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 44eff2598a480061e46ee61b83b6fd55708aee697de1406b8509dbfe5b77f366
MD5 1ad53ceb40b39b2b76238b232e6e8125
BLAKE2b-256 e2044a7881984e9db2d5fe477d527346d1d312dda39fca827faab3844430e726

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page