Persistent JSON message queues for Python - native bindings for local and remote IPC
Project description
Plasmite Python Bindings (v0)
These bindings wrap the libplasmite C ABI via ctypes.
Installation
Wheels are designed to bundle native assets under plasmite/_native/:
libplasmite.(dylib|so)for ctypes loadingplasmiteCLI binary (invoked via Python console script entrypoint)
Using uv (recommended)
uv tool install plasmite
For project dependencies in a uv-managed workspace:
uv add plasmite
Runtime load order is:
PLASMITE_LIB_DIRoverride (development escape hatch)- Bundled
plasmite/_native/libplasmite.(dylib|so)absolute path - System linker fallback (
plasmite/libplasmite)
For development/testing from this repo, see Install & Test below.
Build Requirements
- Python 3.10+
libplasmitebuilt from this repo (cargo build -p plasmite) for local development
Install & Test
From the repo root:
cargo build -p plasmite
Canonical repo-root command:
just bindings-python-test
Equivalent manual commands (from bindings/python):
uv venv
source .venv/bin/activate
PLASMITE_LIB_DIR="$(pwd)/../../target/debug" uv pip install -e .
PLASMITE_LIB_DIR="$(pwd)/../../target/debug" PLASMITE_BIN="$(pwd)/../../target/debug/plasmite" python3 -m unittest discover -s tests
Build a wheel with bundled native assets from a specific SDK directory:
PLASMITE_SDK_DIR=/path/to/sdk python -m build
Conformance runner (manifest parity with Rust/Go/Node):
cargo build -p plasmite
cd bindings/python
PLASMITE_LIB_DIR="$(pwd)/../../target/debug" \
PLASMITE_BIN="$(pwd)/../../target/debug/plasmite" \
python3 cmd/plasmite_conformance.py ../../conformance/sample-v0.json
Usage
from plasmite import Client, Durability, NotFoundError
with Client("./data") as client:
with client.pool("docs", 64 * 1024 * 1024) as pool:
msg = pool.append({"kind": "note", "text": "hi"}, ["note"], Durability.FAST)
print(msg.seq, msg.tags, msg.data["text"])
fetched = pool.get(msg.seq)
print(fetched.data["text"])
for item in pool.tail(tags=["note"], max_messages=1, timeout_ms=100):
print(item.seq, item.tags, item.data)
try:
client.open_pool("missing")
except NotFoundError:
print("pool not found")
Pool.append(...), Pool.get(...), Pool.tail(...), and Pool.replay(...) return typed Message values by default.
Use append_json(...) / get_json(...) only when you explicitly need raw wire bytes.
Pool.tail(..., tags=[...]) uses exact tag matching and composes with other filters using AND semantics.
Error behavior
- Invalid local arguments raise
ValueError/TypeError. - ABI/runtime failures raise typed subclasses of
PlasmiteError(NotFoundError,AlreadyExistsError,BusyError,PermissionDeniedError,CorruptError,IoError,UsageError,InternalError). - All
PlasmiteErrorvalues exposekind,path,seq, andoffsetwhen present.
Troubleshooting
- Missing pool directory: pool creation creates parent directories automatically. If you call
open_pool(...)on a missing pool, catchNotFoundErroror useclient.pool(...)to create-or-open. - Permission denied: choose a writable pool directory (
Client("/path/to/pools")) and verify directory permissions/ownership. Errors includeerr.pathwhen available.
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 Distributions
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 plasmite-0.5.1.tar.gz.
File metadata
- Download URL: plasmite-0.5.1.tar.gz
- Upload date:
- Size: 15.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f35de89dfb4e41cf211ee87fcfa973850428c757dcbf6bfbbc40bd055280287f
|
|
| MD5 |
836cd7bb13bc28fbc5ef6de695a16464
|
|
| BLAKE2b-256 |
9c9af6595e57f598b960f3aac8b3448bf12310002824c40517ddc9d82653adc2
|
File details
Details for the file plasmite-0.5.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: plasmite-0.5.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4eac888fc3982b2213ef400e026f85a070bc2369895c82739b8335a571048d0a
|
|
| MD5 |
d8798b663b29c6c4702a93b42c950ff9
|
|
| BLAKE2b-256 |
3ad8e9156db8368d2581664c5dcaa0b93f274c22507840c90dd0fde70e76797e
|
File details
Details for the file plasmite-0.5.1-cp311-cp311-macosx_11_0_universal2.whl.
File metadata
- Download URL: plasmite-0.5.1-cp311-cp311-macosx_11_0_universal2.whl
- Upload date:
- Size: 5.5 MB
- Tags: CPython 3.11, macOS 11.0+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
61089396ff2774fb5562f4b4aa82a0544ee212423c520c32df20652c08c0830c
|
|
| MD5 |
8050a99b458bc801c32c92761baa3dce
|
|
| BLAKE2b-256 |
38f8617bdde7c1be5c258f7816c82ceff46e0f5015fa102083a1758665583144
|
File details
Details for the file plasmite-0.5.1-cp311-cp311-macosx_10_12_universal2.whl.
File metadata
- Download URL: plasmite-0.5.1-cp311-cp311-macosx_10_12_universal2.whl
- Upload date:
- Size: 5.8 MB
- Tags: CPython 3.11, macOS 10.12+ universal2 (ARM64, x86-64)
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c7ac008b1e5f48f4fc8f5d5a8dadd66535c876bf2c566d85214a11ad8ac89d3
|
|
| MD5 |
eca813a411120ce123be845bf3718593
|
|
| BLAKE2b-256 |
8593abafd59591dcf522625f63c68aa0ba12a873cc6d027449c460e1138a74fb
|