Skip to main content

Lightweight inter-process RPC framework with a high-performance native core

Project description

Daffi

License: MIT

📖 Full documentation: https://600apples.github.io/daffi/


Daffi is a lightweight inter-process RPC framework with a compiled core. It lets Python processes (and browser JavaScript clients) call each other's functions over TCP, Unix sockets, or WebSocket — with no serialisation boilerplate, no extra broker process required for direct connections, and throughput up to ~1.2 GiB/s for large binary payloads.


Three building blocks

Class Role
Service Listens on a TCP port. Exposes @callback functions; Clients call them.
Router Pure message forwarder. Needed for the multi-worker layout. Has no callbacks of its own.
Client Connects to a Router or Service. Can issue calls and/or expose its own @callback functions.

Both Service and Client can expose @callback functions. The topology determines the role:

  • Client → Service: only the Service exposes callbacks; Clients are pure callers.
  • Client → Router → Worker: any Client can expose callbacks (acting as a worker), issue calls (acting as a caller), or do both at the same time — all through the Router.

Installation

pip install daffi

Quick start — direct layout (Client → Service)

service.py:

from daffi import Service, callback

@callback
def add(a: float, b: float) -> float:
    return a + b

@callback
def greet(name: str) -> str:
    return f"Hello, {name}!"

svc = Service(app_name="my-service", host="127.0.0.1", port=5000)
svc.start()
svc.join()          # block until svc.stop() is called

client.py:

from daffi import Client

client = Client(app_name="my-client", host="127.0.0.1", port=5000)
conn = client.connect()

result = conn.rpc(timeout=5).add(1, 2)     # → 3.0
greeting = conn.rpc(timeout=5).greet("Alice")  # → "Hello, Alice!"

client.stop()

Run service.py first, then client.py in a second terminal.


Router layout (Client → Router → Worker)

Use a Router when you need many workers behind a single address, or want load-balanced / broadcast calls.

router.py:

from daffi import Router

router = Router(host="127.0.0.1", port=6000)
router.start()
router.join()

worker.py:

from daffi import Client, callback

@callback
def process(task: str) -> str:
    return f"done: {task}"

client = Client(app_name="worker-1", host="127.0.0.1", port=6000)
client.connect()
client.join()   # block until Ctrl+C / SIGTERM

caller.py:

from daffi import Client

client = Client(app_name="caller", host="127.0.0.1", port=6000)
conn = client.connect()

# RPC — routed to one worker (round-robin)
result = conn.rpc(timeout=5).process("job-42")

# Cast — sent to *all* workers, returns {worker_name: result}
all_results = conn.cast(timeout=5).process("broadcast-job")

client.stop()

Call styles

All styles are accessed through the connection handle returned by client.connect(). Every call method returns a proxy; call the desired remote function by attribute access.

conn = client.connect()

rpc — blocking, one worker (round-robin)

When multiple workers expose the same function, rpc() picks one using a round-robin strategy — each call goes to the next worker in rotation, spreading load evenly. Pin to a specific worker with receiver= when you need affinity.

Round-robin only applies in the Router topology (many workers behind one Router). In the Client → Service topology there is always exactly one receiver — the Service itself — so omitting receiver= is the norm and specifying it is redundant.

result = conn.rpc(timeout=5).echo("hello")
result = conn.rpc(timeout=5, serde=SerdeFormat.JSON).add(1, 2)

# Router topology only: pin to a specific worker by name (bypasses round-robin)
result = conn.rpc(timeout=5, receiver="worker-1").process("task")

rpc_nowait — fire-and-forget

conn.rpc_nowait().notify("event happened")

cast — broadcast to all workers, collect results

Most useful in the Router topology where multiple workers expose the same function. The call fans out to every matching worker simultaneously and returns a {worker_name: result} dict once all have responded.

# Returns {worker_name: result, ...}
results = conn.cast(timeout=5).echo("ping")
# e.g. {"worker-01": "ping", "worker-02": "ping", ...}

cast_nowait — broadcast, fire-and-forget

