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 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.
  • 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; 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
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}")

    # 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)

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

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 new active key, then move objects off the old one
osc keyring rotate < 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 in 0.2.0.
  • Development and Testing.

Metadata

Release files for object-storage-client 0.2.0

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.0
File Size Uploaded Provenance Actions
object_storage_client-0.2.0.tar.gz 1.6 MB Without provenance Details for object_storage_client-0.2.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for object-storage-client 0.2.0
File Actions
object_storage_client-0.2.0-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details for object_storage_client-0.2.0-cp315-cp315-win_amd64.whl
object_storage_client-0.2.0-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.0-cp315-cp315-manylinux_2_28_aarch64.whl
object_storage_client-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ x86-64 Details for object_storage_client-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
object_storage_client-0.2.0-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details for object_storage_client-0.2.0-cp315-cp315-macosx_11_0_arm64.whl
object_storage_client-0.2.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for object_storage_client-0.2.0-cp314-cp314-win_amd64.whl
object_storage_client-0.2.0-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.0-cp314-cp314-manylinux_2_28_aarch64.whl
object_storage_client-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.17+ x86-64 Details for object_storage_client-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
object_storage_client-0.2.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for object_storage_client-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
object_storage_client-0.2.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for object_storage_client-0.2.0-cp313-cp313-win_amd64.whl
object_storage_client-0.2.0-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.0-cp313-cp313-manylinux_2_28_aarch64.whl
object_storage_client-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details for object_storage_client-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
object_storage_client-0.2.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for object_storage_client-0.2.0-cp313-cp313-macosx_11_0_arm64.whl

Total release size: 47.4 MB

Release files / object_storage_client-0.2.0.tar.gz

Download URL object_storage_client-0.2.0.tar.gz
Size 1.6 MB
Tags Source
SHA-256 checksum
How to use checksums
82634f336c8661e49fcc0a2d28346732eff78121ce38398d53be4b766ce660b9
BLAKE2b-256 checksum
How to use checksums
794e319e0b7e1c8a25053dd70937461c974c0e73cf5cd7286150c53fa69f43b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp315-cp315-win_amd64.whl
Size 3.8 MB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
d9dfc1390cfce47963798421251db4367f0116a2e399427b57958e95981e0dbc
BLAKE2b-256 checksum
How to use checksums
765553ff5b4c63163378205d5b4d310c120110128548a799baeba4a6ce0c84d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp315-cp315-manylinux_2_28_aarch64.whl
Size 4.0 MB
Tags CPython 3.15 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
3574a5d7f281b966cb7fc635b070804c507ca83a28e1bfb4ed6513cccdb995aa
BLAKE2b-256 checksum
How to use checksums
3d13ef608d91b37dcf72a672245b994f7ab18db19aaf6e8cad56925c052d2d30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.3 MB
Tags CPython 3.15 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
64ea000dc6612753e9cf5c60310bcb411d6bf6eebbff7f28500ae79b8314afbc
BLAKE2b-256 checksum
How to use checksums
13826938d1f2ba071cca0047dc26104f3bfc07c26ccd382e87852e83fbd0a0a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp315-cp315-macosx_11_0_arm64.whl
Size 3.2 MB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9dc70988326aec7f4b06e31120a9a44d7731445ddec8299b1e8c83dbadc77ce5
BLAKE2b-256 checksum
How to use checksums
562dffc42176d70032f350d473866a09b0b99b055702e02f0ee27f525575c284
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp314-cp314-win_amd64.whl
Size 3.8 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
587f0a2d1000e06bbd76a58ae9d0948dd706920a542d01eaba7d7f49155e3c85
BLAKE2b-256 checksum
How to use checksums
2e53591c38d2ea887c8467baa8adae12f3c63407e4713c830e191da81d01cda5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp314-cp314-manylinux_2_28_aarch64.whl
Size 4.0 MB
Tags CPython 3.14 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
935da6ca9a03f79c47a38e373cc916ff5ce4798d483891331e642b47307dead2
BLAKE2b-256 checksum
How to use checksums
9d849cc40884ac0ffb0588fde69203b8ff2668aad046c98adba5a48769318802
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.3 MB
Tags CPython 3.14 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
edf4ff1a15fc283fabedd66ef846566eab86b54159a1e1d32ca6f0769cfc0326
BLAKE2b-256 checksum
How to use checksums
257709bf3c0a17ee399f0ae17fe1869b5fc0ff63cae85fdf4b5b05a7987b4581
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
Size 3.2 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b4ca134f1787ed629eed49b6e560455413be6d744c5e4d26e645384a7e686859
BLAKE2b-256 checksum
How to use checksums
6a1bb4611736bb3ae1e6156902cd27c1dcb438ebc85dd4852a68b55ece14881c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp313-cp313-win_amd64.whl
Size 3.8 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
a000267b57f9967bc72f930e0ba3f524c6eeedf05a0ae8a1d810400f28a500ed
BLAKE2b-256 checksum
How to use checksums
cf3e0785eb86b9b2c94edb6f4a71e180354a5befcf1fef75f5c894d38b103c25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp313-cp313-manylinux_2_28_aarch64.whl
Size 4.0 MB
Tags CPython 3.13 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
c7fdf5759ac9af50f85f191326bfb65ede7896971630f080cee1cc6450cdcd82
BLAKE2b-256 checksum
How to use checksums
ea2ebb946b9df13401e03eaee9e30e35c2f9b79ba91ae34ea1fde62ee4ea83fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 4.3 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
8597e8ba7410e9f044a6bc1098a91979de9f83df117725d8ac37e5a396938dad
BLAKE2b-256 checksum
How to use checksums
13c7360f007f9e19e432992219c2a36108de7977593efd7f4cac68d55b431161
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

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

Download URL object_storage_client-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
Size 3.2 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
02c09d72d8f8ae78e7482928855f3d70734246fa60ea0202e2d1cb7158247a92
BLAKE2b-256 checksum
How to use checksums
a245dbf0aa7868ad1c0666cfdacc733cf1bd2c6367a39680956af0a083274ddc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for object-storage-client 0.2.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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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.0 This release

13 release files No 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