From eba5019dc896685457f9899ef37124eb50e59f03 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Fri, 25 Oct 2024 09:38:41 -0400 Subject: [PATCH] Bump to 0.2 (#56) --- CHANGELOG.md | 13 +++++++++++++ Cargo.lock | 2 +- README.md | 22 +++++++++------------- obstore/Cargo.toml | 2 +- obstore/python/obstore/_list.pyi | 2 ++ 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1fb479..2a5e152 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.2.0] - 2024-10-25 + +## What's Changed + +- Streaming list results. `list` now returns an async or sync generator. by @kylebarron in https://github.com/developmentseed/obstore/pull/35 +- Optionally return list result as arrow. The `return_arrow` keyword argument returns chunks from `list` as Arrow RecordBatches, which is faster than materializing Python dicts/lists. by @kylebarron in https://github.com/developmentseed/obstore/pull/38 +- Return buffer protocol object from `get_range` and `get_ranges`. Enables zero-copy data exchange from Rust into Python. by @kylebarron in https://github.com/developmentseed/obstore/pull/39 +- Add put options. Enables custom tags and attributes, as well as "put if not exists". by @kylebarron in https://github.com/developmentseed/obstore/pull/50 +- Rename to obstore by @kylebarron in https://github.com/developmentseed/obstore/pull/45 +- Add custom exceptions. by @kylebarron in https://github.com/developmentseed/obstore/pull/48 + +**Full Changelog**: https://github.com/developmentseed/obstore/compare/py-v0.1.0...py-v0.2.0 + ## [0.1.0] - 2024-10-21 - Initial release. diff --git a/Cargo.lock b/Cargo.lock index d576450..76ca020 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1194,7 +1194,7 @@ dependencies = [ [[package]] name = "obstore" -version = "0.2.0-beta.2" +version = "0.2.0" dependencies = [ "arrow", "bytes", diff --git a/README.md b/README.md index 6d401c3..3c9202c 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,30 @@ # obstore [![PyPI][pypi_badge]][pypi_link] + [pypi_badge]: https://badge.fury.io/py/obstore.svg [pypi_link]: https://pypi.org/project/obstore/ + -A Python interface and [pyo3](https://github.com/PyO3/pyo3) integration to the Rust [`object_store`](https://docs.rs/object_store) crate, providing a uniform API for interacting with object storage services and local files. +Simple, fast integration with object storage services like Amazon S3, Google Cloud Storage, Azure Blob Storage, and S3-compliant APIs like Cloudflare R2. -Run the same code in multiple clouds via a simple runtime configuration change. - - - -- Easy to install with no Python dependencies. - Sync and async API. - Streaming downloads with configurable chunking. +- Streaming `list`, with no need to paginate. +- Support for conditional put ("put if not exists"), as well as custom tags and attributes. - Automatically supports [multipart uploads](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html) under the hood for large file objects. +- Optionally return list results as [Arrow](https://arrow.apache.org/), which is faster than materializing Python `dict`/`list` objects. +- Easy to install with no required Python dependencies. - The [underlying Rust library](https://docs.rs/object_store) is production quality and used in large scale production systems, such as the Rust package registry [crates.io](https://crates.io/). +- Support for zero-copy data exchange from Rust into Python in `get_range` and `get_ranges`. - Simple API with static type checking. - Helpers for constructing from environment variables and `boto3.Session` objects -Supported object storage providers include: - -- Amazon S3 and S3-compliant APIs like Cloudflare R2 -- Google Cloud Storage -- Azure Blob Gen1 and Gen2 accounts (including ADLS Gen2) -- Local filesystem -- In-memory storage + ## Installation diff --git a/obstore/Cargo.toml b/obstore/Cargo.toml index cbf5cb2..62577c8 100644 --- a/obstore/Cargo.toml +++ b/obstore/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obstore" -version = "0.2.0-beta.2" +version = "0.2.0" authors = { workspace = true } edition = { workspace = true } description = "A Python interface to the Rust object_store crate, providing a uniform API for interacting with object storage services and local files." diff --git a/obstore/python/obstore/_list.pyi b/obstore/python/obstore/_list.pyi index b8e2f2d..026f5f7 100644 --- a/obstore/python/obstore/_list.pyi +++ b/obstore/python/obstore/_list.pyi @@ -182,6 +182,8 @@ def list( overhead between Rust and Python and so this can be significantly faster for large list operations. Defaults to `False`. + If this is `True`, the `arro3-core` Python package must be installed. + Returns: A ListStream, which you can iterate through to access list results. """