conn.cast_nowait().notify("broadcast event")

stream — chunked send with backpressure

@callback
def receive_chunk(data: bytes) -> None: ...

# Sends each chunk and waits for acknowledgement before sending the next
await_result = conn.stream(serde=SerdeFormat.OPAQUE)
for chunk in my_large_object_chunks:
    await_result.receive_chunk(chunk)

stream_nowait — chunked send, fire-and-forget

conn.stream_nowait(serde=SerdeFormat.OPAQUE).receive_chunk(chunk)

Serialisation formats

Pass serde=SerdeFormat.X to any call method.

Format Import Notes
PICKLE from daffi import SerdeFormat Default. Any Python object.
JSON same Human-readable; requires JSON-serialisable values.
OPAQUE same Raw bytes or string — zero-copy, fastest for binary and string data.
MSGPACK same Compact binary; requires pip install daffi[msgpack].
from daffi import Client, SerdeFormat

conn = client.connect()
result = conn.rpc(serde=SerdeFormat.JSON, timeout=5).add(1, 2)

@callback decorator

Decorate any top-level function or bound method to make it callable remotely. Registration is global and happens at import time.

from daffi import callback

@callback
def echo(payload):
    return payload

@callback
def compute(x: int, y: int) -> int:
    return x * y

Concurrent callback execution (workers)

By default every node processes incoming callbacks inline on a single thread (workers=1). Callbacks are executed one at a time — a slow callback blocks the next one.

Pass workers=N (N ≥ 2) to spin up a thread pool so that up to N callbacks run in parallel:

import time
from daffi import Service, callback

@callback
def slow_task(n: int) -> int:
    time.sleep(1)        # simulates I/O-bound work
    return n * n

# workers=1 (default) — three concurrent callers would each wait ~1 s
svc = Service(host="127.0.0.1", port=5000, workers=1)

# workers=4 — three concurrent callers all finish in ~1 s
svc = Service(host="127.0.0.1", port=5000, workers=4)

svc.start()
svc.join()

The same parameter works on a Client acting as a worker in the Router topology:

from daffi import Client, callback

@callback
def process(task: str) -> str:
    time.sleep(0.5)
    return f"done: {task}"

# This single Client instance can now handle up to 8 concurrent incoming calls
client = Client(app_name="worker-1", host="127.0.0.1", port=6000, workers=8)
client.connect()
client.join()

When to increase workers:

  • Callbacks do I/O (network calls, file reads, database queries).
  • Callbacks are fast and pure — keep workers=1 (no threading overhead).

For CPU-bound callbacks, Python's GIL limits true parallelism within one process. Run multiple worker nodes behind a Router instead of increasing workers on a single node.


Event handlers

Receive connected / disconnected notifications for nodes joining or leaving the network.

def on_event(event: dict):
    # event["type"]   → "connected" or "disconnected"
    # event["member"] → app_name of the node that changed state
    print(f"[{event['type']}] {event['member']}")

svc = Service(host="127.0.0.1", port=5000)
svc.add_event_handler(on_event)
svc.start()

Both Service and Client support add_event_handler.


Unix sockets

Use unix_sock_path instead of host/port for inter-process communication on the same machine.

svc = Service(unix_sock_path="/tmp/daffi.sock")
svc.start()

client = Client(unix_sock_path="/tmp/daffi.sock")
conn = client.connect()

TLS

# Server (Router or Service)
router = Router(
    host="127.0.0.1", port=6000,
    tls=True,
    cert_file="/path/to/server.crt",
    key_file="/path/to/server.key",
)
router.start()

# Client — supply ca_file to verify the server certificate,
# or leave it empty to skip verification
client = Client(
    host="127.0.0.1", port=6000,
    tls=True,
    ca_file="/path/to/ca.crt",
)
conn = client.connect()

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

daffi-3.0.0.tar.gz (128.7 kB view details)

Uploaded Source

Built Distributions

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

daffi-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

daffi-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

daffi-3.0.0-cp313-cp313-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

