- docs: Add devseed favicon by @kylebarron in #641
- ci: Use trusted publishing by @kylebarron in #642
- docs: Fix rendering of
PutModedocstring by @kylebarron in #645 - ci: add Dependabot for GitHub Actions version updates by @lhoupert in #647
- feat: Fsspec: Convert async methods that open sync file handles to use LocalStore by @matteomorlack in #656
- ci: pin gha to sha commit by @lhoupert in #659
- ci: Use github app token for conventional commit labeling by @kylebarron in #662
- fix(fsspec): _info() should honor self.dircache by @fvaleye in #663
- feat(buffered): deprecate ReadableFile.meta and AsyncReadableFile.meta by @fvaleye in #667
- @lhoupert made their first contribution in #647
- @dependabot[bot] made their first contribution in #652
- @matteomorlack made their first contribution in #656
- @fvaleye made their first contribution in #663
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.9.2...py-v0.9.3
- ci: Run tests on 3.13, 3.14, 3.14t by @kylebarron in #637
- feat: Add Python 3.13t and 3.14t builds / wheels by @DisturbedOcean in #619
- feat: Bump upstream
object_storeversion by @kylebarron in #636- This should reduce contention on the credential cache for highly-concurrent usage. See apache/arrow-rs-object-store#541, some initial discussion in apache/arrow-rs-object-store#542, and fix in apache/arrow-rs-object-store#648.
- fix: Fix pytest warning about
@pytest.mark.asyncioon non-async function by @kylebarron in #638
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.9.1...py-v0.9.2
- fix: Include prefix in
delete_stream#629
- chore!: Deprecate support for python 3.9 by @kylebarron in #609
- fix: Remove TypeVar constraints on arro3-core to fix list typing when arro3-core not installed by @kylebarron in #578
- docs: Update cookbook.md - unmatched quotes by @mdsumner in #587
- fix: Prevent early EOF error in reader.read by @nvictus in #593
- feat: Allow S3 HTTP URLs without region by @kylebarron in #590
- feat: upgrade object store 0.13.x by @alukach in #600
- ci: Make abi3 wheels for mainline Python 3.11+ by @kylebarron in #623
- feat: Update docs, examples, tests to use method-based API by @kylebarron in #625
- @nvictus made their first contribution in #593
- @alukach made their first contribution in #600
- @DisturbedOcean made their first contribution in #620
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.8.2...py-v0.9.0
- Added sdist and wheels for Python 3.14 (except Windows) @kylebarron in #561 and #563
- test: Set up minio-based testing, replace moto by @kylebarron in #553
- chore: Bump ruff to 0.13 by @kylebarron in #562
- docs: Use dictionary syntax for list properties by @mdsumner in #558
- @mdsumner made their first contribution in #558
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.8.1...py-v0.8.2
- fix: Fix passing down
application_credentialsto GCSStore by @kylebarron in #541 - fix: earthdata token refresh when not redirected by @chuckwondo in #539
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.8.0...py-v0.8.1
- Breaking: Don't double percent-encode paths by @kylebarron in #524
- This changes the internals from using
Path"encoding" toPath"parsing". This avoids issues where paths could be unintentionally double-encoded. But this means that the user must ensure that paths are valid.
- This changes the internals from using
- fix: Only SHA256 is supported for S3 checksum algorithm by @kylebarron in #527
- fix: Fix conversion from python string to Rust Attribute #520
- chore: Bump arrow to 56
- feat(fsspec):
FsspecStore.modified()by @keen85 in #517
- @keen85 made their first contribution in #517
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.7.1...py-v0.7.2
- chore: Bump object_store to 0.12.3 by @kylebarron in #501. From upstream changelog:
- Retry on 429s and equivalents (apache/arrow-rs-object-store#309)
- Support
container@account.dfs.core.windows.net/pathURL style forazprotocol (apache/arrow-rs-object-store#285)
- docs: Add Cloudflare R2 example by @kylebarron in #504
- docs: Improve documentation about URL path handling in
from_urlclass methods by @kylebarron in #512 - docs: Clarify that
return_arrowis only a performance optimization by @kylebarron in #513
- @pjonsson made their first contribution in #505
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.7.0...py-v0.7.1
- Support anonymous GCS connections by @kylebarron in #404
- Support default headers in client options by @kylebarron in #427
- Validate that obstore implements the obspec API by @kylebarron in #461
- Allow passing credential providers in to fsspec wrapper by @kylebarron in #396
- feat: Improve NASA Earthdata credential providers by @chuckwondo in #472
- feat: Deprecate custom NotFoundError in favor of built-in FileNotFoundError by @kylebarron in #487
obstore.auth.AzureCredentialProvider(andobstore.auth.AzureAsyncCredentialProvider) removed some attributes that were previously accidentally public. Also,scopesandtenant_idparameters in the__init__of those two classes are now keyword-only parameters. by @kylebarron in #442
- Remove
@staticmethodfrom credential provider type annotations by @kylebarron in #446 - Enable accessing
meta,range, andattributesafter readingGetResultpayload by @kylebarron in #440 - Ensure we always release the GIL before calling
tokio::Runtime::block_onby @kylebarron in #451 - fix: AzureStore creation by HTTPS url by @kylebarron in #481
- docs: Add Zarr example to docs by @kylebarron in #468
- docs: stream-zip example by @kylebarron in #470
- fix: docs for json.loads(bytes) by @gadomski in #432
- Include
object_storeversion and source in Python dist by @kylebarron in #408
- @emmanuel-ferdman made their first contribution in #410
- @gadomski made their first contribution in #432
- @chuckwondo made their first contribution in #454
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.6.0...py-v0.7.0
- Planetary computer credential provider by @kylebarron in #379
No breaking changes.
-
In the
AzureStoreconstructor, thecontainerpositional argument was renamed tocontainer_nameto match thecontainer_namekey inAzureConfig. by @kylebarron in #380This is a breaking change if you had been calling
AzureStore(container="my container name").This is not breaking if you had been using it as a positional argument
AzureStore("my container name")or if you had already been usingAzureStore(container_name="my container name").The idea here is that we want one and only one argument name for each underlying config parameter. Most of these breaking changes took place in 0.5.0, but this was overlooked.
- Fix import errors on Python 3.9:
- Define
__all__to fix type checking import paths #389
- Fix chunk_size typo by @kylebarron in #377
- Docs: Make integrations dropdown by @kylebarron in #382
- Docs: Use source order in credential provider docs by @kylebarron in #383
- Add typing extensions as runtime dependency by @kylebarron in #384
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.5.1...py-v0.6.0
- Fix import errors for Python 3.9 and 3.10. Update CI. by @kylebarron in #372
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.5.0...py-v0.5.1
- Class methods wrapper. Instead of calling
obstore.get(store), you can now callstore.get()directly. by @kylebarron in #331 - User-supplied credential callback by @kylebarron in #234
- Add Azure credential providers by @daviewales in #343
- Fsspec updates:
- Enable pickling Bytes by @kylebarron in #295
- Add AWS literal type hints by @kylebarron in #301
- pyo3-bytes slicing by @jessekrubin in #249
No breaking changes.
- Removed
S3Store.from_sessionandS3Store._from_native. Use credential providers instead. - Reduce the config variations supported for input. I.e. we previously allowed
region,aws_region,REGIONorAWS_REGIONas a config parameter toS3Store, which could make it confusing. We now only support a single config input value for each underlying concept. #323
- Rename
AsyncFsspecStoretoFsspecStoreby @kylebarron in #297
- Validate input for range request by @kylebarron in #255
- Update performance numbers by @kylebarron in #307
- Document type-only constructs by @kylebarron in #309, #311
- Add import warning admonition on ObjectStore type by @kylebarron in
- Update etag conditional put docs by @kylebarron in #310
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.4.0...py-v0.5.0
-
Support for pickling & always manage store prefix by @kylebarron in #185, #239, #223
-
Add top-level
obstore.store.from_urlfunction, which delegates to each store'sfrom_urlconstructor by @kylebarron in #179, #201 -
Add option to return Arrow from
list_with_delimiterby @kylebarron in #238, #244 -
(Provisional) Enhanced loading of s3 credentials using
aws-configcrate by @kylebarron in #203 -
Access config values out from stores by @kylebarron in #210
-
LocalStore updates:
-
File-like object updates:
-
Merge
configandkwargsand validate that no configuration parameters have been passed multiple times. (#180, #182, #218) -
Add
__repr__toBytesclass by @jessekrubin in #173
get_range,get_range_async,get_ranges, andget_ranges_asyncnow require named parameters forstart,end, andlengthto make the semantics of the range request fully explicit. by @kylebarron in #156- Previously, individual stores did not manage a prefix path within the remote resource and
PrefixStorewas used to enable this. As of 0.4.0,PrefixStorewas removed and all stores manage an optional mount prefix natively. obstore.openhas been renamed toobstore.open_reader.- The
from_envconstructor has been removed fromS3Store,GCSStore, andAzureStore. Now all constructors will read from environment variables. Use__init__orfrom_urlinstead. #189 obstore.exceptions.ObstoreErrorrenamed toobstore.exceptions.BaseError#200
- Fix pylance finding exceptions module by @kylebarron in #183
- Allow passing in partial retry/backoff config by @kylebarron in #205
- Fix returning None from async functions by @kylebarron in #245
- Fix LocalStore range request past end of file, by @kylebarron in #230
- Update wording for fsspec docstring by @kylebarron in #195
- Add documentation about AWS region by @kylebarron in #213
- Add developer documentation for functional API choice by @kylebarron in #215
- Add
tqdmprogress bar example by @kylebarron in #237 - Add contributor, performance, integrations docs by @kylebarron in #227
- Add minio example by @kylebarron in #241
- Use manylinux 2_24 for aarch64 linux wheels by @kylebarron in #225
- @vincentsarago made their first contribution in #168
- @jessekrubin made their first contribution in #173
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.3.0...py-v0.4.0
- Streaming uploads.
obstore.putnow supports iterable input, andobstore.put_asyncnow supports async iterable input. This means you can pass the output ofobstore.get_asyncdirectly intoobstore.put_async. by @kylebarron in #54 - Allow passing config options directly as keyword arguments. Previously, you had to pass all options as a
dictinto theconfigparameter. Now you can pass the elements directly to the store constructor. by @kylebarron in #144 - Readable file-like objects. Open a readable file-like object with
obstore.openandobstore.open_async. by @kylebarron in #33 - Fsspec integration by @martindurant in #63
- Prefix store by @kylebarron in #117
- Python 3.13 wheels by @kylebarron in #95
- Support python timedelta objects as duration config values by @kylebarron in #146
- Add class constructors for store builders. Each store now has an
__init__method, for easier construction. by @kylebarron in #141
get_range,get_range_async,get_ranges, andget_ranges_asyncnow use start/end instead of offset/length. This is for consistency with therangeoption ofobstore.get. by @kylebarron in #71
- Return
BytesfromGetResult.bytes()by @kylebarron in #134
- FastAPI/Starlette example by @kylebarron in #145
- Add conda installation doc to README by @kylebarron in #78
- Document suggested lifecycle rules for aborted multipart uploads by @kylebarron in #139
- Add type hint and documentation for requester pays by @kylebarron in #131
- Add note that S3Store can be constructed without boto3 by @kylebarron in #108
- HTTP Store usage example by @kylebarron in #142
- Improved docs for from_url by @kylebarron in #138
- Implement read_all for async iterable by @kylebarron in #140
- @willemarcel made their first contribution in #64
- @martindurant made their first contribution in #63
- @norlandrhagen made their first contribution in #107
- @gruebel made their first contribution in #115
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.2.0...py-v0.3.0
- Streaming list results.
listnow returns an async or sync generator. by @kylebarron in #35 - Optionally return list result as arrow. The
return_arrowkeyword argument returns chunks fromlistas Arrow RecordBatches, which is faster than materializing Python dicts/lists. by @kylebarron in #38 - Return buffer protocol object from
get_rangeandget_ranges. Enables zero-copy data exchange from Rust into Python. by @kylebarron in #39 - Add put options. Enables custom tags and attributes, as well as "put if not exists". by @kylebarron in #50
- Rename to obstore by @kylebarron in #45
- Add custom exceptions. by @kylebarron in #48
Full Changelog: https://github.com/developmentseed/obstore/compare/py-v0.1.0...py-v0.2.0
- Initial release.