Object Storage Client
One URL-based API for AWS S3, Google Cloud Storage, Azure Blob Storage,
HTTP(S) and the local filesystem, as a Rust library, Python bindings and the
osc command-line tool. The scheme of each URL picks the backend, so a single
client can copy and move objects between providers, stream large objects in
bounded memory (see Behaviour
for the limits) and generate pre-signed URLs. Optional client-side encryption
keeps object contents hidden from the storage provider.
- One API for every backend, including cross-provider copy and move.
- Streaming uploads and downloads, with multipart uploads for large objects.
- Listing of a prefix or a whole bucket (flat and recursive), existence checks and bucket creation.
- Pre-signed URLs for S3, GCS and Azure. An
s3://URL signed with temporary credentials stops working when that session ends, whatever expiry was requested. - AWS profiles and SSO for
s3://:osc --profile NAME,ObjectStorageClient(profile="NAME")in Python andwith_s3_profilein Rust; see AWS profiles and SSO. - Client-side encryption (Cargo feature
encryption, on by default) with self-reloading keyrings and key rotation.
| URL | Backend |
|---|---|
s3://bucket/key |
AWS S3 and S3-compatible stores (Garage, SeaweedFS, …) |
gs://bucket/key, gcs://bucket/key |
Google Cloud Storage |
az://, wasb(s)://, abfs(s):// + container/key |
Azure Blob Storage |
http://host/path, https://host/path |
HTTP/HTTPS |
file:///abs/path, /abs/path, ~/path, relative/path |
Local filesystem |
For the cloud schemes the host is the bucket or container and the path is the
object key. A bucket-root URL such as s3://bucket addresses the bucket
itself: list it, create it or check that it exists. Credentials come from
environment variables or, for s3://, from a named AWS profile; see
Configuration.
Rust
The crate is published to the Bixority Codeberg crate registry:
export CARGO_REGISTRIES_BIXORITY_INDEX="sparse+https://codeberg.org/api/packages/bixority/cargo/"
[dependencies]
object-storage-client = { version = "0.3", registry = "bixority" }
# or: object-storage-client = { git = "https://codeberg.org/bixority/object-storage-client" }
tokio = { version = "1", features = ["full"] }
The encryption and cli features are on by default. A library that does not
need the CLI can drop clap and tokio-util:
object-storage-client = { version = "0.3", registry = "bixority", default-features = false, features = ["encryption"] }
use object_storage_client::{ObjectStorageClient, SignMethod, SignOptions};
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = ObjectStorageClient::new();
// Create a bucket (S3/GCS/Azure, or a directory for file:// URLs); idempotent
client.create_bucket("s3://my-bucket").await?;
// Upload data to S3
client.put("s3://my-bucket/hello.txt", &b"Hello from Rust!"[..]).await?;
// Download it back
let retrieved = client.get("s3://my-bucket/hello.txt").await?;
println!("Retrieved: {}", String::from_utf8_lossy(&retrieved));
// List the whole bucket from a bucket-root URL (flat, recursive: every key
// is returned). Pass a prefix such as "s3://my-bucket/logs/" to narrow it.
let keys = client.list("s3://my-bucket").await?;
println!("Bucket keys: {keys:?}");
// Existence checks (missing -> Ok(false), never an error)
if client.bucket_exists("s3://my-bucket").await? {
println!("my-bucket is present");
}
if client.exists("s3://my-bucket/hello.txt").await? {
println!("hello.txt is present");
}
// --- Move data across providers with one client ---
// Copy S3 -> Google Cloud Storage (source is left in place)
client
.copy("s3://my-bucket/hello.txt", "gs://my-gcs-bucket/hello.txt")
.await?;
// Move GCS -> Azure Blob Storage (source is deleted afterwards)
client
.move_object("gs://my-gcs-bucket/hello.txt", "az://my-container/hello.txt")
.await?;
// Copy Azure -> local disk for a working copy
client
.copy("az://my-container/hello.txt", "file:///tmp/hello_local.txt")
.await?;
// --- Pre-signed URLs: time-limited, credential-free access (S3/GCS/Azure) ---
// Pre-signed download (GET) link, valid for one hour
let download_url = client
.get_pre_signed_url(
"s3://my-bucket/hello.txt",
SignMethod::Get,
Duration::from_secs(3600),
&SignOptions::default(),
)
.await?;
println!("Share this download link: {download_url}");
// Pre-signed upload (PUT) link binding the exact size and type the client
// must send (S3 only); the store rejects mismatched uploads up front.
let upload_url = client
.get_pre_signed_url(
"s3://my-bucket/upload.bin",
SignMethod::Put,
Duration::from_secs(900),
&SignOptions {
content_length: Some(1_048_576),
content_type: Some("application/octet-stream".to_string()),
},
)
.await?;
println!("Upload directly to: {upload_url}");
Ok(())
}
With encryption, the same calls on an encrypting view:
use object_storage_client::encryption::{EncryptionConfig, Keyring};
use object_storage_client::ObjectStorageClient;
use std::sync::Arc;
let keyring = Arc::new(Keyring::from_file("/var/run/secrets/osc/keyring")?); // reloads itself
let secure = ObjectStorageClient::new().with_encryption(EncryptionConfig::new(keyring.clone()));
secure.put("s3://my-bucket/payroll.csv", &b"id,salary"[..]).await?; // only ciphertext is stored
let csv = secure.get("s3://my-bucket/payroll.csv").await?; // authenticated before it is returned
let health = keyring.status(); // active key, key ages, last reload error
Python
The package is published on PyPI and needs Python 3.13+:
pip install object-storage-client
Wheels exist for GIL CPython 3.13-3.15 on manylinux x86_64/aarch64, macOS arm64
and Windows x86_64; other platforms build the sdist and need Rust 1.99 or
newer. Free-threaded CPython is unsupported: 3.13t does not build, and on 3.14t
and later importing the module re-enables the GIL with a RuntimeWarning.
import asyncio
from object_storage_client import ObjectStorageClient
async def main():
client = ObjectStorageClient()
# Create a bucket (S3/GCS/Azure, or a directory for file:// URLs); idempotent
await client.create_bucket("s3://my-bucket")
# Check whether a bucket exists (returns a bool; never raises for a miss).
if await client.bucket_exists("s3://my-bucket"):
print("my-bucket is present")
# Upload data to S3
await client.put_object("s3://my-bucket/hello.txt", b"Hello from Python!")
# Check whether an object exists (returns a bool; never raises for a miss).
# If you prefer the missing case to raise FileNotFoundError, use
# get_object_metadata() or get_object() instead.
if await client.object_exists("s3://my-bucket/hello.txt"):
print("hello.txt is present")
# Fetch full metadata (raises FileNotFoundError if the object is missing)
meta = await client.get_object_metadata("s3://my-bucket/hello.txt")
print(f"Size: {meta['size_bytes']}, type: {meta['content_type']}")
# Download data
data = await client.get_object("s3://my-bucket/hello.txt")
print(f"Retrieved: {data.decode()}")
# List objects
items = await client.list_objects("s3://my-bucket/")
print(f"Bucket items: {items}")
# List a large prefix in bounded batches
async for names in await client.list_objects_stream("s3://my-bucket/"):
print(f"{len(names)} more items")
# Stream data
stream = await client.get_object_stream("s3://my-bucket/hello.txt")
async for chunk in stream:
print(f"Chunk size: {len(chunk)}")
# --- Move data across providers with one client ---
# Copy S3 -> Google Cloud Storage (source is left in place)
await client.copy_object("s3://my-bucket/hello.txt", "gs://my-gcs-bucket/hello.txt")
# Move GCS -> Azure Blob Storage (source is deleted afterwards)
await client.move_object("gs://my-gcs-bucket/hello.txt", "az://my-container/hello.txt")
# Copy Azure -> local disk for a working copy
await client.copy_object("az://my-container/hello.txt", "file:///tmp/hello_local.txt")
# --- Pre-signed URLs (S3/GCS/Azure): credential-free, time-limited access ---
download_url = await client.get_pre_signed_url("s3://my-bucket/hello.txt")
# Bind the exact Content-Length and Content-Type the client must send (S3
# only); the store rejects uploads that don't match.
upload_url = await client.get_pre_signed_url(
"s3://my-bucket/upload.bin",
method="PUT",
expires_in_secs=900,
content_length=1_048_576,
content_type="application/octet-stream",
)
print(f"Download: {download_url}\nUpload: {upload_url}")
if __name__ == "__main__":
asyncio.run(main())
With encryption (key bytes never reach Python):
from object_storage_client import ObjectStorageClient, Keyring
keyring = Keyring.from_file("/var/run/secrets/osc/keyring") # reloads itself
secure = ObjectStorageClient().with_encryption(keyring)
# or directly: EncryptedObjectStorageClient(keyring, profile="dev") # profile= is optional
await secure.put_object("s3://my-bucket/payroll.csv", b"id,salary") # only ciphertext is stored
data = await secure.get_object("s3://my-bucket/payroll.csv") # authenticated before it is returned
health = keyring.status() # active key, key ages, last reload error
CLI (osc)
export CARGO_REGISTRIES_BIXORITY_INDEX="sparse+https://codeberg.org/api/packages/bixority/cargo/"
cargo install object-storage-client --registry bixority
# or: cargo install --git https://codeberg.org/bixority/object-storage-client
# or, from a checkout: cargo install --path .
osc put my_file.txt s3://my-bucket/remote_file.txt # upload a file
osc put --recursive my_dir s3://my-bucket/remote_dir/ # upload a directory
osc get gs://my-bucket/data.json ./local_data.json # download
osc get-stream gs://my-bucket/large_file.bin > large_file.bin # stream to stdout; progress on stderr
osc --profile dev ls s3://my-bucket/ # credentials from the AWS profile "dev"
osc cp s3://source-bucket/image.png az://dest-container/image.png # copy between providers
osc mv s3://my-bucket/old_name.txt s3://my-bucket/new_name.txt
osc ls s3://my-bucket/logs/
osc rm s3://my-bucket/temp_file.tmp
osc exists s3://my-bucket/report.pdf # prints true or false
osc mb s3://my-new-bucket # create a bucket (a directory for local paths)
osc bucket-exists s3://my-bucket # prints true or false
# Pre-signed URLs (S3, GCS, Azure): a download link valid for the default
# 1 hour, and an upload (PUT) link valid for 15 minutes. With temporary
# credentials (SSO, an assumed role) an s3:// link stops working when that
# session ends, whatever the expiry
osc sign s3://my-bucket/report.pdf
osc sign --method PUT --expires-in 900 s3://my-bucket/upload.bin
# S3 only: the upload is rejected unless Content-Length and Content-Type match
osc sign --method PUT --content-length 1048576 \
--content-type application/pdf s3://my-bucket/upload.pdf
get-stream writes each chunk to standard output as it arrives, so its output
is complete only if osc exits 0. A failed read, or a truncated or tampered
encrypted object, stops the output part way: every byte written was
authenticated, but the object may be cut short. In a pipeline use
set -o pipefail, or give a FILE for an all-or-nothing download.
With a keyring, put, get, get-stream, cp and mv encrypt and decrypt
transparently:
umask 077 # keyring files must not be readable by others
osc keyring new > keyring # a keyring with one fresh key
osc --keyring keyring put report.csv s3://my-bucket/report.csv
osc --keyring keyring get s3://my-bucket/report.csv report.csv
osc enc inspect s3://my-bucket/report.csv # header details; no keys needed
# Rotation: add a key, wait until every reader has it, activate it, then move
# objects off the old one (a single reader may use `osc keyring rotate`)
osc keyring add < keyring > keyring.new && mv keyring.new keyring
osc keyring activate <new key ID> < keyring > keyring.new && mv keyring.new keyring
osc --keyring keyring enc reencrypt s3://my-bucket/ --from <old key ID>
--keyring can also come from OSC_KEYRING_FILE, or from a command that
prints the keyring (OSC_KEYRING_COMMAND), so the keyring never touches the
disk.
Desktop browser (osc-gui)
osc-gui is a two-panel desktop browser for the same stores as osc. Each
panel shows one folder, and you copy, move, rename and delete objects and whole
folders within a panel or between the two. It uses the same credentials and
encryption options as osc.
Install
The browser is behind the optional gui feature, so osc alone is unaffected.
Install both binaries from the registry:
export CARGO_REGISTRIES_BIXORITY_INDEX="sparse+https://codeberg.org/api/packages/bixority/cargo/"
cargo install object-storage-client --registry bixority --features gui
Or from a checkout:
cargo install --path . --features gui
Linux needs no extra packages: the window opens on X11 or Wayland.
Run
osc-gui # both panels on the current directory
osc-gui s3://my-bucket/photos/ ~/Pictures # left and right panel
osc-gui --profile dev s3://my-bucket/ # credentials from the AWS profile "dev"
osc-gui --keyring keyring s3://my-bucket/ . # copies encrypt and decrypt
Type any URL or path into a panel's address bar and press Enter. Buckets are not listed, so type the bucket's URL. The keys and shortcuts are listed in Desktop browser, which also covers limits and closing behaviour.
Documentation
- Configuration: credentials and environment variables for each provider.
- Encryption: what it protects, keyrings, Kubernetes, key rotation, responding to a key leak, the format and interop.
- Behaviour and limits: URL rules, copy and move, deletes, file permissions, large objects, pre-signing, CLI and Python details.
- Desktop browser:
osc-gui, its keys, limits and closing. - Upgrading: breaking changes between releases.
- Development and Testing.
Metadata
Release files for object-storage-client 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| object_storage_client-0.3.0.tar.gz | 1.9 MB | With provenance | Details for object_storage_client-0.3.0.tar.gz |
Built distributions (wheels)
Total release size: 75.7 MB
Release files / object_storage_client-0.3.0.tar.gz
| Download URL | object_storage_client-0.3.0.tar.gz |
|---|---|
| Size | 1.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a77f623d59f2d57bfd05ed71994c39edc224d0369aa4b7f2c017431c54c1ef0f
|
|
BLAKE2b-256 checksum How to use checksums |
51d8cb51e82caf822d66fa247537b415c325e6f8a2e6e2e5ca37d9c607153df2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp315-cp315-win_amd64.whl
| Download URL | object_storage_client-0.3.0-cp315-cp315-win_amd64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.15 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
885871921e434d96aa7775d6b60d3c06cd658272c4665212f3ced2844d538ea6
|
|
BLAKE2b-256 checksum How to use checksums |
bccaef1bcaea92a45fbbafe4c51710c9da0b6e34f9edf3b7f7dc4d313e8dd2f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp315-cp315-manylinux_2_28_aarch64.whl
| Download URL | object_storage_client-0.3.0-cp315-cp315-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.15 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
31cf13b8c219ab73617f32d03d12e2a496c8850f27771f17fc07e7800a3a89cc
|
|
BLAKE2b-256 checksum How to use checksums |
60d0aa6140c16addbe6292b3d90225155729b8b32d089c43bca231012d6427b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | object_storage_client-0.3.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.15 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0b35844684f8dc55f328888e3729648a753c9d3b719a0fbd2b7f10f5624446f0
|
|
BLAKE2b-256 checksum How to use checksums |
e8899018a339e86ba9159c4595e8a938b6880cc486359db135c0f1f3dce0e80b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp315-cp315-macosx_11_0_arm64.whl
| Download URL | object_storage_client-0.3.0-cp315-cp315-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.15 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
343ac06e08ace5bdfb672294ad5148952f3b74a80438bcba676a30819cb2204a
|
|
BLAKE2b-256 checksum How to use checksums |
2b6a713df818c3707b94aa80bbe81d7905e23fff9fc94b2512ab28b6c9f5d1a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp314-cp314-win_amd64.whl
| Download URL | object_storage_client-0.3.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6a2a6a6dbc026d12e2adac69a9c33eeac35a53da5bf5200e17258691075cfdf5
|
|
BLAKE2b-256 checksum How to use checksums |
80be3082f2bd9356f00626c8d04a03584f3b69ff6fb73a3c2156e6182baf4f70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp314-cp314-manylinux_2_28_aarch64.whl
| Download URL | object_storage_client-0.3.0-cp314-cp314-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
2220f1b1b3e68f869d64664dbe65a777f0190219d33c5fccf2a953b70daedd86
|
|
BLAKE2b-256 checksum How to use checksums |
cc89ad764772bb2697aa11f3dafc699ecb6c48354a38510ecacf84a06d93da7d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | object_storage_client-0.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ade8cb2072e5d5fa8f03359792a0e27a7c736f545cfd3491bc3d2812d43748d2
|
|
BLAKE2b-256 checksum How to use checksums |
b0d23f147a743cb038cc3a99a465a90b31a79650cfa9aff8a785b6def1a5edfa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | object_storage_client-0.3.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
dcf38d9708b85256119e22b66e18bded762ff01c1d4ef64c0d77d43da768ab5c
|
|
BLAKE2b-256 checksum How to use checksums |
7654e8cce94d6da9661136adecf3cec551ffe0ffc5e8e850496d7b046ca3fd1f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp313-cp313-win_amd64.whl
| Download URL | object_storage_client-0.3.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 6.6 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
12a40c6df9070546be454de0c8697e5f55735a2838c769dd2cc0d6ef4cf58090
|
|
BLAKE2b-256 checksum How to use checksums |
823f4a5c322c137d5af14ed654ff1c6ef721a234a186c0aa549c1828f1ffbb0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | object_storage_client-0.3.0-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 6.1 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
fd97b0cedd97707d71ed92fb553ad2af6625ed7577abb1914c87072abc0e62e2
|
|
BLAKE2b-256 checksum How to use checksums |
5b1b4e34e884bd647e76d062109c8d3e449923ef920d3f9a72115480fd73bffc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
| Download URL | object_storage_client-0.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
22c1921d02787fc8fbec34c651bc96f122edf1543634e7b92a929ff0088c5a57
|
|
BLAKE2b-256 checksum How to use checksums |
03db852886a2d165bbacecb79881e7d7eadb944cd951087d44aee5ddd4b9b799
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logRelease files / object_storage_client-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | object_storage_client-0.3.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.4 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ace33833fee658ce94b72d7707fbc4dec3958e30c11162fac6516924e7cadb3b
|
|
BLAKE2b-256 checksum How to use checksums |
63b9b9e86a0c05790a659a12cebf35c4f73e532cd31ae7db0f6cce840011cfc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logSecurity for object-storage-client 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 13 files in this release have been uploaded with provenance metadata.
Attestation for object_storage_client-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.