Changelog¶
0.5.1 - unreleased¶
anonymous=Trueon S3 uses no profile. Before, a profile thatAWS_PROFILEorAWS_DEFAULT_PROFILEnamed was loaded, and if it did not exist, the call raisedAuthError. Now the variables are not read. The region still comes fromregion_nameorAWS_DEFAULT_REGION, but no longer from the region or endpoint settings of that profile.
0.5.0 - 2026-11-02¶
This release adds features and changes two local-disk behaviors, listed under Other changes. Code that does not depend on those needs no change.
New:
upload(..., overwrite=False)writes a file only if no object exists at the URI, and raisesObjectExistsErrorotherwise. On S3 it is one conditionalPUT, limited to 5 GiB; a larger file raisesUnsupportedOperationErrorbefore anything is sent. See Files on disk.upload_files(uri_prefix, local_dir)uploads every file under a local folder, keeping relative paths, and returns the URIs sorted by relative path. It takesoverwrite=andmax_workers=.anonymous=Truefors3://andgs://reads a public bucket with no credentials, per call or onAwsBackendandGcsBackend. See Public buckets.
Other changes:
- A local
uploadreplaces the file in one step. A reader never sees a partly written file. A replaced file keeps its permissions, and a link at the target is followed, as before: the file it points to is replaced. Because the file is replaced, not written into, a hard link to the old file keeps the old content, the owner and extended attributes are not kept, and the folder must be writable. - Files from a local
createget the normal permissions, aswritegives them, rather than being readable only by their owner. StorageBackend.uploadhas anoverwritekeyword.ondiopasses it only when it isFalse, so a backend of your own needs it only to supportoverwrite=False.
0.4.0 - 2026-11-02¶
This release changes error types and HTTP behavior. Code that catches OndioError
needs no change.
Changes that can break a caller:
- SDK errors arrive as
ondioerrors. Errors fromboto3,botocore,google-auth,google-cloud-storageandrequeststhat escaped before (such asNoCredentialsError,ProfileNotFound,EndpointConnectionError,DefaultCredentialsErrorandrequests.ConnectionError) now raiseAuthError,NetworkErrororOndioError. The SDK error is the__cause__. Backend constructors are translated too. A bad URL or HTTP header is stillValueError, and a missing extra is stillImportError. See Errors. - S3 and GCS
createwith no credentials raisesAuthError, not "could not confirm create". A transport failure increateraisesNetworkError. - HTTP requests time out. The default is
(10, 60)seconds (connect, read).timeout=Nonerestores no limit. - HTTP redirects that are not followed raise
OndioError. This applies only with the newallow_redirects=False. createover HTTP is refused byHttpBackend, not before backend setup. So without thehttpextra it raisesImportError, aswritedoes.padding_ratiois removed fromread_flacanddownload_flac. It was ignored since 0.3.0.- The
gcsextra needsgoogle-cloud-storage3 or later.createalready needed it; now every GCS call does. - A failed
downloadleaves no partial file, on every backend. A file already at the local path is kept. On GCS, HTTP and local paths, a file that a download replaces keeps its permissions. - An S3 request that
botocorerefuses before sending it isValueError, for example one with an empty key. Before,ParamValidationErrorescaped.
New:
ondio.NetworkError: no answer came from the store. The request can be retried.HttpBackendoptions:headers,auth,cookies,verify,timeoutandallow_redirects. They also work per call, as inondio.read(url, headers=...). A redirect to another host gets none of the cookies or headers. See Private HTTPS files.AwsBackend(client=...)andGcsBackend(client=...)use a client that you made, for example an unsigned S3 client for a public bucket.- Every public function takes
backend=, a backend to use instead of one built from the URI. See Reusing a backend. ondio.read_range(uri, start_byte, end_byte)reads an inclusive byte range.ondio.backendsexportsStorageBackendand the four backend classes (AwsBackend,GcsBackend,HttpBackend,LocalBackend).- A documentation site, built with Zensical.
0.3.1 — 2026-10-30¶
endpoint_url=sets the S3 or GCS endpoint for one call, for example an S3 store that is not AWS. See Endpoints.ondio.get_environment(uri, **options)gives the environment variables that make another process'sondiocalls use the same options.createworks on GCS, as a conditional upload. GCS transport failures, checksum mismatches, and expired credentials raiseondioerrors.
0.3.0 — 2026-10-30¶
This release changes FLAC behavior. See
Migrating from soundhub_utils
for the details.
- Ranged FLAC windows are sample-exact. Before, a ranged read estimated byte offsets from the header's duration, and on long recordings a window could come back from the wrong time, by about 30 s, with no error.
- Damaged input raises
OndioErrorinstead of returning short or invented audio. A ranged failure never starts a full download on its own. soundfilereplaces pydub and ffmpeg. Nothing needs to be onPATH. A windowed re-encode of a 12- or 20-bit source raisesOndioError, because libsndfile writes only 8, 16, and 24 bits.padding_ratiois deprecated and ignored.
0.2.4 — 2026-10-13¶
- URIs that would read as a different path are refused with
ValueError: afile:,s3://, orgs://URI with?or#, whose text after it would be dropped, and afile:URI that does not start withfile://.
0.2.3 — 2026-10-09¶
- First release published from CI.
createandlocate, added in 0.2.2, reach PyPI with it. - 0.2.2 was tagged but not published.
0.2.2 — 2026-10-09 (not published)¶
ondio.createwrites an object only if none exists.ondio.locategives the store and path a URI names, without touching storage.
0.2.1 — 2026-10-05¶
ondio.uploadstreams a file from disk instead of reading it into memory.
0.2.0 — 2026-07-28¶
- Listing prefixes have folder semantics on every backend:
results/run-1matchesresults/run-1/…but notresults/run-10/…. read_jsonreplacesdownload_json, to follow the read/write and download/upload naming rule.
0.1.x — 2026-07¶
- First releases: URI-first IO over S3, GCS, HTTP, and local disk, with FLAC and Parquet helpers.