Build MinIO S3 SDK with custom Signature V4 signing #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
plan-pal-e-platform→ Phase 24 (MinIO SDK)Repo
forgejo_admin/minio-sdkUser Story
As a platform developer
I want a pure Python SDK that wraps the raw S3 REST API
So that I can interact with MinIO without depending on boto3 or any third-party S3 SDK
Context
MinIO is deployed on the pal-e platform (Helm chart v5.4.0, namespace
minio). The stock MinIO Console UI is unusable on mobile. We're building a custom mobile-first interface. This SDK is the foundation — it wraps every S3 endpoint with custom Signature V4 signing. No boto3, no minio-py, no aws-sdk. Justrequests+ Python stdlib.The S3 API is just HTTP with XML responses. The only complex part is AWS Signature V4 signing (4 chained HMAC-SHA256 operations). MinIO's S3 implementation is identical to AWS with minor gotchas (API port 9000, no regional routing,
AbortIncompleteMultipartUploadlifecycle not supported).Key decisions:
requestsis the only external dep — stdlibhmac+hashlibfor signing,xml.etreefor parsingpal-e-docs-sdkFile Targets
Files to create:
src/minio_sdk/__init__.py— package init, exports client classsrc/minio_sdk/client.py— mainMinioClientclass with all S3 operationssrc/minio_sdk/signer.py— AWS Signature V4 signing modulesrc/minio_sdk/models.py— dataclasses for Bucket, Object, Part, etc.src/minio_sdk/xml_parser.py— S3 XML response parsing to Python objectssrc/minio_sdk/exceptions.py— typed exceptions for S3 errorstests/test_signer.py— unit tests for Signature V4 with known test vectorstests/test_client.py— integration tests against live MinIOpyproject.toml— project config, dependencies, build configCLAUDE.md— agent conventions for this repoAcceptance Criteria
minio-api.tail5b443a.ts.netpip installfrom Forgejo PyPITest Expectations
pytest tests/ -vConstraints
requests. Everything else is stdlib.xml.etree.ElementTree(stdlib), not lxmlminio-api.tail5b443a.ts.net(port 443 via Tailscale, routes to 9000)MINIO_ACCESS_KEY/MINIO_SECRET_KEY)us-east-1(MinIO default)pal-e-docs-sdkfor project structure and PyPI publishingChecklist
Related
project-pal-e-platform— project this affectsphase-pal-e-platform-24-minio-sdk— phase note with full scope