eclipse / paho.mqtt.python

paho.mqtt.python
Other
2.12k stars 722 forks source link

Paho 2.0.0 mqtt Client can not publish bytearray payload #833

Closed marko92milinkovic closed 2 months ago

marko92milinkovic commented 2 months ago

Bug Description

Paho 2.0.0 mqtt Client can not publish bytearray payload

Reproduction

Calling paho.mqtt.client.Client.publish with payload as bytearray with qos = 1. The publish method internally calls _encode_payload:

 ....
    if not isinstance(payload, (bytes, bytearray)):
        raise TypeError(
            "payload must be a string, bytearray, int, float or None."
        )

    return payload

Then it calls _send_publish and the code blows up inside it: if payload and not isinstance(payload, bytes): raise TypeError('payload must be bytes if set')

Environment

Logs

client.publish(message.topic, message.payload, 1) File "/usr/local/lib/python3.10/site-packages/paho/mqtt/client.py", line 1798, in publish rc = self._send_publish(message.mid, topic_bytes, message.payload, message.qos, message.retain, File "/usr/local/lib/python3.10/site-packages/paho/mqtt/client.py", line 3377, in _send_publish raise TypeError('payload must be bytes if set')