Convenient wrapper around Paho MQTT
Project description
PyQTTier
A Python MQTT client library providing a clean, type-safe wrapper around paho-mqtt with support for MQTT 5.0 features.
Features
- MQTT 5.0 Support - Full support for MQTT 5.0 protocol features including message properties, correlation data, and response topics
- Type Safety - Strongly typed with mypy-checked type hints for reliability
- Multiple Transports - Supports TCP, WebSocket, and Unix socket connections
- Mock Implementation - Built-in
MockConnectionfor easy testing without a broker - Python 3.7+ - Compatible with Python 3.7 through 3.12
Installation
pip install pyqttier
Quick Start
Basic Usage
from pyqttier.connection import Mqtt5Connection
from pyqttier.transport import MqttTransport, MqttTransportType
from pyqttier.message import Message
# Connect to broker
transport = MqttTransport(MqttTransportType.TCP, host="localhost", port=1883)
conn = Mqtt5Connection(transport=transport, client_id="my-client")
# Subscribe to a topic
def on_message(msg: Message):
print(f"Received: {msg.payload.decode()}")
conn.subscribe("sensors/temperature", callback=on_message)
# Publish a message
msg = Message(topic="sensors/temperature", payload=b"23.5", qos=1)
conn.publish(msg)
Testing with MockConnection
from pyqttier.mock import MockConnection
from pyqttier.message import Message
# Create mock connection for testing
conn = MockConnection()
# Publish and verify
conn.publish(Message(topic="test", payload=b"data", qos=1))
assert len(conn.published_messages) == 1
assert conn.published_messages[0].topic == "test"
Examples
See the examples/ directory for more detailed usage examples:
usage_example.py- Real broker connections, wildcards, request-response patternsmock_example.py- Testing with MockConnection
Development
# Install project
uv pip install -e .
# Type checking
uv run mypy --check-untyped-defs ./src/
# Unit tests
uv run pytest
License
MIT License.
See LICENSE file for details.
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
pyqttier-0.2.3.tar.gz
(58.5 kB
view details)
Built Distribution
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
pyqttier-0.2.3-py3-none-any.whl
(10.0 kB
view details)
File details
Details for the file pyqttier-0.2.3.tar.gz.
File metadata
- Download URL: pyqttier-0.2.3.tar.gz
- Upload date:
- Size: 58.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.12 {"installer":{"name":"uv","version":"0.9.12"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3358f57c2703383b4cf4680d7cbf551df52a5266d88a4f0202b24018756c8c04
|
|
| MD5 |
d64a533f9a85e4eb445e3ccb924d3f04
|
|
| BLAKE2b-256 |
d48e55cb98ca9192775a745d4a99c332a28f0e66618582a9e5b26ccb1aa089dd
|
File details
Details for the file pyqttier-0.2.3-py3-none-any.whl.
File metadata
- Download URL: pyqttier-0.2.3-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.12 {"installer":{"name":"uv","version":"0.9.12"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"25.10","id":"questing","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8da6bf7a823f55b908fba33e62e294aaf2a694616fee8bd45034db1fec03a5c4
|
|
| MD5 |
4e4c71ecd3efd9148298e46536834b8a
|
|
| BLAKE2b-256 |
37d80ca48ed89c325d26c6b080a95ea1bac0661df167ccc5c1fbca402eb280ec
|