daffi-3.0.0-cp313-cp313-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

daffi-3.0.0-cp313-cp313-macosx_13_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

daffi-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

daffi-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

daffi-3.0.0-cp312-cp312-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

daffi-3.0.0-cp312-cp312-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

daffi-3.0.0-cp312-cp312-macosx_13_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

daffi-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

daffi-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

daffi-3.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

daffi-3.0.0-cp311-cp311-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

daffi-3.0.0-cp311-cp311-macosx_13_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

daffi-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

daffi-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl (3.9 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

daffi-3.0.0-cp310-cp310-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

daffi-3.0.0-cp310-cp310-manylinux_2_28_aarch64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

daffi-3.0.0-cp310-cp310-macosx_13_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

File details

Details for the file daffi-3.0.0.tar.gz.

File metadata

  • Download URL: daffi-3.0.0.tar.gz
  • Upload date:
  • Size: 128.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for daffi-3.0.0.tar.gz
Algorithm Hash digest
SHA256 5b7ceda92062d1bf0dc2d4cd7845921836eed3eb4348207ba74ecbac8c1a5444
MD5 d12e44e4c623028c12cd33ea6490b6d7
BLAKE2b-256 ca7b21174fe9d75a696b0cc57cb67f31d3fe639846fe42b9669d4202ba476e6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0.tar.gz:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0c0486cd03dec7c70236d50a9c0883a3cd78d4a38e4fb369516c5dbc8c22275a
MD5 21e004f0c2b89e14e94089c60ba8b550
BLAKE2b-256 517d2ca16e620368d9e3e64b4ec682755c1e63995b3409a328e9cc2f1ead1f67

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e26b4716fb0f4fe792616efb978391d2a64430d312903a208fab6d73f5babedf
MD5 6724296916eabcfc1925f4063f827bad
BLAKE2b-256 b03cf45ff893ee2b754d406235c045ecd28ba4bcabacfe2431909d9c78e15351

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 efe6acc6f6a1a469014e90030b38e88f05bd0f74e3ee167aed6d63f4bdabafdc
MD5 cbe56798f8cf1fad1d0930b70544d266
BLAKE2b-256 0ccae88e4841c3d24eec693346103300f8318ae43520125df1c87e306d9d69af

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 48d0582244e76e5cb3cbec8f7231b39b8770641acdc60dfc54f7c37dea705d63
MD5 ca41776c52ea39ee3e5e4e9f9d3f2547
BLAKE2b-256 e1c6e5bd0677aabda1e5edec05784c83fb676f069bd6b4b475b054a87944ebd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp313-cp313-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 dc4754af32f4c863d162ed3d1a58d4b555197a4a9ad8aa4e69075e4cc0f564f7
MD5 91337465fed33fc170f54d417bbf4d3c
BLAKE2b-256 84678d458ec569630d0ab478329aab828edd26cda3028f64e3b9c48ab3c10c7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp313-cp313-macosx_13_0_arm64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3b56f9478058000a6e98241140e661f7ae9f2cab6b20e20799d67beb11516037
MD5 f46e5ccc2aa1e446a2cb7ee209ea74df
BLAKE2b-256 f90649e4d35a813cb758d5237e5c3af636e79b9410d8f5f4996c2153980dc020

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3727eb6ec2c8b86ec59096747b4c503b6faeb10db922eb66ce47e8a35e811e74
MD5 78413e743b457c1af777299d9ab0cf96
BLAKE2b-256 acd6bbd1b80e3505c842e7d3cde69c88c3261bbfc11a449fe54c070ce422d170

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e4a33d2325f33a68cfd9a552c58f94c2abdc31e4c29c6c202ce5115590e5eef3
MD5 4e72067ce2463ec379af94655136b1f9
BLAKE2b-256 695c6dcb29e7ce9ba4e1ba134cca9d9b69eac074475950e7519f27c6d073542e

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 41db187e564857b67215f2e53ecd5ae5826f94e502c19028f8047e9cf15ab818
MD5 853034b5d6953113dd9499c3ef850e2d
BLAKE2b-256 2fbb30f5cf69a4f115059ab8c6606cf04dc0d7ef61298c45c27764326a46201b

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 7d39ada9f8691deb8940b7c61c9725603662d2c19b6931a5838616566a20e5c7
MD5 75a6c9eb741a29171dd11986e5c331f5
BLAKE2b-256 7a34903a9da9f6df8e442eccefb3a4f874799433170167b3aac2129adb161c1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp312-cp312-macosx_13_0_arm64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 260e9545339b5f203a20a14ee2b331d96a572f9d7f7f193d602685a10ec27217
MD5 2b196b3dcf57c85ddd51bdfd4329d496
BLAKE2b-256 4ff431c0c59ef2e368d5bf09d5ac59e28f0347d05f6b90a6d0f84c3749ed4cd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e85ed4833c44f8ac780907c2fcf50075b57ff19762ce44afa9224a4ffbd658ed
MD5 a3530d83481c82ab25ef4260c34e4746
BLAKE2b-256 cbb48afecb54b9d369cc681dcde9da2db1d4f74edc0153c53cadaa8b7edb6338

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4a338673412d2eb1b47181ad42a7396ddb9c0483d959d77393747ccbe96fbc4a
MD5 885e2465c3486a36223610bb13dc7515
BLAKE2b-256 a219c42bef978a0c9f5237d9c784717fc87e55bef1b3a841b9b917c2674ebc75

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1f93dd10e0e89642be2b02fa12192390a1261d98b184670e79c1ccb95b57a91d
MD5 46c512dfb3f9db26dcd69f1dac0ef6c2
BLAKE2b-256 7d8eb086d1120ec4085a00ae473285d22d98489a50971b6e393986df409cb90a

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 d92b0c4f4e1c3a56d53916b5875c0c6d65e37e6664d8507be3b4b90714065462
MD5 732748ba5895a8a869a9f07ae960979c
BLAKE2b-256 be56c70880637d70441c6a5fa7f70e760d76b5869fd1059ade626783c334c70c

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp311-cp311-macosx_13_0_arm64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2ff04efcbc6d0eefb26b42331493a592863cd1bb39551a395c1f79c0f924fcd8
MD5 bafda6e1b41d12e5302acfc3793ff425
BLAKE2b-256 78339ac266e97c9c867a3694183c79de4dcd5722f4e5032c54c58032050fb98e

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 84e50bf394834d851619c68b5b4129921b5bfd7d01ef2779ae3d10dabe67034b
MD5 047db030bd02889dd1efea7e0df6b0b3
BLAKE2b-256 36c4168e97357bf7fe366cabd1376a10dcd0e03617d29027bbe0a27aba10f3cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9efd5a05afbaec73747fec6feee2addf95e8deb18b5b0227f1dc993c8865a64e
MD5 8cf8ed59603f35a4d7558c134f21dbe4
BLAKE2b-256 d0ba1ff2b5f84fac713c6b030a182d4827092cf08a2217aaf7453cff71d3ea90

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 de4d50f43a8e7012e2063f87ac2657d91e786899da7fea020fda78cdc42053c2
MD5 59b5826a190b3c7a6ad0aefa7f12a5de
BLAKE2b-256 abeb8554cd518138aa3185e709656dab981832e7cc165b43af375acfac2dda78

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: wheels.yml on 600apples/daffi

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

File details

Details for the file daffi-3.0.0-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for daffi-3.0.0-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 2e8ed5f60e33c2d0890ab6e1d46cf712a1603508edbea0cdcb9ca5c50f254ca8
MD5 8cfbadb17fb8da9e277856222aeff7fb
BLAKE2b-256 0e79a0e60e3eff4d6d3de70e57d1551a7159be7a6e525f11d6344b8cdfe95403

See more details on using hashes here.

Provenance

The following attestation bundles were made for daffi-3.0.0-cp310-cp310-macosx_13_0_arm64.whl:

Publisher: wheels.yml on 600apples/daffi

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