Skip to main content

xyberos-storage-s3

A Storage provider for S3-compatible object stores, proved against the suite this project ships.

Xyberos keeps one storage provider in the core (xyberos.storage, local filesystem) and makes the boundary a protocol: a service depends on Storage, never on a client library. This package supplies a second implementation — aioboto3 against any S3-compatible endpoint, which is AWS S3, MinIO, Ceph RGW, Cloudflare R2 or Backblaze B2 — and proves it the way docs/storage.md requires, by running the shipped conformance suite against a real server rather than by asserting that it works.

Install

pip install xyberos-storage-s3

# development (editable, from this repo):
pip install -e ./storage/xyberos_storage_s3

Register it

A provider arrives the way any other service does: already started, supplied as an instance the application owns and closes.

from xyberos import App
from xyberos.storage import Storage
from xyberos_storage_s3 import S3StorageSettings, s3_storage

app = App()
app.provide(
    Storage,
    factory=s3_storage(
        S3StorageSettings(
            bucket="xyberos-reports",
            endpoint_url="https://s3.eu-central-1.amazonaws.com",
            region="eu-central-1",
            access_key="******",
            secret_key="******",
            prefix="checkout",
        )
    ),
    eager=True,
)

The settings carry the bucket, the endpoint, the region, the credentials, the namespace prefix, the TLS switch, the two deadlines, and the retry budget. The secret is never rendered: safe_endpoint is the one a log line or an error message should name. start() proves the bucket can be written and read — and creates it when create_bucket allows that — so a mistyped endpoint is a startup failure rather than a 500 on the first upload, and aclose() releases the client, which the runtime closes because it is there.

Two settings are worth naming:

  • prefix namespaces every key inside the bucket: a caller stores reports/2026-q1.csv, the bucket holds checkout/reports/2026-q1.csv, and a listing hands back reports/2026-q1.csv. Two deployments can share one bucket without listing each other's objects.
  • Credentials left empty are resolved by the client from the environment, a profile, or an instance role, which is what a deployment on a cloud identity wants. verify_tls is a boolean and not a CA bundle path, because a path is a non-empty string and a non-empty string is truthy.

Conformance

XYBEROS_STORAGE_S3_ENDPOINT=http://127.0.0.1:59000 \
  python -m xyberos_storage_s3.conformance

The core repository's packages.toml names that module as this package's conformance target, so the compatibility job runs it against the published core, and a release waits on it passing against an S3-compatible service. It reads XYBEROS_STORAGE_S3_BUCKET, ..._ENDPOINT, ..._REGION, ..._ACCESS_KEY, ..._SECRET_KEY and ..._PREFIX, defaulting to a local scratch server on port 59000, the bucket xyberos-conformance, and minioadmin credentials. It prints every check and exits non-zero on the first failure, including one that is only a refused connection.

What it does not do

  • No multipart uploads. One put is one PutObject, which is why the 64 MiB default ceiling sits far below the 5 GiB a single request could carry: an object past it is refused, not split.
  • No versioning, signed URLs, or content types. The contract is an opaque payload under a key, and a provider that smuggled a backend-specific API into application code would defeat the point of it.
  • No server-side encryption, lifecycle rules, or bucket policy. Those belong to the bucket, which the deployment owns, and to the infrastructure that creates it.
  • No transient-error marker. The core ships no storage error that is also a TransientError, so a failure a retry policy might want to retry arrives as a plain StorageError; the retry decision is the caller's, and the client's own retry budget is what retry_attempts configures.

Metadata

Release files for xyberos-storage-s3 0.1.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 xyberos-storage-s3 0.1.1
File Size Uploaded Provenance Actions
xyberos_storage_s3-0.1.1.tar.gz 15.7 kB With provenance Details for xyberos_storage_s3-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for xyberos-storage-s3 0.1.1
File Interpreter ABI Platform Actions
xyberos_storage_s3-0.1.1-py3-none-any.whl Python 3 none any Details for xyberos_storage_s3-0.1.1-py3-none-any.whl

Total release size: 28.6 kB

Release files / xyberos_storage_s3-0.1.1.tar.gz

Download URL xyberos_storage_s3-0.1.1.tar.gz
Size 15.7 kB
Tags Source
SHA-256 checksum
How to use checksums
b7eb69856bb6f42e233f689c397a016aeccfcb8136a7f33e553d4cefc49a1345
BLAKE2b-256 checksum
How to use checksums
d92a9dca11aefdd3552e247e8083c1aeb2966bf92a961e4158b9ee283bc5d676
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 14, 2026.

Transparency log

Release files / xyberos_storage_s3-0.1.1-py3-none-any.whl

Download URL xyberos_storage_s3-0.1.1-py3-none-any.whl
Size 12.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d0c1319c1aaa3cc7d78d0da05393c1181464b043ab0032575523a4f7b7e3f9c
BLAKE2b-256 checksum
How to use checksums
181f1a044cefbae784147213b07a1205764eb00d5058a50449423c7194024a6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 14, 2026.

Transparency log

Security for xyberos-storage-s3 0.1.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 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for xyberos_storage_s3-0.1.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 14, 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.1.1 This release

2 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