Skip to main content

spoke-connect (Python)

PyPI package spoke-connect: SPOKE Connect session-core bindings (generated uniffi Python + native spoke_connect / libspoke_connect).

Packaging contract: connect-binding-channels.md §3.3.

Install

At spoke lockstep tag vX.Y.Z:

pip install spoke-connect==X.Y.Z

Platform wheels (py3-none-<platform>) ship for manylinux_2_35_x86_64, macosx_11_0_arm64, and win_amd64. Each wheel bundles that platform's shared library beside the spoke_connect module (uniffi ctypes loader contract). Version locksteps with the spoke monorepo SemVer / git tag vX.Y.Z.

Release publishes via Trusted Publishing on the top-level release.yml workflow (publish-pypi job, OIDC). The PyPI Pending publisher for spoke-connect binds repository 42ch-dev/spoke to that workflow filename; the first successful stable-tag publish activates the project on PyPI.

Usage

import spoke_connect

peer_id = spoke_connect.derive_peer_id_from_ed25519_pubkey(pubkey)
protocol = spoke_connect.protocol_version()  # 1

Transport / WebSocket stays in the host product.

Build features

Artifact Cargo features Notes
Committed spoke_connect/ ffi,remote-adapter Production surface: RemoteAdapterFFI, MultiPeerRouterFFI, Transport, loopback_transport_pairno start_loopback_smoke_host
Local loopback smoke cdylib + bindings ffi,remote-adapter,ffi-smoke-host Adds loopback smoke host FFI for the RemoteAdapter section

ffi-smoke-host is non-default and is not implied by remote-adapter or ffi. Full loopback smoke procedure: Smoke/README.md.

RemoteAdapter FFI surface

With remote-adapter enabled, the binding ships the additive remote-adapter surface: RemoteAdapterFFI (single peer), MultiPeerRouterFFI (multi-peer routing), the callback Transport interface, and the in-memory loopback helpers.

Transport contract

The callback Transport is a message-oriented interface: one envelope per call, blocking receive, idempotent close.

Method Behavior
send(envelope) Accepts exactly one connect envelope's bytes per call
recv() Blocks until the next inbound envelope arrives or the connection closes; returns exactly one envelope per call
close() Releases transport resources; idempotent — closing either end of a connection fails the peer's pending recv like a real connection drop

The surface bounds messages at one envelope per call; byte-stream carriers apply length-prefix (or equivalent) delimiting before handing envelopes to the adapter.

MultiPeerRouterFFI

new_multi_peer_router_ffi() returns the router as a synchronous object over the same runtime: a peer registry (register_peer(adapter) accepts an established RemoteAdapterFFI and returns its peer_id; unregister_peer(peer_id); list_peers()), the BaselinePorts six families routed per call to exactly one capable peer, and the two HostManifestPort aggregation views — the composed get_host_capability_manifest() and the per-peer list_peer_host_capability_manifests(). Selection matches each registered peer's cached HostCapabilityManifest: required capability, exact namespace, soft role preference, and a deterministic lowest-peer_id tie-break.

Layout

Path Contents
pyproject.toml Packable project (name = spoke-connect; lockstep SemVer)
setup.py Platform wheel tag hook (py3-none-<platform>; no sdist)
spoke_connect/ Import package — committed generated __init__.py + host native for smoke
native/ Staging contract for non-host RIDs (see native/README.md)
Smoke/ Golden-parity + RemoteAdapter loopback smoke — see Smoke/README.md

Maintainer: regenerate → stage native → wheel → smoke

Commands from the repository root (local nightly convention for cargo: cargo +nightly …).

Production regenerate uses ffi,remote-adapter only (no ffi-smoke-host). Full loopback smoke recipe: Smoke/README.md.

# 1. Build the production ffi cdylib (must run before generate — default build replaces the stub)
cargo +nightly build -p spoke-connect --features ffi,remote-adapter --release

