Skip to content

Commit

Permalink
Use _force_byte helper
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreF committed Jan 4, 2024
1 parent 558a09a commit f030b7e
Showing 1 changed file with 28 additions and 29 deletions.
57 changes: 28 additions & 29 deletions src/paho/mqtt/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,30 @@ def _socketpair_compat() -> tuple[socket.socket, socket.socket]:
return (sock1, sock2)


def _force_bytes(s: str | bytes) -> bytes:
if isinstance(s, str):
return s.encode("utf-8")
return s


def _encode_payload(payload: str | bytes | bytearray | int | float | None) -> bytes:
if isinstance(payload, str):
return payload.encode("utf-8")

if isinstance(payload, (int, float)):
return str(payload).encode("ascii")

if payload is None:
return b""

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

return payload


class MQTTMessageInfo:
"""This is a class returned from Client.publish() and can be used to find
out the mid of the message that was published, and to determine whether the
Expand Down Expand Up @@ -635,10 +659,7 @@ def __init__(
else:
self._client_id = b""
else:
if isinstance(client_id, str):
self._client_id = client_id.encode("utf-8")
else:
self._client_id = client_id
self._client_id = _force_bytes(client_id)

self._username: bytes | None = None
self._password: bytes | None = None
Expand Down Expand Up @@ -1349,17 +1370,7 @@ def publish(
if qos < 0 or qos > 2:
raise ValueError('Invalid QoS level.')

if isinstance(payload, str):
local_payload = payload.encode('utf-8')
elif isinstance(payload, (bytes, bytearray)):
local_payload = payload
elif isinstance(payload, (int, float)):
local_payload = str(payload).encode('ascii')
elif payload is None:
local_payload = b''
else:
raise TypeError(
'payload must be a string, bytearray, int, float or None.')
local_payload = _encode_payload(payload)

if len(local_payload) > 268435455:
raise ValueError('Payload too large.')
Expand Down Expand Up @@ -1820,18 +1831,7 @@ def will_set(
raise ValueError(
"The properties argument must be an instance of the Properties class.")

if isinstance(payload, str):
self._will_payload = payload.encode('utf-8')
elif isinstance(payload, (bytes, bytearray)):
self._will_payload = payload
elif isinstance(payload, (int, float)):
self._will_payload = str(payload).encode('ascii')
elif payload is None:
self._will_payload = b""
else:
raise TypeError(
'payload must be a string, bytearray, int, float or None.')

self._will_payload = _encode_payload(payload)
self._will = True
self._will_topic = topic.encode('utf-8')
self._will_qos = qos
Expand Down Expand Up @@ -2857,8 +2857,7 @@ def _pack_remaining_length(
return packet

def _pack_str16(self, packet: bytearray, data: bytes | str) -> None:
if isinstance(data, str):
data = data.encode('utf-8')
data = _force_bytes(data)
packet.extend(struct.pack("!H", len(data)))
packet.extend(data)

Expand Down

0 comments on commit f030b7e

Please sign in to comment.