Starfish durable offline write-queue — dedup-by-id, claim, retry, reconnect-drain, persisted per identity, framework-free
Project description
starfish-outbox
A durable, per-identity offline write-queue — the client-side complement to the
server-side queuing extension.
Generic over the queued item: you own what an item is, supply its dedup id, and a
send that performs the real write. The queue handles persistence (write-through to a
LocalCache), dedup-by-id, single-shot claim (no double-send), attempt counting with
auto-retry-then-fail, crash-safe recovery of stuck sending entries, and subscriptions.
drain_outbox is connectivity-agnostic — you trigger it on whatever reconnect signal you have.
Install
pip install starfish-outbox
Usage
from starfish_outbox import OutboxQueue, drain_outbox
queue: OutboxQueue = OutboxQueue(local_cache) # local_cache: async get_item / set_item / remove_item
await queue.hydrate(f"outbox.{user_id}")
# Enqueue a write while offline (the id is yours to thread into the eventual write):
await queue.enqueue(write_id, {"path": path, "body": body})
# Drain on reconnect:
async def send(entry):
await client.push(entry.item["path"], entry.item["body"], base_hash_for(entry.item["path"]))
await drain_outbox(queue, send, max_attempts=5)
Mutating methods (enqueue / claim / remove / retry / …) are async because each
writes through to the cache; get / pending / subscribe are synchronous. JSON-compatible
on disk with the TypeScript @drakkar.software/starfish-outbox.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file starfish_outbox-3.0.0a21.tar.gz.
File metadata
- Download URL: starfish_outbox-3.0.0a21.tar.gz
- Upload date:
- Size: 5.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9e98d427133d20e855a01030448fd0dc04116b5bb56f952d6a64f46c02e505d
|
|
| MD5 |
bd754d2661f3b458f96ba23d2d897104
|
|
| BLAKE2b-256 |
ffe57d0d50d67c57ee633313c79b0adc34cdf46865cd26cd7412679230cd8c74
|
File details
Details for the file starfish_outbox-3.0.0a21-py3-none-any.whl.
File metadata
- Download URL: starfish_outbox-3.0.0a21-py3-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15176c1089c187430c37fc9b25f964ec6842be700d2b6dd00d5af201979c7e13
|
|
| MD5 |
8293e9885b0c3c98cb84a1f4037845a7
|
|
| BLAKE2b-256 |
c35d7b97b9e92b0a234b6cf2e1c8411f7ab28fbdc94b6c89b0f762d1c3c01156
|