# 2. Generate bindings (first-party uniffi 0.32)
cargo +nightly run -p spoke-connect --features ffi,bindgen-cli,remote-adapter --bin uniffi-bindgen -- \
  generate --library target/release/libspoke_connect.dylib \
  --language python --out-dir crates/spoke-connect/bindings/python/spoke_connect
mv crates/spoke-connect/bindings/python/spoke_connect/spoke_connect.py \
   crates/spoke-connect/bindings/python/spoke_connect/__init__.py

# 3. Stage host native beside the module (darwin arm64 example)
cp target/release/libspoke_connect.dylib \
  crates/spoke-connect/bindings/python/spoke_connect/
install_name_tool -id @rpath/libspoke_connect.dylib \
  crates/spoke-connect/bindings/python/spoke_connect/libspoke_connect.dylib

# 4. Golden-parity smoke (no wheel required)
PYTHONPATH=crates/spoke-connect/bindings/python \
  python3 -m unittest discover -s crates/spoke-connect/bindings/python/Smoke -v

# 5. Build platform wheel (host RID or CI artifact — recipe: tooling/connect/build-python-wheel.sh)
./tooling/connect/build-python-wheel.sh

# Release: all three wheels from build-connect-ffi artifacts
./tooling/connect/build-python-wheels-from-ffi.sh ffi-assembled

v1 publishes platform wheels only (no sdist): a source install cannot produce the native library without a Rust toolchain.

Committed natives (in-tree smoke)

Wheel platform (PEP 425) Native Status
macosx_11_0_arm64 spoke_connect/libspoke_connect.dylib Committed — maintainer-built (release)
manylinux_2_35_x86_64 libspoke_connect.so CI — stage from release.yml build-connect-ffi (linux-x64, ubuntu-22.04) before wheel build
win_amd64 spoke_connect.dll CI — stage from build-connect-ffi (win-x64) before wheel build

Reference

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

spoke_connect-0.9.1-py3-none-win_amd64.whl (2.8 MB view details)

Uploaded Python 3Windows x86-64

spoke_connect-0.9.1-py3-none-manylinux_2_35_x86_64.whl (1.5 MB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

spoke_connect-0.9.1-py3-none-macosx_11_0_arm64.whl (4.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file spoke_connect-0.9.1-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for spoke_connect-0.9.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 76782a715941d6b50fba56bdb264a64d85a244270109e43ee809b4d4df69560b
MD5 5ad9a0739254c0593536850e949591f5
BLAKE2b-256 6a74960fa5479cc7fc5d280c8e14dc066f4efcc13260d9149356e1395088e233

See more details on using hashes here.

Provenance

The following attestation bundles were made for spoke_connect-0.9.1-py3-none-win_amd64.whl:

Publisher: release.yml on 42ch-dev/spoke

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spoke_connect-0.9.1-py3-none-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spoke_connect-0.9.1-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 a6f9c9306e96afdfc63fa5055eaf3c34b4e09c9319f54a1cc0b937defc7aa763
MD5 ac685f18b29c6f30f78fc76196f933b7
BLAKE2b-256 effa03e28ec94d33511337311c478168634223bc390dffa325befe6d2e4b4ae1

See more details on using hashes here.

Provenance

The following attestation bundles were made for spoke_connect-0.9.1-py3-none-manylinux_2_35_x86_64.whl:

Publisher: release.yml on 42ch-dev/spoke

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spoke_connect-0.9.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spoke_connect-0.9.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 05096a8e69566cae257ea98e1341291edd860e1e261409f9a84039093e15fd9d
MD5 5f2ce7144a39175c0d19b13475a65bb1
BLAKE2b-256 1c8476bf0ba5dd6aa4ba739c7427366d5bc5b889d8805eac4f6a149dfda8359b

See more details on using hashes here.

Provenance

The following attestation bundles were made for spoke_connect-0.9.1-py3-none-macosx_11_0_arm64.whl:

Publisher: release.yml on 42ch-dev/spoke

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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