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:
prefixnamespaces every key inside the bucket: a caller storesreports/2026-q1.csv, the bucket holdscheckout/reports/2026-q1.csv, and a listing hands backreports/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_tlsis 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
putis onePutObject, 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 plainStorageError; the retry decision is the caller's, and the client's own retry budget is whatretry_attemptsconfigures.
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 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.