Contributor Documentation¶
Prerequisites¶
Layout¶
pyo3-object_store/
: Logic for constructingobject_store
instances lives here, so that it can potentially be shared with other Rust-Python libraries in the future.obstore/
: The primary Python-facing bindings of theobstore
library. This re-exports the classes defined inpyo3-object_store
. It also adds the top-level functions that form theobstore
API.pyo3-bytes
: A wrapper ofbytes::Bytes
that is used insideobstore
for zero-copy buffer exchange between Rust and Python but also is intended to be reusable for other Rust-Python libraries.
Developing obstore¶
From the top-level directory, run
uv run maturin develop -m obstore/Cargo.toml
this will compile obstore
and add it to the uv-managed Python environment.
If you wish to do any benchmarking, run
uv run maturin develop -m obstore/Cargo.toml --release
to compile obstore
with release optimizations turned on.
Tests¶
All obstore tests should go into the top-level tests
directory.
Publishing¶
Push a new tag to the main branch of the format py-v*
. A new version will be published to PyPI automatically.
Documentation website¶
The documentation website is generated with mkdocs
and mkdocs-material
. You can serve the docs website locally with
uv run mkdocs serve
Publishing documentation happens automatically via CI when a new tag is published of the format py-v*
. It can also be triggered manually through the Github Actions dashboard on this page. Note that publishing docs manually is not advised if there have been new code additions since the last release as the new functionality will be associated in the documentation with the tag of the previous release. In this case, prefer publishing a new patch or minor release, which will publish both a new Python package and the new documentation for it.