Skip to content

Commit 2afa03d

Browse files
authored
Merge pull request #152 from justmobilize/fix-null-headers
Correctly handle headers of different types
2 parents 178dbc3 + 3bf143f commit 2afa03d

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

adafruit_requests.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,18 @@ def _get_socket(
529529
self._socket_free[sock] = False
530530
return sock
531531

532+
@staticmethod
533+
def _check_headers(headers: Dict[str, str]):
534+
if not isinstance(headers, dict):
535+
raise AttributeError("headers must be in dict format")
536+
537+
for key, value in headers.items():
538+
if isinstance(value, (str, bytes)) or value is None:
539+
continue
540+
raise AttributeError(
541+
f"Header part ({value}) from {key} must be of type str or bytes, not {type(value)}"
542+
)
543+
532544
@staticmethod
533545
def _send(socket: SocketType, data: bytes):
534546
total_sent = 0
@@ -555,9 +567,14 @@ def _send_as_bytes(self, socket: SocketType, data: str):
555567
return self._send(socket, bytes(data, "utf-8"))
556568

557569
def _send_header(self, socket, header, value):
570+
if value is None:
571+
return
558572
self._send_as_bytes(socket, header)
559573
self._send(socket, b": ")
560-
self._send_as_bytes(socket, value)
574+
if isinstance(value, bytes):
575+
self._send(socket, value)
576+
else:
577+
self._send_as_bytes(socket, value)
561578
self._send(socket, b"\r\n")
562579

563580
# pylint: disable=too-many-arguments
@@ -571,6 +588,9 @@ def _send_request(
571588
data: Any,
572589
json: Any,
573590
):
591+
# Check headers
592+
self._check_headers(headers)
593+
574594
# Convert data
575595
content_type_header = None
576596

0 commit comments

Comments
 (0)