diff --git a/python/Cargo.toml b/python/Cargo.toml index 82b9ccf..0345590 100644 --- a/python/Cargo.toml +++ b/python/Cargo.toml @@ -23,7 +23,7 @@ object_store = "0.12" pyo3 = { version = "0.23.0", features = ["macros"] } pyo3-async-runtimes = "0.23" pyo3-bytes = "0.1.3" -pyo3-object_store = "0.1.0-beta.2" +pyo3-object_store = "0.1.0-beta.4" rayon = "1.10.0" tokio-rayon = "2.1.0" thiserror = "1" diff --git a/python/pyproject.toml b/python/pyproject.toml index d0651eb..d5da812 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -31,6 +31,7 @@ dev-dependencies = [ "mkdocstrings-python>=1.13.0", "mkdocstrings>=0.27.0", "numpy>=1", + "obstore", "pip>=24.2", "pytest-asyncio>=0.24.0", "pytest>=8.3.3", diff --git a/python/python/async_tiff/_tiff.pyi b/python/python/async_tiff/_tiff.pyi index b5e1656..1c26f21 100644 --- a/python/python/async_tiff/_tiff.pyi +++ b/python/python/async_tiff/_tiff.pyi @@ -1,3 +1,4 @@ +import obstore from ._tile import Tile from ._ifd import ImageFileDirectory from .store import ObjectStore @@ -5,7 +6,11 @@ from .store import ObjectStore class TIFF: @classmethod async def open( - cls, path: str, *, store: ObjectStore, prefetch: int | None = 16384 + cls, + path: str, + *, + store: obstore.store.ObjectStore | ObjectStore, + prefetch: int | None = 16384, ) -> TIFF: ... @property def ifds(self) -> list[ImageFileDirectory]: ... diff --git a/python/src/lib.rs b/python/src/lib.rs index acfa7a0..26be624 100644 --- a/python/src/lib.rs +++ b/python/src/lib.rs @@ -54,8 +54,8 @@ fn _async_tiff(py: Python, m: &Bound) -> PyResult<()> { m.add_class::()?; m.add_class::()?; - pyo3_object_store::register_store_module(py, m, "async_tiff")?; - pyo3_object_store::register_exceptions_module(py, m, "async_tiff")?; + pyo3_object_store::register_store_module(py, m, "async_tiff", "store")?; + pyo3_object_store::register_exceptions_module(py, m, "async_tiff", "exceptions")?; Ok(()) } diff --git a/python/src/tiff.rs b/python/src/tiff.rs index 27808e6..cba1041 100644 --- a/python/src/tiff.rs +++ b/python/src/tiff.rs @@ -6,7 +6,7 @@ use pyo3::exceptions::PyIndexError; use pyo3::prelude::*; use pyo3::types::PyType; use pyo3_async_runtimes::tokio::future_into_py; -use pyo3_object_store::PyObjectStore; +use pyo3_object_store::AnyObjectStore; use crate::tile::PyTile; use crate::PyImageFileDirectory; @@ -25,10 +25,10 @@ impl PyTIFF { _cls: &'py Bound, py: Python<'py>, path: String, - store: PyObjectStore, + store: AnyObjectStore, prefetch: Option, ) -> PyResult> { - let reader = ObjectReader::new(store.into_inner(), path.into()); + let reader = ObjectReader::new(store.into_dyn(), path.into()); let object_reader = reader.clone(); let cog_reader = future_into_py(py, async move { diff --git a/python/uv.lock b/python/uv.lock index ad43a46..4155f39 100644 --- a/python/uv.lock +++ b/python/uv.lock @@ -40,6 +40,7 @@ dev = [ { name = "mkdocstrings-python" }, { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, { name = "numpy", version = "2.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "obstore" }, { name = "pip" }, { name = "pytest" }, { name = "pytest-asyncio" }, @@ -60,6 +61,7 @@ dev = [ { name = "mkdocstrings", specifier = ">=0.27.0" }, { name = "mkdocstrings-python", specifier = ">=1.13.0" }, { name = "numpy", specifier = ">=1" }, + { name = "obstore" }, { name = "pip", specifier = ">=24.2" }, { name = "pytest", specifier = ">=8.3.3" }, { name = "pytest-asyncio", specifier = ">=0.24.0" }, @@ -972,6 +974,90 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/17/7f/d322a4125405920401450118dbdc52e0384026bd669939484670ce8b2ab9/numpy-2.2.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:783145835458e60fa97afac25d511d00a1eca94d4a8f3ace9fe2043003c678e4", size = 12839607 }, ] +[[package]] +name = "obstore" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/48/d5114e5afc1ba74512b635dc391a54340085125c497b40863d00b268adbe/obstore-0.4.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5289f9d2b3e76384594c678bf61b128d9d108439add15152cc67a3f126a54269", size = 5371532 }, + { url = "https://files.pythonhosted.org/packages/48/0a/10f0cd0aa5d7cc8367658fe130467a3e197ee87ff0b468aa5336676c9356/obstore-0.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:72a4a838a5311f4172c70da52bdcaa0c85d681708cb08f87fc47dacef441e3dd", size = 5055603 }, + { url = "https://files.pythonhosted.org/packages/8c/a4/d15136199796f246b783ab9274e95bf606b1fbe8d2860fd232e4c42effb7/obstore-0.4.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbef4a0d5b79290527ab99215accf2cd1f19a1c2f384491c526c7fb88716b732", size = 5380849 }, + { url = "https://files.pythonhosted.org/packages/a6/4b/fbd5d0a2576d155b61abe805076177b2c418ae2fd268b8c9bc397623804e/obstore-0.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb1002100dad78b09fe222f2fe98153b70972b0a96217c6aacda038a2c95165d", size = 5431424 }, + { url = "https://files.pythonhosted.org/packages/83/54/af3b5b3fada4244319037b35b010993f7f7b579dc665324e1f4263f8c13f/obstore-0.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b5037c258627e3c6c6ad04b85822ae3fa31d339be42115b15fbea3530b19e09", size = 5666035 }, + { url = "https://files.pythonhosted.org/packages/c9/5f/fb2b7bf6ac5b3e46fd220f2124355d8245895883698cee1ad9ec4493bc10/obstore-0.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4f2305673735b0cfe81707d518e2501b7cb7b3297781bab4ad44987ddcc2f9e9", size = 6873585 }, + { url = "https://files.pythonhosted.org/packages/a4/6b/b890896f5949cea6168ae97ccf21e61e732747e2a579dd5dedd9dd7cbf42/obstore-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f40816f10e866acaaafc8f24ce3b3bee418ba357541cbd46c0079c7f63e3fdfb", size = 5499357 }, + { url = "https://files.pythonhosted.org/packages/06/9d/935c055b9c8866f1a56c9c9af6e25aa7e0b996a084df233ff70d92964fbd/obstore-0.4.0-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:55ce93e06be84732742c0ac1c1da3e09f256f8886dfc593da94f3113eec04544", size = 5330606 }, + { url = "https://files.pythonhosted.org/packages/aa/17/13d342fc53d009f79521b45ce21e8266495411c947a53e65cdd61c36ad0a/obstore-0.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7882d1df2851499caeda20b4af3f45132075fac8ca6dd5dcdcc8de475328e21c", size = 5438162 }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f6f19e994f6a67e58d6b3ca366512f0436b1ce8f1299b8d0932aa6e89676/obstore-0.4.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:395b94d7f3eaf07c2d4a018c8f5ae1115918a3967715dbf8d2c7c571c80e9d8a", size = 5567570 }, + { url = "https://files.pythonhosted.org/packages/55/4f/fbd96b4720feb3b6d7db05a2e9a19677d2dcd029371e075420a5bfbbf2dd/obstore-0.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b213da09d0ca7846227d76ddc215476adb08339a1733cbb7fd726be501614f6d", size = 5449310 }, + { url = "https://files.pythonhosted.org/packages/f1/c3/670566abdcf86f533394a6c3f01f640dc0f926d07d8562ff4383eb7eeb93/obstore-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b94fe1c387885ac7bf98edb0f87a2585250c7d539144a284dfad30568083d7ad", size = 5626037 }, + { url = "https://files.pythonhosted.org/packages/d4/7b/c303fa4d9df5bbe237fa366ff632cb563b8846978edb5db730be3bf79dd5/obstore-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:5fc1ab0318787028ae62069c579a6fdc56ec77cb5ec896931d7f2e2c4774f65b", size = 5346606 }, + { url = "https://files.pythonhosted.org/packages/d6/e7/1ab6c56055ed2ba7901e613432d8e296e9c6cb8f611b3059b9f68406fe36/obstore-0.4.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:204d9b6fec49d4a4ba33e7a391bfa2ba068e80b82858521a240695c9bf4643de", size = 5371630 }, + { url = "https://files.pythonhosted.org/packages/80/3c/8648cbd3a95f8b475ecf091ad9b1f42d82a974746b3ac89d5880b77fb475/obstore-0.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80f3d23ca211b8d64fcbdd9d6406ab10795f0405c14a5309a59cb57a6b253e80", size = 5055837 }, + { url = "https://files.pythonhosted.org/packages/e3/30/9116c9adddd47f2f82c8dcc0ad31a3d0f50139209fd0d2175ac0a97063c4/obstore-0.4.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cd21a142da82bb3734245351d7aad565b5abc8b6a33669bef59e5e32fafb9739", size = 5381158 }, + { url = "https://files.pythonhosted.org/packages/06/21/d041a0593a606b5f1fdf76178e85058d4da0c69f9c13955482d7c40f613c/obstore-0.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2cc7d9b38d8b8ced7838e8e7c4ab51fa936d77c4b6707ba947e9382666cfb8fd", size = 5431325 }, + { url = "https://files.pythonhosted.org/packages/c0/b4/9a3f3ea26ba296bd2dcb18e657215a2cea42c08dd7633309a4d35c34c977/obstore-0.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de0b735a4c5e4ce9a64a491c69028e30061674f888485f8b4d7d98686f40093", size = 5666060 }, + { url = "https://files.pythonhosted.org/packages/ba/73/353a179795aa585cd17d0d66207bbe714986fffc1b35d39407ada1bcf754/obstore-0.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7bac9affd710d41ba11738d034e893ec79464a1d885a9b9e584f679970239253", size = 6873593 }, + { url = "https://files.pythonhosted.org/packages/e4/b3/cda6a80a189a1e3b997ccf017fe577b4f4c6fd96c8832fb3a6d2cf8893a5/obstore-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b908f5d06abba647ae135b2fef9d68b6ea4a9a3280c9f6032b6ef7cfc91a5ca0", size = 5499358 }, + { url = "https://files.pythonhosted.org/packages/0c/1d/570d206148e235ed980f4443498e8e08bfa071dbfec70b9887b46a52d41a/obstore-0.4.0-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:3ae058a9d867cde891e6d54af6c4e0da503106457825d044a2cbfc7bdc2fa083", size = 5330895 }, + { url = "https://files.pythonhosted.org/packages/bc/3c/5ba48939d31798d8c9eb9d4bebb68919bf029c5538b104699adc150eec7f/obstore-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4a939b82e6c7981cc8c6f28e6e78458d52adb39c962910f221410ad96e24be18", size = 5437847 }, + { url = "https://files.pythonhosted.org/packages/00/e2/953cd59f615417189d59664d2034b505bc3d45fdc75658f70d6accfa780f/obstore-0.4.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e843e13781a996bc77e3b8496e836d5b8071304fd369065892815bd9cdc54f64", size = 5567460 }, + { url = "https://files.pythonhosted.org/packages/d6/b8/9bc4537f543acb38c424713ee91e6c1a73a04f3c07072634688503d5638b/obstore-0.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b55f592bcccb254875ded17cd8b091202c21e79af20c757016683f00496caff5", size = 5449093 }, + { url = "https://files.pythonhosted.org/packages/2a/39/9367a29b07b62d540a205d7cb609a20ab85a5e5279d9020bc3521c2a6470/obstore-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ad4837f12d4e67a14a307cfae405fb2c1f954f44b1f8e3b40be9334fedd5015", size = 5625984 }, + { url = "https://files.pythonhosted.org/packages/e8/41/e2d351753dfe76f8f2afa5f102e8ad5f26298dd489e81d24f7a33d79d952/obstore-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27a59f89d377fb4fc26164362ccc71358cc174f8b163b0c1a7be24c8a5d8629", size = 5346266 }, + { url = "https://files.pythonhosted.org/packages/b1/45/047e15a7a484764053487d471a7ef5d3cd56cd4a9e1f39f9bac186b6b97a/obstore-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f8fdf3c090f2af97b6cb93130ca2046d4d9825bec904d63f1100a83bc122bea4", size = 5380054 }, + { url = "https://files.pythonhosted.org/packages/48/e6/3134aca631141251ce3d14c60f3206fc63693aba4abb4a9430e43d838efc/obstore-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0d8c7009d7dc908658f106b3529dad260629f407b7ae4ed7e54b79e3ec2b3e3e", size = 5057062 }, + { url = "https://files.pythonhosted.org/packages/83/a2/0543d84061d31c92927d4f034ca4a3a1cef291352a1434c75cac6da397bb/obstore-0.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c63a1ff1159c1370fd919388f4b77556f55f77a631eba97ed5b582d47330200", size = 5375893 }, + { url = "https://files.pythonhosted.org/packages/be/69/e6815d506445521759c45b4e44d3fb6abd6250a2d9b173449d82774d8975/obstore-0.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ec00fba4232b899a139b8e02f29bfaa67ee9dbf07bc72a8baab26c5303bb877", size = 5428874 }, + { url = "https://files.pythonhosted.org/packages/7f/bb/873955c5f3543ce18f5193aba0b92954d31742aa8fab89897c279d943252/obstore-0.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e561e68b65df69923bd45eac234e5d1de1920a6722668c00f155c95f019b977e", size = 5661417 }, + { url = "https://files.pythonhosted.org/packages/bf/ea/769bf9931201caf0f09366946e5ca446b66563dcfe6271c164206dc5644f/obstore-0.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ce927ed3411472efc6c75a7a1b187e5f11d7a88706335da1aa2a52a6d30313a", size = 6878883 }, + { url = "https://files.pythonhosted.org/packages/85/5f/20dc1bc6be1c5f482551c41ab5799d565a0c96928ce13729356596960d25/obstore-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:903b7d13de2897911a137a2f07cd4cf72d01ff3cf64cb111dbdadc1d28963be3", size = 5497357 }, + { url = "https://files.pythonhosted.org/packages/64/73/06abfa3ea9c3e216d89163553fdbcd714cc09d57c2de80cb233b4c2d8c4b/obstore-0.4.0-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:76f6181ae02f039ba9c7b7d35be54dc289f54499ede1cb384217cd438f81bb20", size = 5325647 }, + { url = "https://files.pythonhosted.org/packages/23/56/26fad6390857f4bc9d6a2e038bd496ac20545d47c2e0b290bbdb5ca38b80/obstore-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:636f79f458485fb922d326588dca2d25879780591c0655b151a838e5f944afab", size = 5429720 }, + { url = "https://files.pythonhosted.org/packages/af/b1/840f0e0536f0a65760fdc89922ea461765d6241e64ffb0b5c61506c07c94/obstore-0.4.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:7ecc3d7bcb69e694b8beda7dc0358c2b9e57b67867f64ad1b4a0c5d5d999d0bc", size = 5565572 }, + { url = "https://files.pythonhosted.org/packages/72/fa/8b77f2abea5752676ce2a9247c57ad9199c2adc7c48976b1381127debb46/obstore-0.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:05dd81e7ae7d79b79dbc04bfb8b8d6f451b9b65b87923a9d3288ab97833eb475", size = 5446130 }, + { url = "https://files.pythonhosted.org/packages/75/3f/a971a72afc52da438a571f9c5dfeb77430b4def370c6fe68cd95222abec5/obstore-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d94af6b030bab5646f7be2e749120918c4244237acff486b501f44849a5fc06", size = 5620114 }, + { url = "https://files.pythonhosted.org/packages/b8/60/3cf820671da9c423b81c25943eedd1af2cb610d52a286ff933affad18831/obstore-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc292904246c90b00f3b5fa094c85ab16f020db38463391e98d937f070a2a14c", size = 5354538 }, + { url = "https://files.pythonhosted.org/packages/71/9b/c0b80467b1b09784febe23f285ca8f58f7fa896a273fe4f5895c631cf022/obstore-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:c9ed6f0d42ea516723e070a92b49f8ff23b714d7e49732673009ab0757dbf8db", size = 5379929 }, + { url = "https://files.pythonhosted.org/packages/b9/f0/de9bc14b0c6651baf4763129e5c726c606c69b958bd2293c076db5ccaf54/obstore-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be199652c2e20f9fec8bc6cc6f672de5e932128a7f21d5710180fa4d33e43223", size = 5056262 }, + { url = "https://files.pythonhosted.org/packages/42/0c/f1d4370ac3b0d97d9c4e5d6f93823396f4af1923e0159edc46216fd58331/obstore-0.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ea1bf7c870101f7fa95e33b9ca1fb6231e71864001203b599abb0196f84a904d", size = 5375198 }, + { url = "https://files.pythonhosted.org/packages/c5/da/80d701c3aeb4afcf411a43a9c4e90917c3e5704c3959e7ae09d81c22c4eb/obstore-0.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0890226973af024b87114efa6b8e5d1a5bb326a6ea808eb3b1bcd1ed6c60db", size = 5428503 }, + { url = "https://files.pythonhosted.org/packages/50/4c/10c041f30c21ed49b03e1cbeb2d22a5209d2abe2acf868262b506173b95a/obstore-0.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc2f643880b29b98b692ee865c275314be8be5443c0ea4268abb4751d87c2276", size = 5661624 }, + { url = "https://files.pythonhosted.org/packages/4f/d6/b2dbc565bc103e352d7225b0e1615e93e02ebee6d421efa3e06b0ecc8527/obstore-0.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b48b86d229f76f9b43cb2a382a452bfd32e451814c86de66dea1b82a232a639", size = 6891986 }, + { url = "https://files.pythonhosted.org/packages/eb/83/db5388be110caf8a777d50ed42369b603b49e907bf5b3b3182becbe72808/obstore-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0265af83cd23de5d703a14caa356c78d466af3f84fd5532ea3669d750224fb66", size = 5496734 }, + { url = "https://files.pythonhosted.org/packages/03/a8/a8d0a66e7bcd3d8274b5756ceac62dc6fce552e5c3eab2c6247228955776/obstore-0.4.0-cp313-cp313-manylinux_2_24_aarch64.whl", hash = "sha256:61f9fa93933100852e28771775852d4ae148633201fc0d9f4718ae555ea3b991", size = 5325192 }, + { url = "https://files.pythonhosted.org/packages/e6/f4/4f9540b1cd1ec8b319425045857bf1372b8bdfbaa3372f45c151d9c9036b/obstore-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cb3e6e21c5b24cab70a601f78ab9637e7820ffcaf3a437e698c658b59fb30587", size = 5428852 }, + { url = "https://files.pythonhosted.org/packages/3b/1f/b0663184392daaa882396648b5835dadb2ab4adeedc460ced9441830a582/obstore-0.4.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:999cec62e647aec112151af1152d08b68fe091c55debbc0d1d78f7b17dc186b9", size = 5565446 }, + { url = "https://files.pythonhosted.org/packages/24/a8/89c7957dca2ef894a5855b928d8548884a4f85516ed9b12868ff2701a4d9/obstore-0.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac43866ff6f5363acdf6ae6d5e683474a71ecc717f7ec41e0fbe2b025ec23f88", size = 5445762 }, + { url = "https://files.pythonhosted.org/packages/57/9d/f34a4fd15039a72231ddca2830e7a12100087cf5b464745c30bf76c63601/obstore-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c18487cf52b7a29b1dddaa020eeaf750fce354ddc045d38e2a908a4ed1639705", size = 5619370 }, + { url = "https://files.pythonhosted.org/packages/46/1d/c9f3e956cbb600fb933a8e3bce14177ff80bdc949d0702758b9c4590331f/obstore-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:e6966717477cddf0def201c09f9c4d5f86dcd57c0b4c17dbe12915d73ccf7e72", size = 5354096 }, + { url = "https://files.pythonhosted.org/packages/6d/e9/7832310a23e48aa0ec55bc77478ee618abe6b06df6dc9730bcf3ade7c523/obstore-0.4.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b4c644ba553801e8c8d035fcd16e1bb9648a250b0f099a00fde6a2f107eb617", size = 5373235 }, + { url = "https://files.pythonhosted.org/packages/2b/49/91db092f768fbf44085789dc73eba14e6ae31d7dd8fd503a8d47eb28963d/obstore-0.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b98656e29b46fe912e8eeaf3cc282ea5c55a6b444cc40df154e5b89c769749f", size = 5057399 }, + { url = "https://files.pythonhosted.org/packages/bb/98/514d900249f5afb3a14efc2eddd64d93fa5595939f4e5ede85db3f5f59c5/obstore-0.4.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1683ca43f4e9ab766890b4b9aeebea40879767a60df9369b0857a5cf17a648a4", size = 5381549 }, + { url = "https://files.pythonhosted.org/packages/8e/e0/4411366ed5e81b708b0115dde557add93abfe459de9bc45020a06e94093b/obstore-0.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e86accb6132f39acc2b45f56ae80ba5c179a1217ee06e53ca78bb364978633d", size = 5431599 }, + { url = "https://files.pythonhosted.org/packages/d4/96/bba265b4d8383b0f19133a549389e32ac25251163969b151d7e187e9ec1e/obstore-0.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6488c4ebf1fff212b8dccbe047d8fe8abda1d14b53222d321d15d4af9b7c1f31", size = 5666883 }, + { url = "https://files.pythonhosted.org/packages/78/b3/8bd13334a690f45c228c8c3add497db88e1819de1d34e4fcb92601c64628/obstore-0.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20b9b0d2a2148bc809ebd4eab59a6e21b5cc7a7ad4447410f826373124fd325a", size = 6863064 }, + { url = "https://files.pythonhosted.org/packages/dc/68/b5a127a33ec4437eaa772c8dab31139c1d1613de3f4c94405bb348912582/obstore-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfda30454fb98b01bafafa75e1f8481c75bebb71df9ae4a74feefaf88dc8057c", size = 5500471 }, + { url = "https://files.pythonhosted.org/packages/4a/8f/c6e8bebe820c3fb1c632e96dddac45f040f63bcdcaa5857b8e2340fbc342/obstore-0.4.0-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:4ce38e0ed246a7d401082b178b68068a411835e5bda4780a668aed6d12c7f997", size = 5331955 }, + { url = "https://files.pythonhosted.org/packages/66/c5/2abd124accab204afdcf1e41c0d469f41cff0230a36c4881a878b6a2bbea/obstore-0.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c8e37459c7e1e8f3d99d47aedd92591467d1a26cee63705aef105c35c3804deb", size = 5438865 }, + { url = "https://files.pythonhosted.org/packages/34/4f/29aa5ed8b17fdfcf72ead66d3caec6feb101baa4bb3f96ee372cebbff55a/obstore-0.4.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:6373bca008cf800b6455225fb8c2483b1d830010d3857bd3a72c3f0523b86788", size = 5567882 }, + { url = "https://files.pythonhosted.org/packages/88/3d/09370c467b5f33d5a6371b8972e4d68aa7b51fdf380dfb69be76e6058896/obstore-0.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4c3c715e36fcc380c51dd5624224ddf8f1150db52cf8fea525b1c2189abc9945", size = 5449205 }, + { url = "https://files.pythonhosted.org/packages/4b/ad/4ba42c3c7db86d0ea04636da6af5a35e208a4aeaeffe9480cad8bf9d4af6/obstore-0.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e5b7a73f4e73b24d0ddc63034bcc8540ecc036fa1dec2a2bf61e4be54d179667", size = 5626806 }, + { url = "https://files.pythonhosted.org/packages/45/37/8d017b71f22156bfba91b1f5b76cfc160c55838cf69b4b8e2aa8c47d462b/obstore-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:bee833f67e9da1e2b43af692e76076b19fba2fec57c437ebfb9b1c92360c7815", size = 5346817 }, + { url = "https://files.pythonhosted.org/packages/c6/01/f6876d8f00400f1f913c3f92d0e0460a771960944b6f7a0c636220ab35e6/obstore-0.4.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:45125db600b7ae3699c83887d669312a56008f022c99de19efa724b3ac50d848", size = 5371024 }, + { url = "https://files.pythonhosted.org/packages/16/24/82dfcd91c13845c17afa008d8f387a0d634ed5226d2dd26c80cacb943eab/obstore-0.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc5272ccab9faca768eb5ac7745c39778155d2d966619a4482eeadaa2291c6fd", size = 5054972 }, + { url = "https://files.pythonhosted.org/packages/cf/25/acc043cb83b1ab4e16a6fa92bcfd30e0e7d5cd919b300c5143b80c7fc9b5/obstore-0.4.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15c7c98cbfe028c55a0dcdc44a6fdb0c68570ded9ecc8b84bafbcad47272c8f8", size = 5380773 }, + { url = "https://files.pythonhosted.org/packages/74/21/2acb48b709c480dd4f0a1598446e244475262c33ffcf5a6860cbaed79d4b/obstore-0.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be74de1dd797ee5442457efeee69408440307811d1920ab967493cb3bf0705c0", size = 5431257 }, + { url = "https://files.pythonhosted.org/packages/aa/4a/ec910819628d8ccab070d3a59546d9d8fb9a449ea5965ca44148bbdafaee/obstore-0.4.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa4a8de1845bf3dc3cc05c53f994a46fe3c9bdff20962337c7c4b9bcbb57bc0d", size = 5665982 }, + { url = "https://files.pythonhosted.org/packages/f0/7d/b69e119451d00ff05619151240fc844e35f50a815447258d7ec0bbf165cf/obstore-0.4.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:03bf8f55a6420e3648ae9a42971d624c3a382d6a12ee3924111b1ceaf3e41b52", size = 6871028 }, + { url = "https://files.pythonhosted.org/packages/27/f0/1e397eb80ca75c203c54b952a9bd3220d355d6ac2dbb3e0b01dabc22cebb/obstore-0.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3d87aaba03010dc95c223890f4400e5793e572f834d4e790a4f7f659e5088c3", size = 5498784 }, + { url = "https://files.pythonhosted.org/packages/fc/bb/bae4ef625054494d0c6ebad7b51b9e2ab99895dc98d18d05d424223b5dca/obstore-0.4.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:b72804ed80506b0d362ac63c9a18ac56a3841d334d781069d6e08c252f809d9f", size = 5331133 }, + { url = "https://files.pythonhosted.org/packages/cd/ef/70462b05a7e41b684474c4d828dfb5db791dbbac68c945f9943e8e91c89e/obstore-0.4.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e0f0027948fa57e0ff8ac25e4e26816b1dc071d3d29b2ab4c0b2512b17922b0a", size = 5436802 }, + { url = "https://files.pythonhosted.org/packages/5b/16/f3602e908ec7ab3dcd59b985e118522589ffb8891cb37d1324afc95a1a24/obstore-0.4.0-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:e7516450d8afab2019cc6e5b9e38d15ba9f769117993a9d568746df938bea13c", size = 5567533 }, + { url = "https://files.pythonhosted.org/packages/1c/87/7564b4c5204d08259b9b279b5b38c2b3847f33d05483c3eeebd95f0005bb/obstore-0.4.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:7101a3074feedd5ffc3ba7640ca3132d149ac946431fbdbab9ca01702c5f81e4", size = 5448566 }, + { url = "https://files.pythonhosted.org/packages/24/a8/e6ec971a5fe1d0cf1694c27e113841c7d5e316e4ca0ac7b293ca3be066c9/obstore-0.4.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f5a555277970f4f43d78c79a963300d539211dc1972e7cdd57e47c4aaf14d3a5", size = 5625428 }, +] + [[package]] name = "packaging" version = "24.2"