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.5.1.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.5.1-cp311-cp311-win_amd64.whl (4.8 MB view details)

Uploaded CPython 3.11Windows x86-64

plasmite-0.5.1-cp311-cp311-macosx_11_0_universal2.whl (5.5 MB view details)

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

plasmite-0.5.1-cp311-cp311-macosx_10_12_universal2.whl (5.8 MB view details)

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

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

Hashes for plasmite-0.5.1.tar.gz
Algorithm Hash digest
SHA256 f35de89dfb4e41cf211ee87fcfa973850428c757dcbf6bfbbc40bd055280287f
MD5 836cd7bb13bc28fbc5ef6de695a16464
BLAKE2b-256 9c9af6595e57f598b960f3aac8b3448bf12310002824c40517ddc9d82653adc2

See more details on using hashes here.

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

Hashes for plasmite-0.5.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4eac888fc3982b2213ef400e026f85a070bc2369895c82739b8335a571048d0a
MD5 d8798b663b29c6c4702a93b42c950ff9
BLAKE2b-256 3ad8e9156db8368d2581664c5dcaa0b93f274c22507840c90dd0fde70e76797e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for plasmite-0.5.1-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 61089396ff2774fb5562f4b4aa82a0544ee212423c520c32df20652c08c0830c
MD5 8050a99b458bc801c32c92761baa3dce
BLAKE2b-256 38f8617bdde7c1be5c258f7816c82ceff46e0f5015fa102083a1758665583144

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for plasmite-0.5.1-cp311-cp311-macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 1c7ac008b1e5f48f4fc8f5d5a8dadd66535c876bf2c566d85214a11ad8ac89d3
MD5 eca813a411120ce123be845bf3718593
BLAKE2b-256 8593abafd59591dcf522625f63c68aa0ba12a873cc6d027449c460e1138a74fb

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