Skip to main content

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 and with_s3_profile in 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.2", 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.2", 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.

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.
  • Upgrading: breaking changes between releases.
  • Development and Testing.

Metadata

Release files for object-storage-client 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for object-storage-client 0.2.1
File Size Uploaded Provenance Actions
object_storage_client-0.2.1.tar.gz 1.7 MB With provenance Details for object_storage_client-0.2.1.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for object-storage-client 0.2.1
File Actions
object_storage_client-0.2.1-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details for object_storage_client-0.2.1-cp315-cp315-win_amd64.whl
object_storage_client-0.2.1-cp315-cp315-manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ ARM64 Details for object_storage_client-0.2.1-cp315-cp315-manylinux_2_28_aarch64.whl
object_storage_client-0.2.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ x86-64 Details for object_storage_client-0.2.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
object_storage_client-0.2.1-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details for object_storage_client-0.2.1-cp315-cp315-macosx_11_0_arm64.whl
object_storage_client-0.2.1-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for object_storage_client-0.2.1-cp314-cp314-win_amd64.whl
object_storage_client-0.2.1-cp314-cp314-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64 Details for object_storage_client-0.2.1-cp314-cp314-manylinux_2_28_aarch64.whl
object_storage_client-0.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details for object_storage_client-0.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
object_storage_client-0.2.1-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for object_storage_client-0.2.1-cp314-cp314-macosx_11_0_arm64.whl
object_storage_client-0.2.1-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for object_storage_client-0.2.1-cp313-cp313-win_amd64.whl
object_storage_client-0.2.1-cp313-cp313-manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64 Details for object_storage_client-0.2.1-cp313-cp313-manylinux_2_28_aarch64.whl
object_storage_client-0.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details for object_storage_client-0.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
object_storage_client-0.2.1-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for object_storage_client-0.2.1-cp313-cp313-macosx_11_0_arm64.whl

Total release size: 76.0 MB

Release files / object_storage_client-0.2.1.tar.gz

Download URL object_storage_client-0.2.1.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
03c1b2d5ddd8b1ae9e1c3c654b6c8d773b58e25ce4525aaa6a54520817980b16
BLAKE2b-256 checksum
How to use checksums
6c924fc078e3dc2db6d3ce34a1ba797a9a5c5e4c5f04a9f77427158a468a4b7d
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp315-cp315-win_amd64.whl

Download URL object_storage_client-0.2.1-cp315-cp315-win_amd64.whl
Size 6.6 MB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
993c6fa3777fd23a02c643f234c67b45b680352eb77be6ed6a6e323d11d345d1
BLAKE2b-256 checksum
How to use checksums
54f8d4d652d71bfc121db54646bf0ee442b680bfba6c70128c66a8ab0650b46e
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp315-cp315-manylinux_2_28_aarch64.whl

Download URL object_storage_client-0.2.1-cp315-cp315-manylinux_2_28_aarch64.whl
Size 6.2 MB
Tags CPython 3.15 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
df1f60388341ffc7290646145ec1cd40bb77662c555bcab84b2d3624ccc65b46
BLAKE2b-256 checksum
How to use checksums
54b98486bb7e53265359e691837cbe854f5034dad6b91745ba7b7ca9cb32d892
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL object_storage_client-0.2.1-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
939ff5eef22be47084d31a2732da87b82547861485ac316f0b02ca2cd076a217
BLAKE2b-256 checksum
How to use checksums
f0e922b082703a00c20443ed5cbd8f1b9fd62f990bad0aba234a66d7ab0fb232
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp315-cp315-macosx_11_0_arm64.whl

Download URL object_storage_client-0.2.1-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
fe81500a55f6ff08b544dea22e80d17b8df61a91b1ecf7c3111dfc4a56f75b18
BLAKE2b-256 checksum
How to use checksums
eb424e5f5413a7c5818462600c578c742e2026e9e78329a100a320a1efd96dda
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp314-cp314-win_amd64.whl

Download URL object_storage_client-0.2.1-cp314-cp314-win_amd64.whl
Size 6.6 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
a481df9e93dc9bb4c7589f46273833fa57a0820996bbc2324146b9d261c3db71
BLAKE2b-256 checksum
How to use checksums
1a3ea6b5afe664375d8c4e72ef09af32630dfa9ee2aa7850945aa7cb058071e8
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp314-cp314-manylinux_2_28_aarch64.whl

Download URL object_storage_client-0.2.1-cp314-cp314-manylinux_2_28_aarch64.whl
Size 6.2 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
b256d6387423401f6fcc1a3ce076de0723179a5d92c430fc3b177b97d02d6111
BLAKE2b-256 checksum
How to use checksums
37c7208073a3af2b5435c7235058446ef3016cc4c09e5f7a8bcdc1b139b42a7a
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL object_storage_client-0.2.1-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
a3bfa528e68ba145ad50f431300323c93ae7736eac58ed13f456d1733faa9a9d
BLAKE2b-256 checksum
How to use checksums
ae9a2d36d713fa771479317b4e2b8cfaf7816b3c99f82d6ba5a163d23de0e06b
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp314-cp314-macosx_11_0_arm64.whl

Download URL object_storage_client-0.2.1-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
de17d06cb64db8099765fbef9c6bc1d34a1fa15fb9edd35b4aaa28dcaf279653
BLAKE2b-256 checksum
How to use checksums
74634ef737d3ffd6f6a311441845abb6cfad7525686c1f8c92e1f8b613c29941
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp313-cp313-win_amd64.whl

Download URL object_storage_client-0.2.1-cp313-cp313-win_amd64.whl
Size 6.6 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
fef2ad2cea522b3e854a67c8fb87f57cb81e3423fde08d7f071ba6c8a26deeb0
BLAKE2b-256 checksum
How to use checksums
5396a592f9f9d5a8c5e9f65215df188145f1a6ef0bfb6de1afd1e6b3e1ee618e
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp313-cp313-manylinux_2_28_aarch64.whl

Download URL object_storage_client-0.2.1-cp313-cp313-manylinux_2_28_aarch64.whl
Size 6.2 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
ac684446d95b6fb9ee8971d09633ae3140a332c13f4c86e1e58a1f0c0718d589
BLAKE2b-256 checksum
How to use checksums
0a871759bac84c2117bfeeceebc6dcd30ebd12df40d08eeb7e9039e327b4011a
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl

Download URL object_storage_client-0.2.1-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
e3d30f31afd3400a9e92b503ce4f6a561f3fe290311a7ba48502a349c600ed2f
BLAKE2b-256 checksum
How to use checksums
96c58773ddd8c7b97aea22e5272000a188250bfe1513d452241fa443cf0d68ff
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 Oct 29, 2026.

Transparency log

Release files / object_storage_client-0.2.1-cp313-cp313-macosx_11_0_arm64.whl

Download URL object_storage_client-0.2.1-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
c3c76c929c96d04a1b36a9a7613284d32ee9ae17e5520ad716d683ad8926e9a2
BLAKE2b-256 checksum
How to use checksums
fdeee7b519d7352cf0e195081343590663dbad10b7b71aa43b6da3168fe26663
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 Oct 29, 2026.

Transparency log

Security for object-storage-client 0.2.1

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.

Select from 13 files

Attestation for object_storage_client-0.2.1.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 Oct 29, 2026.

Transparency log

A 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.

Release history Release notifications | RSS feed

This release

0.2.1 This release

13 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page