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(
transport_type=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
result = conn.publish(Message(topic="test", payload=b"data", qos=1))
assert result.done()
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.8.tar.gz
(66.6 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.8-py3-none-any.whl
(11.2 kB
view details)
File details
Details for the file pyqttier-0.2.8.tar.gz.
File metadata
- Download URL: pyqttier-0.2.8.tar.gz
- Upload date:
- Size: 66.6 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":"26.04","id":"resolute","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 |
59827bbc0c3539d8011c18f42bfa5f5cf701594b72e604abbf40069e75340093
|
|
| MD5 |
7cd274e77b2b3c3c67d12101b9584a58
|
|
| BLAKE2b-256 |
62d023e316c429681aa4b736fb93d92ba41a2b858b02c8204d4e5703f19107d1
|
File details
Details for the file pyqttier-0.2.8-py3-none-any.whl.
File metadata
- Download URL: pyqttier-0.2.8-py3-none-any.whl
- Upload date:
- Size: 11.2 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":"26.04","id":"resolute","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 |
617675bab39987d0a295a244d75ee4a42986f918bd75aff852eb0cd0e7d09876
|
|
| MD5 |
e045502a9b2fdd9a16efa3853800fe66
|
|
| BLAKE2b-256 |
921172f1dc47bb00231b6944bd54b112c595ea706d483137e5594291799ea664
|