diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 75663e5..c4558c4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -34,7 +34,7 @@ jobs: duckdb-slug: linux-amd64 - runner: macos-latest duckdb-slug: osx-universal - # https://github.com/stac-utils/stacrs/issues/1 + # https://github.com/stac-utils/rustac-py/issues/1 # - windows-latest steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/pypi.yaml b/.github/workflows/pypi.yaml index 7d76d1b..144dd55 100644 --- a/.github/workflows/pypi.yaml +++ b/.github/workflows/pypi.yaml @@ -105,7 +105,7 @@ jobs: - sdist environment: name: pypi - url: https://pypi.org/p/stacrs + url: https://pypi.org/p/rustac permissions: id-token: write contents: write diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e139da..1d81d5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,96 +10,96 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Added -- Construct `stac_api::Search` (moved from `stac_api` crate) ([#81](https://github.com/stac-utils/stacrs/pull/81)) +- Construct `stac_api::Search` (moved from `stac_api` crate) ([#81](https://github.com/stac-utils/rustac-py/pull/81)) ### Fixed -- Swallow broken pipe errors ([#73](https://github.com/stac-utils/stacrs/pull/73)) -- Clean up docs ([#78](https://github.com/stac-utils/stacrs/pull/78)) +- Swallow broken pipe errors ([#73](https://github.com/stac-utils/rustac-py/pull/73)) +- Clean up docs ([#78](https://github.com/stac-utils/rustac-py/pull/78)) ### Removed -- `migrate_href` ([#78](https://github.com/stac-utils/stacrs/pull/78)) +- `migrate_href` ([#78](https://github.com/stac-utils/rustac-py/pull/78)) ## [0.5.9] - 2025-03-03 ### Added -- `walk` and `set_self_link` for `read` ([#69](https://github.com/stac-utils/stacrs/pull/69)) +- `walk` and `set_self_link` for `read` ([#69](https://github.com/stac-utils/rustac-py/pull/69)) ## [0.5.8] - 2025-02-27 ### Fixed -- Patch DuckDB ([#64](https://github.com/stac-utils/stacrs/pull/64)) +- Patch DuckDB ([#64](https://github.com/stac-utils/rustac-py/pull/64)) ## [0.5.7] - 2025-02-26 ### Changed -- Don't include libduckdb, but rather build bundled to save size ([#61](https://github.com/stac-utils/stacrs/pull/61)) +- Don't include libduckdb, but rather build bundled to save size ([#61](https://github.com/stac-utils/rustac-py/pull/61)) ## [0.5.6] - 2025-02-26 ### Added -- Search to an arrow table ([#54](https://github.com/stac-utils/stacrs/pull/54)) -- Create a item collection from an arrow table ([#57](https://github.com/stac-utils/stacrs/pull/57)) +- Search to an arrow table ([#54](https://github.com/stac-utils/rustac-py/pull/54)) +- Create a item collection from an arrow table ([#57](https://github.com/stac-utils/rustac-py/pull/57)) ### Changed -- Include **libduckdb** in wheels ([#52](https://github.com/stac-utils/stacrs/pull/52)) +- Include **libduckdb** in wheels ([#52](https://github.com/stac-utils/rustac-py/pull/52)) ## [0.5.5] - 2025-02-20 ### Fixed -- Removed tracing subscriber to fix CLI ([#49](https://github.com/stac-utils/stacrs/pull/49)) +- Removed tracing subscriber to fix CLI ([#49](https://github.com/stac-utils/rustac-py/pull/49)) ## [0.5.4] - 2025-02-19 ### Added -- CLI ([#46](https://github.com/stac-utils/stacrs/pull/46)) -- Config args to DuckDB client ([#42](https://github.com/stac-utils/stacrs/pull/42)) +- CLI ([#46](https://github.com/stac-utils/rustac-py/pull/46)) +- Config args to DuckDB client ([#42](https://github.com/stac-utils/rustac-py/pull/42)) ## [0.5.3] - 2025-02-07 ### Changed -- Use only abi3 wheels ([#36](https://github.com/gadomski/stacrs/pull/36)) +- Use only abi3 wheels ([#36](https://github.com/gadomski/rustac-py/pull/36)) > [!WARNING] > All versions older than v0.5.3 were deleted from PyPI, but some tags still exist on this repo. -> See for more. +> See for more. ## [0.5.2] - 2025-02-07 ### Changed -- Bundle by default ([#32](https://github.com/gadomski/stacrs/pull/32)) +- Bundle by default ([#32](https://github.com/gadomski/rustac-py/pull/32)) ## [0.5.1] - 2025-02-07 ### Added -- More wheels ([#28](https://github.com/gadomski/stacrs/pull/28)) +- More wheels ([#28](https://github.com/gadomski/rustac-py/pull/28)) ## [0.5.0] - 2025-02-06 ### Changed -- `search` and `search_to` are now async ([#24](https://github.com/gadomski/stacrs/pull/24)) +- `search` and `search_to` are now async ([#24](https://github.com/gadomski/rustac-py/pull/24)) ## [0.4.0] - 2025-01-13 ### Added -- DuckDB client ([#15](https://github.com/gadomski/stacrs/pull/15)) +- DuckDB client ([#15](https://github.com/gadomski/rustac-py/pull/15)) ### Changed -- `read` and `write` are now async ([#18](https://github.com/gadomski/stacrs/pull/18)) +- `read` and `write` are now async ([#18](https://github.com/gadomski/rustac-py/pull/18)) ## [0.3.0] - 2024-11-21 @@ -109,7 +109,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Changed -- Moved out of the into +- Moved out of the into ## [0.2.2] - 2024-10-22 @@ -182,20 +182,20 @@ Non-functional release to fix releasing from Github actions. Initial release. -[Unreleased]: https://github.com/gadomski/stacrs/compare/v0.6.0-beta.0...main -[0.6.0-beta.0]: https://github.com/gadomski/stacrs/compare/v0.5.9...v0.6.0-beta.0 -[0.5.9]: https://github.com/gadomski/stacrs/compare/v0.5.8...v0.5.9 -[0.5.8]: https://github.com/gadomski/stacrs/compare/v0.5.7...v0.5.8 -[0.5.7]: https://github.com/gadomski/stacrs/compare/v0.5.6...v0.5.7 -[0.5.6]: https://github.com/gadomski/stacrs/compare/v0.5.5...v0.5.6 -[0.5.5]: https://github.com/gadomski/stacrs/compare/v0.5.4...v0.5.5 -[0.5.4]: https://github.com/gadomski/stacrs/compare/v0.5.3...v0.5.4 -[0.5.3]: https://github.com/gadomski/stacrs/compare/v0.5.2...v0.5.3 -[0.5.2]: https://github.com/gadomski/stacrs/compare/v0.5.1...v0.5.2 -[0.5.1]: https://github.com/gadomski/stacrs/compare/v0.5.0...v0.5.1 -[0.5.0]: https://github.com/gadomski/stacrs/compare/v0.4.0...v0.5.0 -[0.4.0]: https://github.com/gadomski/stacrs/compare/v0.3.0...v0.4.0 -[0.3.0]: https://github.com/gadomski/stacrs/releases/tag/v0.3.0 +[Unreleased]: https://github.com/gadomski/rustac-py/compare/v0.6.0-beta.0...main +[0.6.0-beta.0]: https://github.com/gadomski/rustac-py/compare/v0.5.9...v0.6.0-beta.0 +[0.5.9]: https://github.com/gadomski/rustac-py/compare/v0.5.8...v0.5.9 +[0.5.8]: https://github.com/gadomski/rustac-py/compare/v0.5.7...v0.5.8 +[0.5.7]: https://github.com/gadomski/rustac-py/compare/v0.5.6...v0.5.7 +[0.5.6]: https://github.com/gadomski/rustac-py/compare/v0.5.5...v0.5.6 +[0.5.5]: https://github.com/gadomski/rustac-py/compare/v0.5.4...v0.5.5 +[0.5.4]: https://github.com/gadomski/rustac-py/compare/v0.5.3...v0.5.4 +[0.5.3]: https://github.com/gadomski/rustac-py/compare/v0.5.2...v0.5.3 +[0.5.2]: https://github.com/gadomski/rustac-py/compare/v0.5.1...v0.5.2 +[0.5.1]: https://github.com/gadomski/rustac-py/compare/v0.5.0...v0.5.1 +[0.5.0]: https://github.com/gadomski/rustac-py/compare/v0.4.0...v0.5.0 +[0.4.0]: https://github.com/gadomski/rustac-py/compare/v0.3.0...v0.4.0 +[0.3.0]: https://github.com/gadomski/rustac-py/releases/tag/v0.3.0 [0.2.2]: https://github.com/stac-utils/stac-rs/compare/python-v0.2.1...python-v0.2.2 [0.2.1]: https://github.com/stac-utils/stac-rs/compare/python-v0.2.0...python-v0.2.1 [0.2.0]: https://github.com/stac-utils/stac-rs/compare/python-v0.1.3...python-v0.2.0 diff --git a/Cargo.lock b/Cargo.lock index ee7843a..39ee690 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -140,9 +140,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "approx" @@ -167,9 +167,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "arrow" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84ef243634a39fb6e9d1710737e7a5ef96c9bacabd2326859ff889bc9ef755e5" +checksum = "b5ec52ba94edeed950e4a41f75d35376df196e8cb04437f7280a5aa49f20f796" dependencies = [ "arrow-arith", "arrow-array", @@ -188,9 +188,9 @@ dependencies = [ [[package]] name = "arrow-arith" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f420c6aef51dad2e4a96ce29c0ec90ad84880bdb60b321c74c652a6be07b93f" +checksum = "8fc766fdacaf804cb10c7c70580254fcdb5d55cdfda2bc57b02baf5223a3af9e" dependencies = [ "arrow-array", "arrow-buffer", @@ -202,9 +202,9 @@ dependencies = [ [[package]] name = "arrow-array" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24bda5ff6461a4ff9739959b3d57b377f45e3f878f7be1a4f28137c0a8f339fa" +checksum = "a12fcdb3f1d03f69d3ec26ac67645a8fe3f878d77b5ebb0b15d64a116c212985" dependencies = [ "ahash 0.8.11", "arrow-buffer", @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "arrow-buffer" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6ed265c73f134a583d02c3cab5e16afab9446d8048ede8707e31f85fad58a0" +checksum = "263f4801ff1839ef53ebd06f99a56cecd1dbaf314ec893d93168e2e860e0291c" dependencies = [ "bytes", "half", @@ -230,9 +230,9 @@ dependencies = [ [[package]] name = "arrow-cast" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c648572391edcef10e5fd458db70ba27ed6f71bcaee04397d0cfb100b34f8b" +checksum = "ede6175fbc039dfc946a61c1b6d42fd682fcecf5ab5d148fbe7667705798cac9" dependencies = [ "arrow-array", "arrow-buffer", @@ -251,9 +251,9 @@ dependencies = [ [[package]] name = "arrow-csv" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a02fb265a6d8011a7d3ad1a36f25816ad0a3bb04cb8e9fe7929c165b98c0cbcd" +checksum = "1644877d8bc9a0ef022d9153dc29375c2bda244c39aec05a91d0e87ccf77995f" dependencies = [ "arrow-array", "arrow-cast", @@ -267,9 +267,9 @@ dependencies = [ [[package]] name = "arrow-data" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f2cebf504bb6a92a134a87fff98f01b14fbb3a93ecf7aef90cd0f888c5fffa4" +checksum = "61cfdd7d99b4ff618f167e548b2411e5dd2c98c0ddebedd7df433d34c20a4429" dependencies = [ "arrow-buffer", "arrow-schema", @@ -279,9 +279,9 @@ dependencies = [ [[package]] name = "arrow-ipc" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6405b287671c88846e7751f7291f717b164911474cabac6d3d8614d5aa7374" +checksum = "62ff528658b521e33905334723b795ee56b393dbe9cf76c8b1f64b648c65a60c" dependencies = [ "arrow-array", "arrow-buffer", @@ -292,9 +292,9 @@ dependencies = [ [[package]] name = "arrow-json" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5329bf9e7390cbb6b117ddd4d82e94c5362ea4cab5095697139429f36a38350c" +checksum = "0ee5b4ca98a7fb2efb9ab3309a5d1c88b5116997ff93f3147efdc1062a6158e9" dependencies = [ "arrow-array", "arrow-buffer", @@ -314,9 +314,9 @@ dependencies = [ [[package]] name = "arrow-ord" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e103c13d4b80da28339c1d7aa23dd85bd59f42158acc45d39eeb6770627909ce" +checksum = "f0a3334a743bd2a1479dbc635540617a3923b4b2f6870f37357339e6b5363c21" dependencies = [ "arrow-array", "arrow-buffer", @@ -327,9 +327,9 @@ dependencies = [ [[package]] name = "arrow-row" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "170549a11b8534f3097a0619cfe89c42812345dc998bcf81128fc700b84345b8" +checksum = "8d1d7a7291d2c5107e92140f75257a99343956871f3d3ab33a7b41532f79cb68" dependencies = [ "arrow-array", "arrow-buffer", @@ -340,18 +340,18 @@ dependencies = [ [[package]] name = "arrow-schema" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5c53775bba63f319189f366d2b86e9a8889373eb198f07d8544938fc9f8ed9a" +checksum = "39cfaf5e440be44db5413b75b72c2a87c1f8f0627117d110264048f2969b99e9" dependencies = [ "bitflags 2.9.0", ] [[package]] name = "arrow-select" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a99003b2eb562b8d9c99dfb672306f15e94b20d3734179d596895703e821dcf" +checksum = "69efcd706420e52cd44f5c4358d279801993846d1c2a8e52111853d61d55a619" dependencies = [ "ahash 0.8.11", "arrow-array", @@ -363,9 +363,9 @@ dependencies = [ [[package]] name = "arrow-string" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fdb130ee8325f4cd8262e19bb6baa3cbcef2b2573c4bee8c6fda7ea08199d7" +checksum = "a21546b337ab304a32cfc0770f671db7411787586b45b78b4593ae78e64e2b03" dependencies = [ "arrow-array", "arrow-buffer", @@ -434,9 +434,9 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.8.1" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d6fd624c75e18b3b4c6b9caf42b1afe24437daaee904069137d8bab077be8b8" +checksum = "de45108900e1f9b9242f7f2e254aa3e2c029c921c258fe9e6b4217eeebd54288" dependencies = [ "axum-core", "bytes", @@ -468,12 +468,12 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", @@ -693,9 +693,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.17" +version = "1.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362" dependencies = [ "jobserver", "libc", @@ -752,9 +752,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.34" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff" +checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04" dependencies = [ "clap_builder", "clap_derive", @@ -762,9 +762,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.34" +version = "4.5.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489" +checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5" dependencies = [ "anstream", "anstyle", @@ -869,7 +869,7 @@ dependencies = [ "geozero", "jiff", "json_dotpath", - "jsonschema", + "jsonschema 0.29.1", "lazy_static", "like", "pest", @@ -989,9 +989,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ "powerfmt", ] @@ -1020,9 +1020,9 @@ dependencies = [ [[package]] name = "duckdb" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d8c35886fbb5356fe90c8a9b69da5623d509c32bdfb6eefa7f57081eb05f69b" +checksum = "49ac283b6621e3becf8014d1efa655522794075834c72f744573debef9c9f6c8" dependencies = [ "arrow", "cast", @@ -1082,9 +1082,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -1133,9 +1133,9 @@ dependencies = [ [[package]] name = "flagset" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3ea1ec5f8307826a5b71094dd91fc04d4ae75d5709b20ad351c7fb4815c86ec" +checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" [[package]] name = "flatbuffers" @@ -1149,9 +1149,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -1471,9 +1471,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "h2" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" +checksum = "75249d144030531f8dee69fe9cea04d3edf809a017ae445e2abdff6629e86633" dependencies = [ "atomic-waker", "bytes", @@ -1490,9 +1490,9 @@ dependencies = [ [[package]] name = "half" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", @@ -1671,9 +1671,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2" dependencies = [ "bytes", "futures-channel", @@ -1681,6 +1681,7 @@ dependencies = [ "http", "http-body", "hyper", + "libc", "pin-project-lite", "socket2", "tokio", @@ -1734,9 +1735,9 @@ checksum = "155181bc97d770181cf9477da51218a19ee92a8e5be642e796661aee2b601139" [[package]] name = "iana-time-zone" -version = "0.1.62" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1897,9 +1898,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -1955,9 +1956,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.5" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c102670231191d07d37a35af3eb77f1f0dbf7a71be51a962dcd57ea607be7260" +checksum = "e5ad87c89110f55e4cd4dc2893a9790820206729eaf221555f742d540b0724a0" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -1970,9 +1971,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.5" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cdde31a9d349f1b1f51a0b3714a5940ac022976f4b49485fc04be052b183b4c" +checksum = "d076d5b64a7e2fe6f0743f02c43ca4a6725c0f904203bfe276a5b3e793103605" dependencies = [ "proc-macro2", "quote", @@ -1996,10 +1997,11 @@ dependencies = [ [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -2042,7 +2044,33 @@ dependencies = [ "num-cmp", "once_cell", "percent-encoding", - "referencing", + "referencing 0.29.1", + "regex-syntax 0.8.5", + "serde", + "serde_json", + "uuid-simd", +] + +[[package]] +name = "jsonschema" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1b46a0365a611fbf1d2143104dcf910aada96fafd295bab16c60b802bf6fa1d" +dependencies = [ + "ahash 0.8.11", + "base64", + "bytecount", + "email_address", + "fancy-regex", + "fraction", + "idna", + "itoa", + "num-cmp", + "num-traits", + "once_cell", + "percent-encoding", + "referencing 0.30.0", + "regex", "regex-syntax 0.8.5", "reqwest", "serde", @@ -2186,15 +2214,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.171" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libduckdb-sys" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddeb5c68cb108d753a03613337f4bc9bed32281123d1f7884971f060f532fb6c" +checksum = "12cac9d03484c43fefac8b2066a253c9b0b3b0cd02cbe02a9ea2312f7e382618" dependencies = [ "autocfg", "cc", @@ -2231,9 +2259,9 @@ checksum = "fc7281e4b2b1a1fae03463a7c49dd21464de50251a450f6da9715c40c7b21a70" [[package]] name = "linux-raw-sys" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe7db12097d22ec582439daf8618b8fdd1a7bef6270e9af3b1ebcd30893cf413" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "litemap" @@ -2324,9 +2352,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "miniz_oxide" -version = "0.8.5" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", ] @@ -2537,9 +2565,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2806eaa3524762875e21c3dcd057bc4b7bfa01ce4da8d46be1cd43649e1cc6b" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl-probe" @@ -2593,9 +2621,9 @@ dependencies = [ [[package]] name = "parquet" -version = "54.3.0" +version = "54.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94243778210509a5a5e9e012872127180c155d73a9cd6e2df9243d213e81e100" +checksum = "bfb15796ac6f56b429fd99e33ba133783ad75b27c36b4b5ce06f1f82cc97754e" dependencies = [ "ahash 0.8.11", "arrow-array", @@ -2701,7 +2729,7 @@ dependencies = [ [[package]] name = "pgstac" version = "0.3.0" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" dependencies = [ "serde", "serde_json", @@ -2853,9 +2881,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -2954,9 +2982,9 @@ dependencies = [ [[package]] name = "pyo3-log" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b78e4983ba15bc62833a0e0941d965bc03690163f1127864f1408db25063466" +checksum = "7079e412e909af5d6be7c04a7f29f6a2837a080410e1c529c9dee2c367383db4" dependencies = [ "arc-swap", "log", @@ -3000,9 +3028,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.3" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf763ab1c7a3aa408be466efc86efe35ed1bd3dd74173ed39d6b0d0a6f0ba148" +checksum = "a4ce8c88de324ff838700f36fb6ab86c96df0e3c4ab6ef3a9b2044465cce1369" dependencies = [ "memchr", "serde", @@ -3171,9 +3199,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ "bitflags 2.9.0", ] @@ -3212,6 +3240,20 @@ dependencies = [ "serde_json", ] +[[package]] +name = "referencing" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8eff4fa778b5c2a57e85c5f2fe3a709c52f0e60d23146e2151cbef5893f420e" +dependencies = [ + "ahash 0.8.11", + "fluent-uri", + "once_cell", + "parking_lot", + "percent-encoding", + "serde_json", +] + [[package]] name = "regex" version = "1.11.1" @@ -3389,6 +3431,47 @@ dependencies = [ "serde_json", ] +[[package]] +name = "rustac" +version = "0.5.3" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" +dependencies = [ + "anyhow", + "axum", + "clap", + "serde_json", + "stac", + "stac-api", + "stac-duckdb", + "stac-server", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "rustac" +version = "0.6.0-beta.0" +dependencies = [ + "clap", + "geoarrow", + "geojson", + "pyo3", + "pyo3-arrow", + "pyo3-async-runtimes", + "pyo3-log", + "pythonize", + "rustac 0.5.3", + "serde", + "serde_json", + "stac", + "stac-api", + "stac-duckdb", + "thiserror 2.0.12", + "tokio", + "tracing", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -3412,9 +3495,9 @@ dependencies = [ [[package]] name = "rustix" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96" +checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf" dependencies = [ "bitflags 2.9.0", "errno", @@ -3425,9 +3508,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.25" +version = "0.23.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "822ee9188ac4ec04a2f0531e55d035fb2de73f18b41a63c70c2712503b6fb13c" +checksum = "df51b5869f3a441595eac5e8ff14d486ff285f7b8c0df8770e49c3b56351f0f0" dependencies = [ "once_cell", "ring", @@ -3675,9 +3758,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "snap" @@ -3687,9 +3770,9 @@ checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "socket2" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" dependencies = [ "libc", "windows-sys 0.52.0", @@ -3726,7 +3809,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "stac" version = "0.12.0" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" dependencies = [ "arrow-array", "arrow-cast", @@ -3739,7 +3822,7 @@ dependencies = [ "geo-types", "geoarrow", "geojson", - "jsonschema", + "jsonschema 0.30.0", "log", "mime", "object_store", @@ -3757,7 +3840,7 @@ dependencies = [ [[package]] name = "stac-api" version = "0.7.1" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" dependencies = [ "async-stream", "chrono", @@ -3778,28 +3861,10 @@ dependencies = [ "url", ] -[[package]] -name = "stac-cli" -version = "0.5.3" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" -dependencies = [ - "anyhow", - "axum", - "clap", - "serde_json", - "stac", - "stac-api", - "stac-duckdb", - "stac-server", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "stac-derive" version = "0.2.0" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" dependencies = [ "quote", "syn 2.0.100", @@ -3808,7 +3873,7 @@ dependencies = [ [[package]] name = "stac-duckdb" version = "0.1.1" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" dependencies = [ "arrow", "chrono", @@ -3826,7 +3891,7 @@ dependencies = [ [[package]] name = "stac-server" version = "0.3.4" -source = "git+https://github.com/stac-utils/stac-rs?branch=main#daf381284f84aa80a736736afc7914f95619420a" +source = "git+https://github.com/stac-utils/stac-rs?branch=main#9e7bb881015fddde76581258c3d498782e669197" dependencies = [ "axum", "bb8", @@ -3850,29 +3915,6 @@ dependencies = [ "url", ] -[[package]] -name = "stacrs" -version = "0.6.0-beta.0" -dependencies = [ - "clap", - "geoarrow", - "geojson", - "pyo3", - "pyo3-arrow", - "pyo3-async-runtimes", - "pyo3-log", - "pythonize", - "serde", - "serde_json", - "stac", - "stac-api", - "stac-cli", - "stac-duckdb", - "thiserror 2.0.12", - "tokio", - "tracing", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -4126,9 +4168,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.44.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ "backtrace", "bytes", @@ -4695,11 +4737,37 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.61.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980" dependencies = [ - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings 0.4.0", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -4715,7 +4783,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ "windows-result", - "windows-strings", + "windows-strings 0.3.1", "windows-targets 0.53.0", ] @@ -4737,6 +4805,15 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-strings" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -4885,9 +4962,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36" +checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index 44480a3..c6b6181 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,11 +1,11 @@ [package] -name = "stacrs" +name = "rustac" version = "0.6.0-beta.0" edition = "2021" publish = false [lib] -name = "stacrs" +name = "rustac" crate-type = ["cdylib"] [features] @@ -31,7 +31,7 @@ stac = { features = [ stac-api = { features = [ "client", ], git = "https://github.com/stac-utils/stac-rs", branch = "main" } -stac-cli = { git = "https://github.com/stac-utils/stac-rs", features = [ +rustac = { git = "https://github.com/stac-utils/stac-rs", features = [ "pgstac", "duckdb", ], branch = "main" } diff --git a/README.md b/README.md index 8c19f66..5f09b3c 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,25 @@ -# stacrs +# rustac-py -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/stac-utils/stacrs/ci.yaml?branch=main&style=for-the-badge)](https://github.com/stac-utils/stacrs/actions/workflows/ci.yaml) -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/stac-utils/stacrs/docs.yaml?branch=main&style=for-the-badge&label=Docs)](https://stac-utils.github.io/stacrs/latest/) -[![PyPI - Version](https://img.shields.io/pypi/v/stacrs?style=for-the-badge)](https://pypi.org/project/stacrs) -[![Conda Downloads](https://img.shields.io/conda/d/conda-forge/stacrs?style=for-the-badge)](https://anaconda.org/conda-forge/stacrs) -![PyPI - License](https://img.shields.io/pypi/l/stacrs?style=for-the-badge) +[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/stac-utils/rustac-py/ci.yaml?branch=main&style=for-the-badge)](https://github.com/stac-utils/rustac-py/actions/workflows/ci.yaml) +[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/stac-utils/rustac-py/docs.yaml?branch=main&style=for-the-badge&label=Docs)](https://stac-utils.github.io/rustac-py/latest/) +[![PyPI - Version](https://img.shields.io/pypi/v/rustac-py?style=for-the-badge)](https://pypi.org/project/rustac-py) +[![Conda Downloads](https://img.shields.io/conda/d/conda-forge/rustac-py?style=for-the-badge)](https://anaconda.org/conda-forge/rustac-py) +![PyPI - License](https://img.shields.io/pypi/l/rustac-py?style=for-the-badge) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg?style=for-the-badge)](./CODE_OF_CONDUCT) A Python package for [STAC](https://stacspec.org/) using Rust under the hood. ## Why? -Q: We already have [PySTAC](https://github.com/stac-utils/pystac), so why **stacrs**? +Q: We already have [PySTAC](https://github.com/stac-utils/pystac), so why **rustac-py**? -A: **stacrs** can +A: **rustac-py** can - Read, write, and search [stac-geoparquet](https://github.com/stac-utils/stac-geoparquet) - Go to and from [arrow](https://arrow.apache.org/) tables, allowing easy interoperability with (e.g.) [GeoPandas](https://geopandas.org/en/stable/) - `async` -If you don't need those things, **stacrs** probably isn't for you — use **pystac** and its friend, [pystac-client](https://github.com/stac-utils/pystac-client). +If you don't need those things, **rustac-py** probably isn't for you — use **pystac** and its friend, [pystac-client](https://github.com/stac-utils/pystac-client). ## Usage @@ -27,27 +27,27 @@ Install via **pip**: ```shell # basic -python -m pip install stacrs +python -m pip install rustac # support arrow tables -python -m pip install 'stacrs[arrow]' +python -m pip install 'rustac[arrow]' ``` Or via **conda**: ```shell -conda install conda-forge::stacrs +conda install conda-forge::rustac ``` Then: ```python exec="on" source="above" import asyncio -import stacrs +import rustac async def main() -> None: # Search a STAC API - items = await stacrs.search( + items = await rustac.search( "https://landsatlook.usgs.gov/stac-server", collections="landsat-c2l2-sr", intersects={"type": "Point", "coordinates": [-105.119, 40.173]}, @@ -58,19 +58,19 @@ async def main() -> None: # If you installed with `pystac[arrow]`: from geopandas import GeoDataFrame - table = stacrs.to_arrow(items) + table = rustac.to_arrow(items) data_frame = GeoDataFrame.from_arrow(table) - items = stacrs.from_arrow(data_frame.to_arrow()) + items = rustac.from_arrow(data_frame.to_arrow()) # Write items to a stac-geoparquet file - await stacrs.write("/tmp/items.parquet", items) + await rustac.write("/tmp/items.parquet", items) # Read items from a stac-geoparquet file as an item collection - item_collection = await stacrs.read("/tmp/items.parquet") + item_collection = await rustac.read("/tmp/items.parquet") # Use `search_to` for better performance if you know you'll be writing the items # to a file - await stacrs.search_to( + await rustac.search_to( "/tmp/items.parquet", "https://landsatlook.usgs.gov/stac-server", collections="landsat-c2l2-sr", @@ -82,24 +82,24 @@ async def main() -> None: asyncio.run(main()) ``` -See [the documentation](https://stac-utils.github.io/stacrs) for details. -In particular, our [examples](https://stac-utils.github.io/stacrs/latest/examples/) demonstrate some of the more interesting features. +See [the documentation](https://stac-utils.github.io/rustac-py) for details. +In particular, our [examples](https://stac-utils.github.io/rustac-py/latest/examples/) demonstrate some of the more interesting features. ## CLI -**stacrs** comes with a CLI: +**rustac-py** comes with a CLI: ```bash exec="on" source="above" result="text" -stacrs -h +rustac -h ``` > [!NOTE] -> Before **stacrs** v0.5.4, the CLI was its own PyPI package named **stacrs-cli**, which is no longer needed. +> Before **rustac-py** v0.5.4, the CLI was its own PyPI package named **stacrs-cli**, which is no longer needed. ## stac-geoparquet -**stacrs** replicates much of the behavior in the [stac-geoparquet](https://github.com/stac-utils/stac-geoparquet) library, and even uses some of the same Rust dependencies. -We believe there are a couple of issues with **stac-geoparquet** that make **stacrs** a worthy replacement: +**rustac-py** replicates much of the behavior in the [stac-geoparquet](https://github.com/stac-utils/stac-geoparquet) library, and even uses some of the same Rust dependencies. +We believe there are a couple of issues with **stac-geoparquet** that make **rustac-py** a worthy replacement: - The **stac-geoparquet** repo includes Python dependencies - It doesn't have a nice one-shot API for reading and writing @@ -113,8 +113,8 @@ Get [Rust](https://rustup.rs/), [uv](https://docs.astral.sh/uv/getting-started/i Then: ```shell -git clone git@github.com:stac-utils/stacrs.git -cd stacrs +git clone git@github.com:stac-utils/rustac-py.git +cd rustac-py scripts/test ``` @@ -147,5 +147,5 @@ maturin dev --uv -F duckdb-bundled && pytest ## License -**stacrs** is dual-licensed under both the MIT license and the Apache license (Version 2.0). +**rustac-py** is dual-licensed under both the MIT license and the Apache license (Version 2.0). See [LICENSE-APACHE](./LICENSE-APACHE) and [LICENSE-MIT](./LICENSE-MIT) for details. diff --git a/docs/api/arrow.md b/docs/api/arrow.md index 48c2da7..3e0db02 100644 --- a/docs/api/arrow.md +++ b/docs/api/arrow.md @@ -7,8 +7,8 @@ description: Go to and from arrow These functions require the `arrow` extra, e.g.: ```shell -python -m pip install 'stacrs[arrow]' +python -m pip install 'rustac[arrow]' ``` -::: stacrs.to_arrow -::: stacrs.from_arrow +::: rustac.to_arrow +::: rustac.from_arrow diff --git a/docs/api/duckdb.md b/docs/api/duckdb.md index a0e1c4f..c8c9e2b 100644 --- a/docs/api/duckdb.md +++ b/docs/api/duckdb.md @@ -4,4 +4,4 @@ description: Query stac-geoparquet with DuckDB # DuckDB -::: stacrs.DuckdbClient +::: rustac.DuckdbClient diff --git a/docs/api/index.md b/docs/api/index.md index fc8189b..380922c 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -1,14 +1,10 @@ ---- -description: The stacrs Python API ---- +# API -# Python API - -API documentation for the **stacrs** Python package. +API documentation for the **rustac** Python package. ## Format -Several functions, including [stacrs.write][], take a `format` argument. +Several functions, including [rustac.write][], take a `format` argument. Valid values are: - `json` or `geojson`: compact (no whitespace) JSON diff --git a/docs/api/migrate.md b/docs/api/migrate.md index 43dab4b..974e984 100644 --- a/docs/api/migrate.md +++ b/docs/api/migrate.md @@ -4,4 +4,4 @@ description: Migrate STAC to another version # Migration -::: stacrs.migrate +::: rustac.migrate diff --git a/docs/api/read.md b/docs/api/read.md index 6dccf09..a3e4a63 100644 --- a/docs/api/read.md +++ b/docs/api/read.md @@ -4,4 +4,4 @@ description: Read STAC from the local filesystem or blob storage # Read -::: stacrs.read +::: rustac.read diff --git a/docs/api/search.md b/docs/api/search.md index 7f5fdf4..ea16046 100644 --- a/docs/api/search.md +++ b/docs/api/search.md @@ -4,5 +4,5 @@ description: Search a STAC API # Search -::: stacrs.search -::: stacrs.search_to +::: rustac.search +::: rustac.search_to diff --git a/docs/api/version.md b/docs/api/version.md index b865cc6..5453ae0 100644 --- a/docs/api/version.md +++ b/docs/api/version.md @@ -4,4 +4,4 @@ description: Return this package's version or the version of an upstream # Version -::: stacrs.version +::: rustac.version diff --git a/docs/api/walk.md b/docs/api/walk.md index 1410fcd..51ef0a1 100644 --- a/docs/api/walk.md +++ b/docs/api/walk.md @@ -1,3 +1,3 @@ # Walk -::: stacrs.walk +::: rustac.walk diff --git a/docs/api/write.md b/docs/api/write.md index 44dd89a..0ec8194 100644 --- a/docs/api/write.md +++ b/docs/api/write.md @@ -4,4 +4,4 @@ description: Write STAC to the filesystem or to blob storage # Write -::: stacrs.write +::: rustac.write diff --git a/docs/examples/README.md b/docs/examples/README.md index c07677e..079a9ca 100644 --- a/docs/examples/README.md +++ b/docs/examples/README.md @@ -1,3 +1,3 @@ # Examples -Examples of using **stacrs**. +Examples of using **rustac**. diff --git a/docs/examples/example_read.py b/docs/examples/example_read.py index 2ffae85..238bb49 100644 --- a/docs/examples/example_read.py +++ b/docs/examples/example_read.py @@ -5,9 +5,9 @@ # %% # Reading is done via a top-level async function. -import stacrs +import rustac -items = await stacrs.read("https://github.com/stac-utils/stacrs/raw/refs/heads/main/data/100-sentinel-2-items.parquet") +items = await rustac.read("https://github.com/stac-utils/rustac-py/raw/refs/heads/main/data/100-sentinel-2-items.parquet") items # %% diff --git a/docs/examples/example_search.py b/docs/examples/example_search.py index a8f3f72..79a9205 100644 --- a/docs/examples/example_search.py +++ b/docs/examples/example_search.py @@ -4,13 +4,13 @@ """ # %% -# Search a STAC API with `stacrs.search`: +# Search a STAC API with `rustac.search`: import contextily import pandas -import stacrs +import rustac from geopandas import GeoDataFrame -items = await stacrs.search( +items = await rustac.search( "https://stac.eoapi.dev", collections="MAXAR_Marshall_Fire_21_Update" ) @@ -23,7 +23,7 @@ # %% # Search [stac-geoparquet](https://github.com/stac-utils/stac-geoparquet/blob/main/spec/stac-geoparquet-spec.md) with [DuckDB](https://duckdb.org/), no servers required! -items = await stacrs.search( +items = await rustac.search( "../../data/100-sentinel-2-items.parquet", datetime="2024-12-01T00:00:00Z/..", ) @@ -33,11 +33,11 @@ # %% # If you know you're going to a [geopandas.GeoDataFrame][] (or something else that speaks -# arrow), you can use the `arrow` optional dependency for **stacrs** (`pip -# install 'stacrs[arrow]'`) and search directly to arrow, which can be more +# arrow), you can use the `arrow` optional dependency for **rustac** (`pip +# install 'rustac[arrow]'`) and search directly to arrow, which can be more # efficient than going through JSON dictionaries: -from stacrs import DuckdbClient +from rustac import DuckdbClient client = DuckdbClient() table = client.search_to_arrow( diff --git a/mkdocs.yml b/mkdocs.yml index 48ae39c..8e7afdc 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,7 +1,7 @@ -site_name: stacrs +site_name: rustac-py site_description: A small no-dependency Python package for STAC, using Rust under the hood. -site_url: https://gadom.ski/stacrs -repo_url: https://github.com/stac-utils/stacrs +site_url: https://stac-utils.github.io/rustac-py +repo_url: https://github.com/stac-utils/rustac-py theme: name: material logo: img/stac-ferris.png diff --git a/pyproject.toml b/pyproject.toml index e221c61..f9bffbd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] -name = "stacrs" +name = "rustac" description = "A no-dependency Python package for STAC, using Rust under the hood." readme = "README.md" authors = [{ name = "Pete Gadomski", email = "pete.gadomski@gmail.com" }] @@ -27,15 +27,15 @@ dependencies = [] arrow = ["arro3-core>=0.4.5"] [project.scripts] -stacrs = "stacrs:main" +rustac = "rustac:main" [project.urls] -Repository = "https://github.com/stac-utils/stacrs" -Documentation = "https://stac-utils.github.io/stacrs" -Issues = "https://github.com/stac-utils/stacrs/issues" +Repository = "https://github.com/stac-utils/rustac-py" +Documentation = "https://stac-utils.github.io/rustac-py" +Issues = "https://github.com/stac-utils/rustac-py/issues" [tool.mypy] -files = "**/*.py" +files = "tests/**/*.py,docs/examples/**/*.py" [[tool.mypy.overrides]] module = ["pyarrow.*", "geopandas.*"] diff --git a/stacrs.pyi b/rustac.pyi similarity index 96% rename from stacrs.pyi rename to rustac.pyi index c140168..5b8bbd0 100644 --- a/stacrs.pyi +++ b/rustac.pyi @@ -2,7 +2,7 @@ from typing import Any, AsyncIterator, Literal, Optional, Tuple import arro3.core -class StacrsError(Exception): +class RustacError(Exception): """A package-specific exception.""" class DuckdbClient: @@ -105,8 +105,8 @@ class DuckdbClient: """Search a stac-geoparquet file with duckdb, returning an arrow table suitable for loading into (e.g.) GeoPandas. - **stacrs** must be installed with the `arrow` extra, e.g. `python -m pip - *install 'stacrs[arrow]'. + **rustac** must be installed with the `arrow` extra, e.g. `python -m pip + *install 'rustac[arrow]'. Because DuckDB has arrow as a core output format, this can be more performant than going through a JSON dictionary. @@ -184,7 +184,7 @@ def migrate(value: dict[str, Any], version: Optional[str] = None) -> dict[str, A Examples: >>> with open("examples/simple-item.json") as f: >>> item = json.load(f) - >>> item = stacrs.migrate(item, "1.1.0-beta.1") + >>> item = rustac.migrate(item, "1.1.0-beta.1") >>> assert item["stac_version"] == "1.1.0-beta.1" """ @@ -210,7 +210,7 @@ async def read( The STAC value Examples: - >>> item = await stacrs.read("item.json") + >>> item = await rustac.read("item.json") """ def from_arrow( @@ -219,7 +219,7 @@ def from_arrow( """ Converts an [arro3.core.Table][] to a STAC item collection. - Requires **stacrs** to be installed with the `arrow` extra. + Requires **rustac** to be installed with the `arrow` extra. Args: table: The table @@ -234,7 +234,7 @@ def to_arrow( """ Converts items to an [arro3.core.Table][]. - Requires **stacrs** to be installed with the `arrow` extra. + Requires **rustac** to be installed with the `arrow` extra. Args: items: Either a list of items or a item collection @@ -302,7 +302,7 @@ async def search( A list of the returned STAC items. Examples: - >>> items = await stacrs.search( + >>> items = await rustac.search( ... "https://landsatlook.usgs.gov/stac-server", ... collections=["landsat-c2l2-sr"], ... intersects={"type": "Point", "coordinates": [-105.119, 40.173]}, @@ -376,7 +376,7 @@ async def search_to( The number of items written Examples: - >>> count = await stacrs.search_to("out.parquet", + >>> count = await rustac.search_to("out.parquet", ... "https://landsatlook.usgs.gov/stac-server", ... collections=["landsat-c2l2-sr"], ... intersects={"type": "Point", "coordinates": [-105.119, 40.173]}, @@ -397,7 +397,7 @@ def walk( A three-tuple of the container, its children, and its items. Examples: - >>> async for container, children, items in stacrs.walk(catalog): + >>> async for container, children, items in rustac.walk(catalog): ... ... """ @@ -427,7 +427,7 @@ async def write( Examples: >>> with open("items.json") as f: ... items = json.load(f) - >>> await stacrs.write("items.parquet", items) + >>> await rustac.write("items.parquet", items) """ def version( @@ -448,8 +448,8 @@ def version( The version, or None if the name is not recognized as an upstream. Examples: - >>> stacrs.version() + >>> rustac.version() "0.2.0" - >>> stacrs.version("duckdb") + >>> rustac.version("duckdb") "1.0.0" """ diff --git a/scripts/test b/scripts/test index 144a664..d5d4d2a 100755 --- a/scripts/test +++ b/scripts/test @@ -4,4 +4,4 @@ set -e uv run maturin dev --uv -E arrow uv run pytest "$@" -uv run stacrs translate spec-examples/v1.1.0/simple-item.json /dev/null +uv run rustac translate spec-examples/v1.1.0/simple-item.json /dev/null diff --git a/src/cli.rs b/src/cli.rs index 17f70b5..e530170 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -4,7 +4,7 @@ use pyo3::{ types::{PyAnyMethods, PyDict}, PyResult, Python, }; -use stac_cli::Stacrs; +use rustac::Rustac; use tracing::Level; #[pyfunction] @@ -13,7 +13,7 @@ pub fn main(py: Python<'_>) -> PyResult { let _ = signal .getattr("signal")? .call1((signal.getattr("SIGINT")?, signal.getattr("SIG_DFL")?))?; - let args = Stacrs::parse_from(std::env::args_os().skip(1)); + let args = Rustac::parse_from(std::env::args_os().skip(1)); let logging = py.import("logging")?; let kwargs = PyDict::new(py); kwargs.set_item( @@ -33,7 +33,7 @@ pub fn main(py: Python<'_>) -> PyResult { match args.run(false).await { Ok(()) => 0, Err(err) => { - // https://github.com/stac-utils/stacrs/issues/72 + // https://github.com/stac-utils/rustac-py/issues/72 // // Don't know why this happens through the Python CLI // entry but not through the Rust one 🤷 diff --git a/src/error.rs b/src/error.rs index 83fe3c2..2fbe536 100644 --- a/src/error.rs +++ b/src/error.rs @@ -5,7 +5,7 @@ use pyo3::{ }; use thiserror::Error; -create_exception!(stacrs, StacrsError, PyException); +create_exception!(rustac, RustacError, PyException); #[derive(Debug, Error)] pub enum Error { @@ -42,7 +42,7 @@ impl From for PyErr { match err { Error::Py(err) => err, Error::Io(err) => PyIOError::new_err(err.to_string()), - _ => StacrsError::new_err(err.to_string()), + _ => RustacError::new_err(err.to_string()), } } } diff --git a/src/lib.rs b/src/lib.rs index 0bccc93..af1b973 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,10 +17,10 @@ use pyo3::prelude::*; type Result = std::result::Result; #[pymodule] -fn stacrs(py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> { +fn rustac(py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> { pyo3_log::init(); - m.add("StacrsError", py.get_type::())?; + m.add("RustacError", py.get_type::())?; m.add_class::()?; diff --git a/tests/test_arrow.py b/tests/test_arrow.py index 611e52b..3ecbed3 100644 --- a/tests/test_arrow.py +++ b/tests/test_arrow.py @@ -1,13 +1,13 @@ from typing import Any import pytest -import stacrs +import rustac from geopandas import GeoDataFrame pytest.importorskip("arro3.core") def test_to_arrow(item: dict[str, Any]) -> None: - table = stacrs.to_arrow([item]) + table = rustac.to_arrow([item]) data_frame = GeoDataFrame.from_arrow(table) assert len(data_frame) == 1 diff --git a/tests/test_duckdb.py b/tests/test_duckdb.py index 6c9239a..29aed6e 100644 --- a/tests/test_duckdb.py +++ b/tests/test_duckdb.py @@ -1,7 +1,7 @@ import pytest -import stacrs +import rustac from geopandas import GeoDataFrame -from stacrs import DuckdbClient +from rustac import DuckdbClient @pytest.fixture @@ -47,5 +47,5 @@ def test_search_to_arrow(client: DuckdbClient) -> None: data_frame = GeoDataFrame.from_arrow(table) assert len(data_frame) == 100 data_frame_table = data_frame.to_arrow() - item_collection = stacrs.from_arrow(data_frame_table) + item_collection = rustac.from_arrow(data_frame_table) assert len(item_collection["features"]) == 100 diff --git a/tests/test_migrate.py b/tests/test_migrate.py index 9793d14..c22e5dd 100644 --- a/tests/test_migrate.py +++ b/tests/test_migrate.py @@ -1,8 +1,8 @@ from typing import Any -import stacrs +import rustac def test_migrate(item: dict[str, Any]) -> None: - item = stacrs.migrate(item, version="1.1.0") + item = rustac.migrate(item, version="1.1.0") assert item["stac_version"] == "1.1.0" diff --git a/tests/test_read.py b/tests/test_read.py index 9cf7dd1..baf8dca 100644 --- a/tests/test_read.py +++ b/tests/test_read.py @@ -1,9 +1,9 @@ from pathlib import Path -import stacrs +import rustac from pystac import Item async def test_read(examples: Path) -> None: - item = Item.from_dict(await stacrs.read(str(examples / "simple-item.json"))) + item = Item.from_dict(await rustac.read(str(examples / "simple-item.json"))) item.validate() diff --git a/tests/test_search.py b/tests/test_search.py index f31c8f9..db31638 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -2,12 +2,12 @@ from pathlib import Path import pyarrow.parquet +import rustac import stac_geoparquet.arrow -import stacrs async def test_search() -> None: - items = await stacrs.search( + items = await rustac.search( "https://landsatlook.usgs.gov/stac-server", collections="landsat-c2l2-sr", intersects={"type": "Point", "coordinates": [-105.119, 40.173]}, @@ -17,7 +17,7 @@ async def test_search() -> None: async def test_search_to(tmp_path: Path) -> None: - await stacrs.search_to( + await rustac.search_to( str(tmp_path / "out.json"), "https://landsatlook.usgs.gov/stac-server", collections="landsat-c2l2-sr", @@ -30,7 +30,7 @@ async def test_search_to(tmp_path: Path) -> None: async def test_search_to_geoparquet(tmp_path: Path) -> None: - count = await stacrs.search_to( + count = await rustac.search_to( str(tmp_path / "out.parquet"), "https://landsatlook.usgs.gov/stac-server", collections="landsat-c2l2-sr", @@ -44,12 +44,12 @@ async def test_search_to_geoparquet(tmp_path: Path) -> None: async def test_search_geoparquet(data: Path) -> None: - items = await stacrs.search(str(data / "extended-item.parquet")) + items = await rustac.search(str(data / "extended-item.parquet")) assert len(items) == 1 async def test_sortby_list_of_dict() -> None: - items = await stacrs.search( + items = await rustac.search( "https://landsatlook.usgs.gov/stac-server", collections="landsat-c2l2-sr", intersects={"type": "Point", "coordinates": [-105.119, 40.173]}, diff --git a/tests/test_version.py b/tests/test_version.py index 613eb2c..9b81804 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -1,8 +1,8 @@ -import stacrs +import rustac def test_version() -> None: - assert stacrs.version() is not None - assert stacrs.version("stac") is not None - assert stacrs.version("stac-api") is not None - assert stacrs.version("stac-duckdb") is not None + assert rustac.version() is not None + assert rustac.version("stac") is not None + assert rustac.version("stac-api") is not None + assert rustac.version("stac-duckdb") is not None diff --git a/tests/test_walk.py b/tests/test_walk.py index efbe7e6..e1e9696 100644 --- a/tests/test_walk.py +++ b/tests/test_walk.py @@ -1,13 +1,13 @@ from pathlib import Path -import stacrs +import rustac async def test_walk(examples: Path) -> None: all_children = [] all_items = [] - catalog = await stacrs.read(str(examples / "catalog.json")) - async for _, children, items in stacrs.walk(catalog): + catalog = await rustac.read(str(examples / "catalog.json")) + async for _, children, items in rustac.walk(catalog): all_children.extend(children) all_items.extend(items) diff --git a/tests/test_write.py b/tests/test_write.py index c14c27a..465cc06 100644 --- a/tests/test_write.py +++ b/tests/test_write.py @@ -2,13 +2,13 @@ from typing import Any import pyarrow.parquet +import rustac import stac_geoparquet -import stacrs async def test_write(item: dict[str, Any], tmp_path: Path) -> None: path = str(tmp_path / "out.parquet") - await stacrs.write(path, [item]) + await rustac.write(path, [item]) table = pyarrow.parquet.read_table(path) items = list(stac_geoparquet.arrow.stac_table_to_items(table)) assert len(items) == 1 @@ -16,6 +16,6 @@ async def test_write(item: dict[str, Any], tmp_path: Path) -> None: async def test_write_compressed(item: dict[str, Any], tmp_path: Path) -> None: path = str(tmp_path / "out.parquet") - await stacrs.write(path, [item]) + await rustac.write(path, [item]) metadata = pyarrow.parquet.read_metadata(path) assert metadata.row_group(0).column(0).compression == "SNAPPY" diff --git a/uv.lock b/uv.lock index a541ac2..d3a9fa3 100644 --- a/uv.lock +++ b/uv.lock @@ -2302,6 +2302,71 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6e/98/de77a972b2e9ded804dea5d4e6fbfa093d99e81092602567787ea87979af/ruff-0.9.8-py3-none-win_arm64.whl", hash = "sha256:e459a4fc4150fcc60da26c59a6a4b70878c60a99df865a71cf6f958dc68c419a", size = 10435420 }, ] +[[package]] +name = "rustac" +source = { editable = "." } + +[package.optional-dependencies] +arrow = [ + { name = "arro3-core" }, +] + +[package.dev-dependencies] +dev = [ + { name = "geopandas" }, + { name = "maturin" }, + { name = "mypy" }, + { name = "pyarrow" }, + { name = "pystac", extra = ["validation"] }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "ruff" }, + { name = "stac-geoparquet" }, +] +docs = [ + { name = "arro3-core" }, + { name = "contextily" }, + { name = "humanize" }, + { name = "ipykernel" }, + { name = "jinja2" }, + { name = "markdown-exec" }, + { name = "mike" }, + { name = "mkdocs-gallery" }, + { name = "mkdocs-material", extra = ["imaging"] }, + { name = "mkdocstrings", extra = ["python"] }, + { name = "pystac-client" }, +] + +[package.metadata] +requires-dist = [{ name = "arro3-core", marker = "extra == 'arrow'", specifier = ">=0.4.5" }] +provides-extras = ["arrow"] + +[package.metadata.requires-dev] +dev = [ + { name = "geopandas", specifier = ">=1.0.1" }, + { name = "maturin", specifier = ">=1.7.4" }, + { name = "mypy", specifier = ">=1.11.2" }, + { name = "pyarrow", specifier = ">=19.0.1" }, + { name = "pystac", extras = ["validation"], specifier = ">=1.11.0" }, + { name = "pytest", specifier = ">=8.3.3" }, + { name = "pytest-asyncio", specifier = ">=0.25.1" }, + { name = "ruff", specifier = ">=0.6.9" }, + { name = "stac-geoparquet", specifier = ">=0.6.0" }, +] +docs = [ + { name = "arro3-core", specifier = ">=0.4.5" }, + { name = "contextily", specifier = ">=1.6.2" }, + { name = "humanize", specifier = ">=4.12.1" }, + { name = "ipykernel", specifier = ">=6.29.5" }, + { name = "jinja2", specifier = ">=3.1.4" }, + { name = "markdown-exec", specifier = ">=1.10.1" }, + { name = "mike", specifier = ">=2.1.3" }, + { name = "mkdocs-gallery", specifier = ">=0.10.4" }, + { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.5.45" }, + { name = "mkdocstrings", extras = ["python"], specifier = ">=0.27.0" }, + { name = "pystac-client", specifier = ">=0.8.5" }, +] + [[package]] name = "shapely" version = "2.0.7" @@ -2382,69 +2447,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, ] -[[package]] -name = "stacrs" -source = { editable = "." } - -[package.optional-dependencies] -arrow = [ - { name = "arro3-core" }, -] - -[package.dev-dependencies] -dev = [ - { name = "geopandas" }, - { name = "maturin" }, - { name = "mypy" }, - { name = "pyarrow" }, - { name = "pystac", extra = ["validation"] }, - { name = "pytest" }, - { name = "pytest-asyncio" }, - { name = "ruff" }, - { name = "stac-geoparquet" }, -] -docs = [ - { name = "contextily" }, - { name = "humanize" }, - { name = "ipykernel" }, - { name = "jinja2" }, - { name = "markdown-exec" }, - { name = "mike" }, - { name = "mkdocs-gallery" }, - { name = "mkdocs-material", extra = ["imaging"] }, - { name = "mkdocstrings", extra = ["python"] }, - { name = "pystac-client" }, -] - -[package.metadata] -requires-dist = [{ name = "arro3-core", marker = "extra == 'arrow'", specifier = ">=0.4.5" }] -provides-extras = ["arrow"] - -[package.metadata.requires-dev] -dev = [ - { name = "geopandas", specifier = ">=1.0.1" }, - { name = "maturin", specifier = ">=1.7.4" }, - { name = "mypy", specifier = ">=1.11.2" }, - { name = "pyarrow", specifier = ">=19.0.1" }, - { name = "pystac", extras = ["validation"], specifier = ">=1.11.0" }, - { name = "pytest", specifier = ">=8.3.3" }, - { name = "pytest-asyncio", specifier = ">=0.25.1" }, - { name = "ruff", specifier = ">=0.6.9" }, - { name = "stac-geoparquet", specifier = ">=0.6.0" }, -] -docs = [ - { name = "contextily", specifier = ">=1.6.2" }, - { name = "humanize", specifier = ">=4.12.1" }, - { name = "ipykernel", specifier = ">=6.29.5" }, - { name = "jinja2", specifier = ">=3.1.4" }, - { name = "markdown-exec", specifier = ">=1.10.1" }, - { name = "mike", specifier = ">=2.1.3" }, - { name = "mkdocs-gallery", specifier = ">=0.10.4" }, - { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.5.45" }, - { name = "mkdocstrings", extras = ["python"], specifier = ">=0.27.0" }, - { name = "pystac-client", specifier = ">=0.8.5" }, -] - [[package]] name = "tinycss2" version = "1.4.0"