Contributor Documentation¶
Prerequisites¶
Layout¶
pyo3-object_store/: Logic for constructingobject_storeinstances lives here, so that it can potentially be shared with other Rust-Python libraries in the future.obstore/: The primary Python-facing bindings of theobstorelibrary. This re-exports the classes defined inpyo3-object_store. It also adds the top-level functions that form theobstoreAPI.pyo3-bytes: A wrapper ofbytes::Bytesthat is used insideobstorefor 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.