Python bindings for mq-bridge (full: all brokers incl. Kafka)
Project description
mq-bridge Python bindings
Thin Python bindings for the Rust mq-bridge core.
Install
pip install mq-bridge-py is all you need. Both packages install the same import path: mq_bridge.
| Package | Install | Includes |
|---|---|---|
| Default | pip install mq-bridge-py |
Full set on glibc-Linux/macOS/Windows-x64 (Kafka, AWS, gRPC, MongoDB, SQLx + basic); reduced set automatically on musl/Alpine and Windows arm64 (no Kafka/SQLx/gRPC) |
| Basic | pip install mq-bridge-py-basic |
HTTP, NATS, MQTT, AMQP, WebSocket, ZeroMQ, MongoDB, AWS — the lean set on every platform |
mq-bridge-py resolves by platform automatically: pip installs the full wheel on glibc-Linux/macOS/Windows-x64 and the reduced (basic-feature) wheel on musl/Alpine and Windows arm64 — no marker or manual choice needed. Kafka/SQLx/gRPC/static-IBM-MQ don't build on those targets, so calling them there raises a clear runtime error; everything else works identically. Install mq-bridge-py-basic only if you explicitly want the lean build on a full-support system too. Memory and file endpoints are always present.
The public API stays close to mq-bridge itself:
Route.from_file(path, name=None)loads a route from a YAML/JSON file. The three constructors differ only by source:from_file(path),from_str(in-memory YAML/JSON string),from_config(Pythondict)- The
nameis optional: pass it to pick one entry out of aroutes:/publishers:document, or omit it to treat the whole config as a single bare route/endpoint body Route.with_handler(...)attaches a rawMessagehandler, with lazyjson()/text()readers andwith_json()/with_payload()response helpersRoute.add_handler(kind, ...)uses mq-bridge'skinddispatch and delivers decoded JSONRetryableErrorandNonRetryableErrorlet Python handlers signal retry intentPublisher.from_file(path, name=None)(plusfrom_str/from_config) builds a publisher endpoint
from_yaml / from_yaml_str remain as deprecated aliases for from_file / from_str.
Publisher.send_json(...)andPublisher.request_json(...)serialize Python JSON values in Rust
The Python surface is synchronous and blocking. Tokio, broker I/O, routing, and batching all stay in Rust.
Quick start: publish a message with no route/config file
For ad hoc testing (e.g. seeding a topic by hand) you don't need a route, a
handler, or a config file — Publisher.from_config takes a plain dict and
send_json blocks until the broker acks it:
from mq_bridge import Publisher
endpoint = {"kafka": {"brokers": "localhost:9092", "topic": "orders"}}
pub = Publisher.from_config(endpoint)
for i in range(5):
pub.send_json({"order_id": i, "amount": i * 10})
print("published 5 messages")
For a truly file-free one-off, paste the same lines into python -c "...".
Swap the endpoint dict for any other transport (nats, amqp, mqtt,
mongodb, memory, file, ...) — see Config types and schema
below for the full shape of each. send_json accepts an optional metadata
dict as a second positional argument (e.g. {'kind': 'order.created'}) and
Publisher has no close()/context-manager form, so let the script exit once
sends finish rather than reusing a long-lived instance across many short runs.
Config types and schema
mq-bridge-app can create and test route and endpoint JSON/YAML through its UI.
It does not replace your Python code or handlers, but it is useful when you want
a known-good connection and route shape before pasting the configuration into
Python. Load the generated config with Route.from_config, Route.from_file,
Publisher.from_config, or Publisher.from_file.
For the from_config / from_str mappings, mq_bridge.config ships
TypedDict definitions so editors autocomplete the config keys (input,
output, batch_size, every transport config, middleware, …):
from mq_bridge import Route
from mq_bridge.config import ConfigDocument
config: ConfigDocument = {
"routes": {
"orders": {
"input": {"memory": {"topic": "orders.in", "capacity": 1600}},
"output": {"response": {}},
"batch_size": 128,
}
}
}
route = Route.from_config(config, "orders")
These types are generated from the JSON Schema, which the extension produces on demand from the Rust models — there is no checked-in schema copy to drift:
from mq_bridge import config_schema
schema = config_schema() # the JSON Schema as a dict
config_schema() is handy for editor validation of YAML configs too — dump it
to a file and point your # yaml-language-server: $schema= line at it.
Regenerating the config types
mq_bridge/config.pyi and mq_bridge/config.py are generated — do not edit by
hand. Regenerate them whenever the Rust config models change (e.g. adding a
field or a new endpoint). Because the generator reads the schema from the
compiled extension, you must rebuild first:
# from python/mq-bridge-py/
uv run maturin develop # rebuild the extension
uv run --no-sync python scripts/gen_config_types.py # regenerate config.pyi / config.py
Then commit the updated config.pyi/config.py. tests/test_config_types.py
asserts the checked-in output matches the schema, so CI (the "Python package
smoke test" job) fails if you skip this after a models change.
Running a route
Route.run() blocks the calling thread until another thread calls stop() —
it deploys the route and then parks. This is convenient for a process whose only
job is the route, but it is a common trap: nothing after route.run() executes
until the route stops.
To keep running Python code after the route is up, use start() (non-blocking)
or the context-manager form:
route = Route.from_config(config, "orders_route").with_handler(handle)
# Non-blocking: deploys, returns, and runs on a background thread.
route.start()
publisher.send_json({"order_id": 42}, {"kind": "order.created"})
route.stop()
route.join() # optional: wait for a clean shutdown
# Or scope it to a block — starts on enter, stops + joins on exit:
with Route.from_config(config, "orders_route").with_handler(handle):
publisher.send_json({"order_id": 42}, {"kind": "order.created"})
Configuration/connection errors surface from start() itself, not from a
background thread. run() remains available for the blocking single-route case.
Pull-based consumer
Route is push-based: you attach a handler and the route drives it. When you
instead want to pull messages on your own schedule — e.g. to feed a
generator-style sink such as a dlt resource — use
Consumer. It wraps any input endpoint and hands batches back to Python:
from mq_bridge import Consumer
consumer = Consumer.from_config({"nats": {"subject": "orders", "url": "nats://localhost:4222"}})
while not consumer.exhausted:
batch = consumer.poll(max=500, timeout_ms=1000) # [] on timeout
if not batch:
continue
for message in batch:
handle(message.json())
consumer.commit() # ack only after handling
poll() receives up to max messages without acknowledging them;
commit() acks every batch returned since the last commit, advancing the
consumer offset (or removing them from the queue). Committing only after the
downstream write succeeds gives at-least-once delivery: a crash before commit()
re-delivers the batch. poll() returns [] once timeout_ms elapses with
nothing received (omit it to block until a message arrives), and sets
exhausted once a bounded source (e.g. a file) is fully drained — streaming
brokers never set it.
You must call
commit()— it is not optional. It is the only thing that tells the broker a batch is done. If you keep polling without committing:
- the consumer offset never advances, so every message is re-delivered on the next run (and you reprocess from the start);
- most brokers stop sending once their unacknowledged/prefetch window fills, so
poll()eventually stalls and returns nothing;- the uncommitted batches are held in memory pending their ack, so the process grows unbounded.
Commit after each batch you have durably handled (as in the loops above). If a batch fails downstream, simply don't commit it — it will be redelivered.
Per-batch tokens: poll_batch / ack / nack
When you need to ack or release specific batches (rather than everything since
the last commit), use the token form. poll_batch(max, timeout_ms) returns
(messages, token); ack(token) commits just that batch, and nack(token)
releases it for redelivery (nack() with no argument nacks every outstanding
batch). This is the shape a dlt resource wants — poll →
yield records → load package commits → ack(token) — and is demonstrated in
examples/dlt_source.py with the wiring brief in
examples/OMNILOAD_INTEGRATION.md.
messages, token = consumer.poll_batch(max=500, timeout_ms=1000) # ([], None) on timeout
if token is not None: # nothing returned on an idle timeout
# ... persist the batch downstream ...
consumer.ack(token) # or consumer.nack(token) to redeliver
Tokens stay outstanding until acked/nacked; commit() still acks every
outstanding batch at once, so don't mix the two styles on one consumer. On
cumulative-ack transports (Kafka), acking a later batch would implicitly ack the
earlier ones, so ack(token) must follow receive order — acking out of order
raises; ack the oldest outstanding batch first, or use commit(). Transports
that ack each batch individually (NATS JetStream, AMQP, MQTT) accept any order.
At-least-once + idempotent merge. Redelivery (after a nack, a missed
commit(), or an expired broker ack deadline) means a record can arrive twice. A downstream loader must dedup on a stable key —message.idis globally unique per source position (Kafkapartition:offset, NATSstream_sequence, AMQP delivery tag) and makes a natural primary key. Source cursor fields are also available inmessage.metadata(mqb.src.kafka_topic/mqb.src.kafka_offset,mqb.src.nats_subject/mqb.src.nats_stream_sequence,mqb.src.amqp_routing_key/mqb.src.amqp_delivery_tag) when you opt in by setting theMQB_SOURCE_METADATA=1environment variable (off by default).Ack deadlines vs slow loads. JetStream
AckWait(default 30s), AMQP prefetch/consumer-timeout and MQTT inflight windows each bound how long a batch may stay un-acked. Keepbatch_size × per-record handling costunder the smallest deadline (or raise it in the endpoint config); past it the broker redelivers — correctness is preserved by idempotent merge, but reload work is wasted. Kafka has no per-message nack:nackthere leaves the offset unadvanced, so redelivery happens on the next run/rebalance, not immediately.
consumer.status() returns a snapshot dict (healthy, target, pending,
capacity, error, details). pending is the broker backlog/lag where the
transport reports it — Kafka offset lag, AMQP queue depth, NATS JetStream
num_pending — so pending == 0 is a precise "caught up" check for a bounded
drain; it is None where the broker exposes no backlog (core NATS, MQTT), where
you fall back to a timeout_ms that returns []. It's a point-in-time snapshot,
not a guarantee.
consumer.close() releases the broker connection; it's idempotent, and poll()
/status() raise afterwards. Python is garbage-collected, so close explicitly
(or use the context-manager form, which closes on exit) rather than relying on
the object being collected:
with Consumer.from_config(cfg) as consumer:
batch = consumer.poll(max=500, timeout_ms=1000)
...
consumer.commit()
# connection released here
The endpoint config decides durability exactly as a route input does: a
consumer-group config resumes from the last commit, a subscriber config receives
only new messages. Consumer.from_file / from_str accept the same shapes,
plus a named entry under a consumers: document section.
As a dlt resource this is a few lines:
import dlt
from mq_bridge import Consumer
@dlt.resource(name="orders")
def orders():
consumer = Consumer.from_config({"nats": {"subject": "orders", "url": "nats://localhost:4222"}})
while not consumer.exhausted:
batch = consumer.poll(max=500, timeout_ms=1000)
if not batch:
break # nothing more pending this run
yield [m.json() for m in batch]
consumer.commit()
Logging
By default the Rust core's internal tracing events go nowhere. Call
init_logging once at startup to route them into the standard logging
module, then configure output as usual:
import logging
from mq_bridge import init_logging
logging.basicConfig(level=logging.INFO)
init_logging() # or init_logging("debug")
Events land on a logger named after the emitting Rust module, :: mapped to
. (e.g. mq_bridge.route). level seeds the Rust-side filter (default
"warn"); the MQ_BRIDGE_LOG / RUST_LOG environment variables take
precedence over it. Filtering happens in Rust, so suppressed events never
cross into Python. Call it once per process — a second call raises.
Tuning (environment variables)
These knobs are read from the environment at startup:
| Variable | Default | Effect |
|---|---|---|
MQ_BRIDGE_PY_HANDLER_EXECUTOR |
worker |
worker runs handlers on a dedicated interpreter thread that coalesces queued batches under one GIL acquisition (best under load); direct calls the handler inline. |
MQ_BRIDGE_PY_HANDLER_CONCURRENCY |
CPU count | Max in-flight handler batches. 0 disables the limit. |
MQ_BRIDGE_PY_GC_MODE |
default |
default leaves CPython's cyclic GC alone; count disables it and runs gc.collect() every N messages; off disables it entirely (pure refcounting). |
MQ_BRIDGE_PY_GC_THRESHOLD |
100000 |
Messages between collections when MQ_BRIDGE_PY_GC_MODE=count. |
Local development
uv is a good fit here for the Python-side developer workflow, while maturin stays the build backend:
cd python/mq-bridge-py
uv sync --group dev --no-install-project
uv run maturin develop
uv run pytest -q
Performance smoke tests are skipped by default because they start routes and measure local throughput:
cd python/mq-bridge-py
MQ_BRIDGE_RUN_PERF_TESTS=1 uv run pytest -q -m performance
Examples
Raw message handler:
cd python/mq-bridge-py
uv run python examples/raw_route.py
Kind-based JSON handler:
cd python/mq-bridge-py
uv run python examples/json_route.py
Memory benchmark:
cd python/mq-bridge-py
uv run maturin develop --release
uv run python examples/bench_memory.py --messages 100000
Analysis
HTTP comparison benchmark, driven by a native load generator (wrk) so the
client is never the bottleneck. It boots each server itself (mq-bridge in worker
and direct executor modes, plus FastAPI, Starlette, Sanic, aiohttp, and
FastStream when installed) and drives each with wrk:
cd python/mq-bridge-py
uv run maturin develop --release
uv sync --group bench # optional Python HTTP peers
uv run python analysis/bench_http_native.py --connections 1,8,32 --duration 8
Requires wrk on PATH (brew install wrk). The FastStream target compares its
ASGI custom-route path over Uvicorn; it is not a broker-backed subscriber/publisher
benchmark. The examples use included sample configs or create temporary configs.
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 mq_bridge_py-0.3.8.tar.gz.
File metadata
- Download URL: mq_bridge_py-0.3.8.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8066189689578c8122c41870757b44330f1a9cdb0e51614bb18da45e974667c
|
|
| MD5 |
eda368db202f74e4b444b6d882cf2890
|
|
| BLAKE2b-256 |
2508f698decbb818228102c986c8ce6d9d92936c64d5f2c20e193168955527f5
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8.tar.gz:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8.tar.gz -
Subject digest:
b8066189689578c8122c41870757b44330f1a9cdb0e51614bb18da45e974667c - Sigstore transparency entry: 2290294522
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-win_arm64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-win_arm64.whl
- Upload date:
- Size: 21.4 MB
- Tags: CPython 3.8+, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1e7b0f48ea7947cb1785033d8e1078882b1b4b0bfcefb8ec1015c1611c288cb
|
|
| MD5 |
ca1dd4ef35c6df16a5fd384a43edf2b4
|
|
| BLAKE2b-256 |
7d8e5bfd5cbdf36f7e6f624bf880427eb64cc71b3c84e9006f88c8d6c9413d07
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-win_arm64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-win_arm64.whl -
Subject digest:
f1e7b0f48ea7947cb1785033d8e1078882b1b4b0bfcefb8ec1015c1611c288cb - Sigstore transparency entry: 2290294939
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-win_amd64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-win_amd64.whl
- Upload date:
- Size: 30.3 MB
- Tags: CPython 3.8+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1852eca8351b3f2f9726ae871b1fa4fbce3405c48d6daf9bc6b26ef25b4554cf
|
|
| MD5 |
f7fd9ebb6323254c76b568a38ab06c8e
|
|
| BLAKE2b-256 |
019f77fe41da7ff40ef5df43138c9f5b0c156708c90a12922d8e6eeb9b050c4a
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-win_amd64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-win_amd64.whl -
Subject digest:
1852eca8351b3f2f9726ae871b1fa4fbce3405c48d6daf9bc6b26ef25b4554cf - Sigstore transparency entry: 2290295977
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 23.3 MB
- Tags: CPython 3.8+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30a334c4d13870ca889f83d72da9ff63e93405df79c4ea3c66d577c8386c1034
|
|
| MD5 |
2a04bf500a986a7f73b0d53d9085408b
|
|
| BLAKE2b-256 |
5c7f7dbf5c76232e0b5ba38b609feb4210db23375e4ae1d0ad1571ba41ef6bb8
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_x86_64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_x86_64.whl -
Subject digest:
30a334c4d13870ca889f83d72da9ff63e93405df79c4ea3c66d577c8386c1034 - Sigstore transparency entry: 2290294672
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 22.2 MB
- Tags: CPython 3.8+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88e39e5e421e520567e9a46d7faed17a016204bbd55e5ecc508111e16b201323
|
|
| MD5 |
18ca80cdabbaa90630af5a76fc626338
|
|
| BLAKE2b-256 |
9a457af08e01aa62178a2b3557bbbfd29da4c14c42906ee4d1da908a9fc0ad04
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_aarch64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-musllinux_1_2_aarch64.whl -
Subject digest:
88e39e5e421e520567e9a46d7faed17a016204bbd55e5ecc508111e16b201323 - Sigstore transparency entry: 2290296249
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 30.5 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a79b50afdc37d15bc49fc6bab9ae70d5f01dc0a46d32db723569bb02f56c024
|
|
| MD5 |
049f4aa1b5cb2fc7e8d6e87981205ca8
|
|
| BLAKE2b-256 |
e64be6c4d222c6ceec3dfdea9a546f0a446bb44616cdc5da3a182814306fdf63
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
2a79b50afdc37d15bc49fc6bab9ae70d5f01dc0a46d32db723569bb02f56c024 - Sigstore transparency entry: 2290296700
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 29.1 MB
- Tags: CPython 3.8+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6fdbb2764baec1aa498511a6ab4c539e3a7677521df36e515637a7f22b778171
|
|
| MD5 |
8f383ea8fd72284c241560f48be708dc
|
|
| BLAKE2b-256 |
5ec3abcc662b523d55d990aa96c84c5c092eb6e1460628430ab8609e9341df93
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
6fdbb2764baec1aa498511a6ab4c539e3a7677521df36e515637a7f22b778171 - Sigstore transparency entry: 2290295841
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 26.8 MB
- Tags: CPython 3.8+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29794fca1ba978f1347113b66a0bbf040e3618c2b6c8889a068532dc994b16ab
|
|
| MD5 |
91a683df9e138533db93aec6b3411ec3
|
|
| BLAKE2b-256 |
6c842172ca535a68d105f47e41afb7ff82967f7a04fb88c4c4284a2441b2b187
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-macosx_11_0_arm64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-macosx_11_0_arm64.whl -
Subject digest:
29794fca1ba978f1347113b66a0bbf040e3618c2b6c8889a068532dc994b16ab - Sigstore transparency entry: 2290295518
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type:
File details
Details for the file mq_bridge_py-0.3.8-cp38-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: mq_bridge_py-0.3.8-cp38-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 28.8 MB
- Tags: CPython 3.8+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3c65c3dc95c10926438ceaefb1da2f679e947399d37815faa99ef8e0149203e
|
|
| MD5 |
63a9284572acce796b8f8a3dee79843e
|
|
| BLAKE2b-256 |
5507e731ac9b55ecd45adeff41c3e3e6ff5583ffc2362654fb622db809711850
|
Provenance
The following attestation bundles were made for mq_bridge_py-0.3.8-cp38-abi3-macosx_10_12_x86_64.whl:
Publisher:
publish-python.yml on marcomq/mq-bridge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mq_bridge_py-0.3.8-cp38-abi3-macosx_10_12_x86_64.whl -
Subject digest:
c3c65c3dc95c10926438ceaefb1da2f679e947399d37815faa99ef8e0149203e - Sigstore transparency entry: 2290296107
- Sigstore integration time:
-
Permalink:
marcomq/mq-bridge@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Branch / Tag:
refs/tags/v0.3.8 - Owner: https://github.com/marcomq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@badeefa1624f78a0ae2513bfc32e71188fbc3904 -
Trigger Event:
release
-
Statement type: