Skip to main content

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 loading
  • plasmite CLI 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:

  1. PLASMITE_LIB_DIR override (development escape hatch)
  2. Bundled plasmite/_native/libplasmite.(dylib|so) absolute path
  3. System linker fallback (plasmite / libplasmite)

For development/testing from this repo, see Install & Test below.

Build Requirements

  • Python 3.10+
  • libplasmite built 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 PlasmiteError values expose kind, path, seq, and offset when present.

Troubleshooting

  • Missing pool directory: pool creation creates parent directories automatically. If you call open_pool(...) on a missing pool, catch NotFoundError or use client.pool(...) to create-or-open.
  • Permission denied: choose a writable pool directory (Client("/path/to/pools")) and verify directory permissions/ownership. Errors include err.path when available.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

plasmite-0.6.0.tar.gz (15.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

plasmite-0.6.0-cp311-cp311-win_amd64.whl (5.0 MB view details)

Uploaded CPython 3.11Windows x86-64

plasmite-0.6.0-cp311-cp311-macosx_11_0_universal2.whl (5.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

plasmite-0.6.0-cp311-cp311-macosx_10_12_universal2.whl (6.0 MB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)

File details

Details for the file plasmite-0.6.0.tar.gz.

File metadata

  • Download URL: plasmite-0.6.0.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

Hashes for plasmite-0.6.0.tar.gz
Algorithm Hash digest
SHA256 a8094b9f58c94bf99d8c57d544255fa66fd4348c139053484310749549f37f08
MD5 b6a6f2add5d8ff84999851583a1c5bc8
BLAKE2b-256 09f9e7d65c12ebd177f175406ef16d9aa7f218083f5510e95ef9d67f58a05799

See more details on using hashes here.

File details

Details for the file plasmite-0.6.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: plasmite-0.6.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 5.0 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

Hashes for plasmite-0.6.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2a5da79b92118810d3ecf3d664eacafa160f083f4de41fd0436c44966f8cb87d
MD5 3c152bc989f2167915c5ed916979a363
BLAKE2b-256 9089f56c41701d71c25667803deef08ccc3a30568f82cacba34261d075339369

See more details on using hashes here.

File details

Details for the file plasmite-0.6.0-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for plasmite-0.6.0-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 1f022dc3af723960cce67f2a2cc6c032c25add49d57408cd16293ee5691b2ed9
MD5 9b9cf3b08dcb955080a45c9f83a7f297
BLAKE2b-256 9246cda37ecccc525b4604418414a73813d0fef86056a797ffe738dcc04f93c7

See more details on using hashes here.

File details

Details for the file plasmite-0.6.0-cp311-cp311-macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for plasmite-0.6.0-cp311-cp311-macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f28f4b0ef653041b5f63a361db6c775f6463f696b29c7c38f79790836bf689d0
MD5 d8f560f11bde4ded24d985d802cdeb00
BLAKE2b-256 1a5b544552d575cf7f9b5591db494c644787fc06385050b61d4e546ff9944775

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page