v0.0.5
v0.0.5 — TUS Extensions, ASGI, Locks, Metrics, CLI
Adds four TUS protocol extensions, ASGI/CLI entrypoints, distributed-friendly locking, and first-class observability.
✨ Highlights
TUS protocol extensions
- Concatenation extension —
Upload-Concat: partial/final. Split uploads and merge server-side across all backends (SQLite, S3, GCS, Azure). - Upload-Defer-Length extension — create with
Upload-Defer-Length: 1and supply the length on a later PATCH. - Multi-algorithm checksum —
Upload-Checksumnow accepts sha1, sha256, md5, and crc32. - X-HTTP-Method-Override — allow PATCH/DELETE tunneled through POST for restrictive proxies.
New interfaces
TusASGIApp— mount directly into FastAPI / Starlette / uvicorn stacks.- CLI —
resumable-upload serveto launch a server in one command.
Scale-out & concurrency
LockBackend— pluggable locking with InMemory (default) and Redis backends, making concurrent PATCH safe across multiple workers.- Parallel uploads —
TusClient(parallel_uploads=N)splits a file into N partial uploads transferred concurrently, then concatenates into the final upload.
Observability
- Prometheus metrics —
/metricsendpoint with upload counters and histograms. - Client hooks — retry and progress callbacks for instrumentation.
Storage & fingerprinting
PartialMD5fingerprint plus support for arbitraryCallablefingerprints — much faster resume on large files.URLStoragebackends —InMemoryURLStorageandSQLiteURLStorageenable cross-session resume on the client.
🐛 Fixes
fix(server): applyUpload-Expiresto concatenated final uploads (31eeebf).fix(server): preserve legacyStoragesubclass compatibility (0e4a673).
🧰 Chores
- Scope
tytype checking to theresumable_uploadpackage (1f904da). - Examples reorganized into
examples/server/andexamples/client/, with new demos for error handling and success messaging.
📦 Install
pip install -U resumable-upload
# Cloud backends:
pip install -U "resumable-upload[s3]" # boto3
pip install -U "resumable-upload[gcs]" # google-cloud-storage
pip install -U "resumable-upload[azure]" # azure-storage-blob
# Redis lock backend:
pip install -U "resumable-upload[redis]"Full Changelog: v0.0.4...v0.0.5