From 2957b72a1b3566dfc79fe415224a9eec191a9414 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Thu, 15 Oct 2026 10:30:56 -0400 Subject: [PATCH 1/4] chore: Bump obstore to pyo3 0.30 Bump pyo3 and pyo3-async-runtimes to 0.30 in the workspace, and move pyo3-file and pyo3-arrow to revs that use pyo3 0.30. Neither has a crates.io release with pyo3 0.30 yet, so pyo3-arrow is a git dependency on arro3 main for now. Switch pyo3-bytes and pyo3-object_store back to path dependencies. The git pin of pyo3-object_store from #797 predated #745, so main was running #745's regression tests against a pyo3-object_store without the fix, and test_head_with_prefix and test_open_reader_with_prefix failed. Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 53 ++++++++++++++++++++++------------------------ Cargo.toml | 6 +++--- obstore/Cargo.toml | 12 ++++------- 3 files changed, 32 insertions(+), 39 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6447275..b8bd08c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1404,9 +1404,9 @@ dependencies = [ [[package]] name = "numpy" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a5b15d63a5ff39e378daed0e1340d3a5964703ea9712eb09a0dc66fade996f4" +checksum = "aa0b9111761885449e894981fa8051dcf69e0bd114aecbd4bcdd830b6be4ed92" dependencies = [ "half", "libc", @@ -1610,9 +1610,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "700d18fa267b73b9b521fd7e13580e2f446916f176cacee1ab63fcc8191f1655" +checksum = "229ca13b8a15bb0d1487b81ab975bfcd97513416499a8312011b6036e42e0de4" dependencies = [ "chrono", "chrono-tz", @@ -1628,8 +1628,7 @@ dependencies = [ [[package]] name = "pyo3-arrow" version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5ddf226a2dbf7607570d0657c2bf6fbe299208368b2914f3dd7e7ba0b57688" +source = "git+https://github.com/kylebarron/arro3?rev=bbd67d923a9507202b88433f62286327b86726e2#bbd67d923a9507202b88433f62286327b86726e2" dependencies = [ "arrow-array", "arrow-buffer", @@ -1643,14 +1642,14 @@ dependencies = [ "indexmap", "numpy", "pyo3", - "thiserror 1.0.69", + "thiserror 2.0.21", ] [[package]] name = "pyo3-async-runtimes" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3ef68daa7316a3fac65e5e18b2203f010346de1c1c53456811a2624673ab046" +checksum = "b877331c7817ccb6379e9d19a06993160141f1d0a386e55276128717df85e3fc" dependencies = [ "futures-channel", "futures-util", @@ -1662,17 +1661,16 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3fc0c4d08f6bb10e71fe39dfb9e2f59c6eb6854e22ec8092f50c69a4499adb" +checksum = "70130e2b6dd1ee589a8788026a429561ca5c40fa7a2fa7914c2282eddae24700" dependencies = [ "target-lexicon", ] [[package]] name = "pyo3-bytes" -version = "0.7.2" -source = "git+https://github.com/developmentseed/obstore?rev=174a0c80c280a9197d49ee01c3a4fb395e8c6233#174a0c80c280a9197d49ee01c3a4fb395e8c6233" +version = "0.8.0" dependencies = [ "bytes", "pyo3", @@ -1680,9 +1678,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc0b8e19df29aad7086cf977bb0c2a2f143e30567eb113e9cf72b62ca698330" +checksum = "5e7ff73c555c286d212d4ce7e5fbda845a973c4f61bd5f160f5f2c3c2a04d1c4" dependencies = [ "libc", "pyo3-build-config", @@ -1690,40 +1688,39 @@ dependencies = [ [[package]] name = "pyo3-file" -version = "0.16.0" -source = "git+https://github.com/kylebarron/pyo3-file?rev=e88695f375ea3db95d96efc53707f4e8eb1def00#e88695f375ea3db95d96efc53707f4e8eb1def00" +version = "0.17.0" +source = "git+https://github.com/kylebarron/pyo3-file?rev=8ec53a9202aa36fc799094f39bc2982aa795b3ff#8ec53a9202aa36fc799094f39bc2982aa795b3ff" dependencies = [ "pyo3", ] [[package]] name = "pyo3-macros" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6100e8a4b5eba53afaa5ed078364851a0b2499c553a44c31026b929049b49dc6" +checksum = "c46d2e5862c7bb8207e3b639f713dda3c499933444784154c11d013c5a691b60" dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.116", + "syn 3.0.2", ] [[package]] name = "pyo3-macros-backend" -version = "0.29.3" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6143877a16e82b5a727b7127ff4cd86858a24a28d745d72f43e6f227c7b1bdb3" +checksum = "38b89f066f2ae72a2aef52d1537ca2fcd104440ebfadee06e97aa90738a25b9b" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.116", + "syn 3.0.2", ] [[package]] name = "pyo3-object_store" -version = "0.12.0" -source = "git+https://github.com/developmentseed/obstore?rev=174a0c80c280a9197d49ee01c3a4fb395e8c6233#174a0c80c280a9197d49ee01c3a4fb395e8c6233" +version = "0.13.0" dependencies = [ "async-trait", "bytes", @@ -2074,7 +2071,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2275,7 +2272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.61.2", ] [[package]] @@ -2832,7 +2829,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c1ff73ba..71634d4f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,9 +32,9 @@ object_store = { version = "0.14.0", features = [ "gcp", "http", ] } -pyo3 = { version = "0.29", features = ["macros", "indexmap"] } -pyo3-async-runtimes = { version = "0.29", features = ["tokio-runtime"] } -pyo3-file = { git = "https://github.com/kylebarron/pyo3-file", rev = "e88695f375ea3db95d96efc53707f4e8eb1def00" } +pyo3 = { version = "0.30", features = ["macros", "indexmap"] } +pyo3-async-runtimes = { version = "0.30", features = ["tokio-runtime"] } +pyo3-file = { git = "https://github.com/kylebarron/pyo3-file", rev = "8ec53a9202aa36fc799094f39bc2982aa795b3ff" } thiserror = "2" tokio = "1.50" url = "2" diff --git a/obstore/Cargo.toml b/obstore/Cargo.toml index 938c6670..e57d7b8c 100644 --- a/obstore/Cargo.toml +++ b/obstore/Cargo.toml @@ -32,16 +32,12 @@ http = { workspace = true } indexmap = { workspace = true } object_store = { workspace = true } pyo3 = { workspace = true, features = ["chrono"] } -pyo3-arrow = "0.19" +# pyo3-arrow with pyo3 0.30 from arro3 main, until it is released to crates.io. +pyo3-arrow = { git = "https://github.com/kylebarron/arro3", rev = "bbd67d923a9507202b88433f62286327b86726e2" } pyo3-async-runtimes = { workspace = true, features = ["tokio-runtime"] } -# pyo3-bytes 0.7.2 (pyo3 0.29) from main, since the in-repo pyo3-bytes is on -# pyo3 0.30. Switch back to the path dependency once obstore moves to pyo3 0.30. -pyo3-bytes = { git = "https://github.com/developmentseed/obstore", rev = "174a0c80c280a9197d49ee01c3a4fb395e8c6233" } +pyo3-bytes = { path = "../pyo3-bytes" } pyo3-file = { workspace = true } -# pyo3-object_store 0.12 (pyo3 0.29) from main, since the in-repo -# pyo3-object_store is on pyo3 0.30. Switch back to the path dependency once -# obstore moves to pyo3 0.30. -pyo3-object_store = { git = "https://github.com/developmentseed/obstore", rev = "174a0c80c280a9197d49ee01c3a4fb395e8c6233" } +pyo3-object_store = { path = "../pyo3-object_store" } tokio = { workspace = true, features = [ "macros", "rt", From 2f1aad84aadda1964fa4185a4b83017a2bd1b527 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Thu, 15 Oct 2026 10:30:58 -0400 Subject: [PATCH 2/4] docs(pyo3-object_store): List the #745 prefix fix in the 0.13.0 changelog pyo3-object_store 0.13.0 was published from c8efd78, which includes #745, but the changelog entry was written before #745 merged. Co-Authored-By: Claude Opus 5.5 --- pyo3-object_store/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/pyo3-object_store/CHANGELOG.md b/pyo3-object_store/CHANGELOG.md index 3f77af58..d4a5b438 100644 --- a/pyo3-object_store/CHANGELOG.md +++ b/pyo3-object_store/CHANGELOG.md @@ -4,6 +4,7 @@ - Bump to pyo3 0.30. - Support Cloudflare R2 URLs with a jurisdiction, such as `https://{account}.eu.r2.cloudflarestorage.com/{bucket}` (#757). +- Strip the store prefix from the `ObjectMeta` returned by `get_opts` on a store with a `prefix`, so `head` returns a prefix-relative path and the buffered reader no longer reads from `prefix/prefix/key` (#745). ## [0.12.0] - 2026-06-25 From 6fb060fbd96cb04eb25b3fe04416d2655b2d2f70 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Thu, 15 Oct 2026 10:48:18 -0400 Subject: [PATCH 3/4] chore: Use pyo3-arrow 0.20 from crates.io pyo3-arrow 0.20 is published with pyo3 0.30, so drop the git dependency on arro3 main. Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 5 +++-- obstore/Cargo.toml | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b8bd08c7..85fbfd81 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1627,8 +1627,9 @@ dependencies = [ [[package]] name = "pyo3-arrow" -version = "0.19.0" -source = "git+https://github.com/kylebarron/arro3?rev=bbd67d923a9507202b88433f62286327b86726e2#bbd67d923a9507202b88433f62286327b86726e2" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64d241269690f6c03c10aa61140677168cfb5e06065a78980a40189f613acd7" dependencies = [ "arrow-array", "arrow-buffer", diff --git a/obstore/Cargo.toml b/obstore/Cargo.toml index e57d7b8c..16226a3e 100644 --- a/obstore/Cargo.toml +++ b/obstore/Cargo.toml @@ -32,8 +32,7 @@ http = { workspace = true } indexmap = { workspace = true } object_store = { workspace = true } pyo3 = { workspace = true, features = ["chrono"] } -# pyo3-arrow with pyo3 0.30 from arro3 main, until it is released to crates.io. -pyo3-arrow = { git = "https://github.com/kylebarron/arro3", rev = "bbd67d923a9507202b88433f62286327b86726e2" } +pyo3-arrow = "0.20" pyo3-async-runtimes = { workspace = true, features = ["tokio-runtime"] } pyo3-bytes = { path = "../pyo3-bytes" } pyo3-file = { workspace = true } From ed1f07233d38140990fbc364ed11cfd06ca04cb7 Mon Sep 17 00:00:00 2001 From: Kyle Barron Date: Thu, 15 Oct 2026 10:49:22 -0400 Subject: [PATCH 4/4] Apply suggestion from @kylebarron --- pyo3-object_store/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/pyo3-object_store/CHANGELOG.md b/pyo3-object_store/CHANGELOG.md index d4a5b438..3f77af58 100644 --- a/pyo3-object_store/CHANGELOG.md +++ b/pyo3-object_store/CHANGELOG.md @@ -4,7 +4,6 @@ - Bump to pyo3 0.30. - Support Cloudflare R2 URLs with a jurisdiction, such as `https://{account}.eu.r2.cloudflarestorage.com/{bucket}` (#757). -- Strip the store prefix from the `ObjectMeta` returned by `get_opts` on a store with a `prefix`, so `head` returns a prefix-relative path and the buffered reader no longer reads from `prefix/prefix/key` (#745). ## [0.12.0] - 2026-06-25