Skip to content

Commit 379ac36

Browse files
authored
Avoid parsing the url twice (#402)
1 parent 6c2b95c commit 379ac36

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

pyhap/hap_handler.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ def __init__(self, accessory_handler, client_address):
145145
self.command = None
146146
self.headers = None
147147
self.request_body = None
148+
self.parsed_url = None
148149

149150
self.response = None
150151

@@ -199,6 +200,7 @@ def dispatch(self, request, body=None):
199200
self.command = request.method.decode()
200201
self.headers = {k.decode(): v.decode() for k, v in request.headers}
201202
self.request_body = body
203+
self.parsed_url = urlparse(self.path)
202204
response = HAPResponse()
203205
self.response = response
204206

@@ -210,7 +212,7 @@ def dispatch(self, request, body=None):
210212
self.headers,
211213
)
212214

213-
path = urlparse(self.path).path
215+
path = self.parsed_url.path
214216
try:
215217
getattr(self, self.HANDLERS[self.command][path])()
216218
except UnprivilegedRequestException:
@@ -584,7 +586,7 @@ def handle_get_characteristics(self):
584586
raise UnprivilegedRequestException
585587

586588
# Check that char exists and ...
587-
params = parse_qs(urlparse(self.path).query)
589+
params = parse_qs(self.parsed_url.query)
588590
response = self.accessory_handler.get_characteristics(
589591
params["id"][0].split(",")
590592
)

tests/test_hap_handler.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import json
55
from unittest.mock import patch
6+
from urllib.parse import urlparse
67
from uuid import UUID
78

89
import pytest
@@ -697,6 +698,8 @@ def test_handle_get_characteristics_encrypted(driver):
697698
response = hap_handler.HAPResponse()
698699
handler.response = response
699700
handler.path = "/characteristics?id=1.11"
701+
handler.parsed_url = urlparse(handler.path)
702+
700703
handler.handle_get_characteristics()
701704

702705
assert response.status_code == 200

0 commit comments

Comments
 (0)