Skip to content

Commit a7dd16c

Browse files
author
brentru
committed
black!
1 parent 4050fa5 commit a7dd16c

13 files changed

+66
-268
lines changed

adafruit_azureiot/device_registration.py

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,9 @@ def _parse_http_status(status_code: int, status_reason: str) -> None:
7272
"""
7373
for error in AZURE_HTTP_ERROR_CODES:
7474
if error == status_code:
75-
raise DeviceRegistrationError(
76-
"Error {0}: {1}".format(status_code, status_reason)
77-
)
75+
raise DeviceRegistrationError("Error {0}: {1}".format(status_code, status_reason))
7876

79-
def __init__(
80-
self, socket, id_scope: str, device_id: str, key: str, logger: Logger = None
81-
):
77+
def __init__(self, socket, id_scope: str, device_id: str, key: str, logger: Logger = None):
8278
"""Creates an instance of the device registration service
8379
:param socket: The network socket
8480
:param str id_scope: The ID scope of the device to register
@@ -102,9 +98,7 @@ def compute_derived_symmetric_key(secret: str, msg: str) -> bytes:
10298
:rtype: bytes
10399
"""
104100
secret = base64.b64decode(secret)
105-
return base64.b64encode(
106-
hmac.new(secret, msg=msg.encode("utf8"), digestmod=hashlib.sha256).digest()
107-
)
101+
return base64.b64encode(hmac.new(secret, msg=msg.encode("utf8"), digestmod=hashlib.sha256).digest())
108102

109103
def _loop_assign(self, operation_id, headers) -> str:
110104
uri = "https://%s/%s/registrations/%s/operations/%s?api-version=%s" % (
@@ -161,10 +155,7 @@ def _run_put_request_with_retry(self, url, body, headers):
161155
self._logger.debug("Sent!")
162156
break
163157
except RuntimeError as runtime_error:
164-
self._logger.info(
165-
"Could not send data, retrying after 0.5 seconds: "
166-
+ str(runtime_error)
167-
)
158+
self._logger.info("Could not send data, retrying after 0.5 seconds: " + str(runtime_error))
168159
retry = retry + 1
169160

170161
if retry >= 10:
@@ -189,10 +180,7 @@ def _run_get_request_with_retry(self, url, headers):
189180
self._logger.debug("Sent!")
190181
break
191182
except RuntimeError as runtime_error:
192-
self._logger.info(
193-
"Could not send data, retrying after 0.5 seconds: "
194-
+ str(runtime_error)
195-
)
183+
self._logger.info("Could not send data, retrying after 0.5 seconds: " + str(runtime_error))
196184
retry = retry + 1
197185

198186
if retry >= 10:
@@ -217,19 +205,9 @@ def register_device(self, expiry: int) -> str:
217205
"""
218206
# pylint: disable=C0103
219207
sr = self._id_scope + "%2Fregistrations%2F" + self._device_id
220-
sig_no_encode = DeviceRegistration.compute_derived_symmetric_key(
221-
self._key, sr + "\n" + str(expiry)
222-
)
208+
sig_no_encode = DeviceRegistration.compute_derived_symmetric_key(self._key, sr + "\n" + str(expiry))
223209
sig_encoded = parse.quote(sig_no_encode, "~()*!.'")
224-
auth_string = (
225-
"SharedAccessSignature sr="
226-
+ sr
227-
+ "&sig="
228-
+ sig_encoded
229-
+ "&se="
230-
+ str(expiry)
231-
+ "&skn=registration"
232-
)
210+
auth_string = "SharedAccessSignature sr=" + sr + "&sig=" + sig_encoded + "&se=" + str(expiry) + "&skn=registration"
233211

234212
headers = {
235213
"content-type": "application/json; charset=utf-8",
@@ -260,14 +238,7 @@ def register_device(self, expiry: int) -> str:
260238
try:
261239
data = response.json()
262240
except ValueError as error:
263-
err = (
264-
"ERROR: non JSON is received from "
265-
+ constants.DPS_END_POINT
266-
+ " => "
267-
+ str(response)
268-
+ " .. message : "
269-
+ str(error)
270-
)
241+
err = "ERROR: non JSON is received from " + constants.DPS_END_POINT + " => " + str(response) + " .. message : " + str(error)
271242
self._logger.error(err)
272243
raise DeviceRegistrationError(err)
273244

adafruit_azureiot/iot_mqtt.py

Lines changed: 22 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,14 @@ def cloud_to_device_message_received(self, body: str, properties: dict) -> None:
8484
:param dict properties: The propreties sent with the mesage
8585
"""
8686

87-
def device_twin_desired_updated(
88-
self, desired_property_name: str, desired_property_value, desired_version: int
89-
) -> None:
87+
def device_twin_desired_updated(self, desired_property_name: str, desired_property_value, desired_version: int) -> None:
9088
"""Called when the device twin desired properties are updated
9189
:param str desired_property_name: The name of the desired property that was updated
9290
:param desired_property_value: The value of the desired property that was updated
9391
:param int desired_version: The version of the desired property that was updated
9492
"""
9593

96-
def device_twin_reported_updated(
97-
self,
98-
reported_property_name: str,
99-
reported_property_value,
100-
reported_version: int,
101-
) -> None:
94+
def device_twin_reported_updated(self, reported_property_name: str, reported_property_value, reported_version: int,) -> None:
10295
"""Called when the device twin reported values are updated
10396
:param str reported_property_name: The name of the reported property that was updated
10497
:param reported_property_value: The value of the reported property that was updated
@@ -114,17 +107,11 @@ class IoTMQTT:
114107
def _gen_sas_token(self) -> str:
115108
token_expiry = int(time.time() + self._token_expires)
116109
uri = self._hostname + "%2Fdevices%2F" + self._device_id
117-
signed_hmac_sha256 = DeviceRegistration.compute_derived_symmetric_key(
118-
self._key, uri + "\n" + str(token_expiry)
119-
)
110+
signed_hmac_sha256 = DeviceRegistration.compute_derived_symmetric_key(self._key, uri + "\n" + str(token_expiry))
120111
signature = parse.quote(signed_hmac_sha256, "~()*!.'")
121-
if signature.endswith(
122-
"\n"
123-
): # somewhere along the crypto chain a newline is inserted
112+
if signature.endswith("\n"): # somewhere along the crypto chain a newline is inserted
124113
signature = signature[:-1]
125-
token = "SharedAccessSignature sr={}&sig={}&se={}".format(
126-
uri, signature, token_expiry
127-
)
114+
token = "SharedAccessSignature sr={}&sig={}&se={}".format(uri, signature, token_expiry)
128115
return token
129116

130117
# Workaround for https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT/issues/25
@@ -160,12 +147,7 @@ def _create_mqtt_client(self) -> None:
160147

161148
# pylint: disable=C0103, W0613
162149
def _on_connect(self, client, userdata, _, rc) -> None:
163-
self._logger.info(
164-
"- iot_mqtt :: _on_connect :: rc = "
165-
+ str(rc)
166-
+ ", userdata = "
167-
+ str(userdata)
168-
)
150+
self._logger.info("- iot_mqtt :: _on_connect :: rc = " + str(rc) + ", userdata = " + str(userdata))
169151
if rc == 0:
170152
self._mqtt_connected = True
171153
self._auth_response_received = True
@@ -192,9 +174,7 @@ def _on_disconnect(self, client, userdata, rc) -> None:
192174
self._callback.connection_status_change(False)
193175

194176
def _on_publish(self, client, data, topic, msg_id) -> None:
195-
self._logger.info(
196-
"- iot_mqtt :: _on_publish :: " + str(data) + " on topic " + str(topic)
197-
)
177+
self._logger.info("- iot_mqtt :: _on_publish :: " + str(data) + " on topic " + str(topic))
198178

199179
# pylint: disable=W0703
200180
def _handle_device_twin_update(self, msg: str, topic: str) -> None:
@@ -205,12 +185,7 @@ def _handle_device_twin_update(self, msg: str, topic: str) -> None:
205185
try:
206186
twin = json.loads(msg)
207187
except json.JSONDecodeError as e:
208-
self._logger.error(
209-
"ERROR: JSON parse for Device Twin message object has failed. => "
210-
+ msg
211-
+ " => "
212-
+ str(e)
213-
)
188+
self._logger.error("ERROR: JSON parse for Device Twin message object has failed. => " + msg + " => " + str(e))
214189
return
215190

216191
if "reported" in twin:
@@ -220,15 +195,11 @@ def _handle_device_twin_update(self, msg: str, topic: str) -> None:
220195
reported_version = reported["$version"]
221196
reported.pop("$version")
222197
else:
223-
self._logger.error(
224-
"ERROR: Unexpected payload for reported twin update => " + msg
225-
)
198+
self._logger.error("ERROR: Unexpected payload for reported twin update => " + msg)
226199
return
227200

228201
for property_name, value in reported.items():
229-
self._callback.device_twin_reported_updated(
230-
property_name, value, reported_version
231-
)
202+
self._callback.device_twin_reported_updated(property_name, value, reported_version)
232203

233204
is_patch = "desired" not in twin
234205

@@ -241,15 +212,11 @@ def _handle_device_twin_update(self, msg: str, topic: str) -> None:
241212
desired_version = desired["$version"]
242213
desired.pop("$version")
243214
else:
244-
self._logger.error(
245-
"ERROR: Unexpected payload for desired twin update => " + msg
246-
)
215+
self._logger.error("ERROR: Unexpected payload for desired twin update => " + msg)
247216
return
248217

249218
for property_name, value in desired.items():
250-
self._callback.device_twin_desired_updated(
251-
property_name, value, desired_version
252-
)
219+
self._callback.device_twin_desired_updated(property_name, value, desired_version)
253220

254221
def _handle_direct_method(self, msg: str, topic: str) -> None:
255222
index = topic.find("$rid=")
@@ -278,14 +245,7 @@ def _handle_direct_method(self, msg: str, topic: str) -> None:
278245
ret_message = json.dumps(ret_json)
279246

280247
next_topic = "$iothub/methods/res/{}/?$rid={}".format(ret_code, method_id)
281-
self._logger.info(
282-
"C2D: => "
283-
+ next_topic
284-
+ " with data "
285-
+ ret_message
286-
+ " and name => "
287-
+ method_name
288-
)
248+
self._logger.info("C2D: => " + next_topic + " with data " + ret_message + " and name => " + method_name)
289249
self._send_common(next_topic, ret_message)
290250

291251
def _handle_cloud_to_device_message(self, msg: str, topic: str) -> None:
@@ -318,18 +278,14 @@ def _on_message(self, client, msg_topic, payload) -> None:
318278
topic = str(msg_topic)
319279

320280
if topic.startswith("$iothub/"):
321-
if topic.startswith(
322-
"$iothub/twin/PATCH/properties/desired/"
323-
) or topic.startswith("$iothub/twin/res/200/?$rid="):
281+
if topic.startswith("$iothub/twin/PATCH/properties/desired/") or topic.startswith("$iothub/twin/res/200/?$rid="):
324282
self._handle_device_twin_update(str(msg), topic)
325283
elif topic.startswith("$iothub/methods"):
326284
self._handle_direct_method(str(msg), topic)
327285
else:
328286
if not topic.startswith("$iothub/twin/res/"): # not twin response
329287
self._logger.error("ERROR: unknown twin! - {}".format(msg))
330-
elif topic.startswith(
331-
"devices/{}/messages/devicebound".format(self._device_id)
332-
):
288+
elif topic.startswith("devices/{}/messages/devicebound".format(self._device_id)):
333289
self._handle_cloud_to_device_message(str(msg), topic)
334290
else:
335291
self._logger.error("ERROR: (unknown message) - {}".format(msg))
@@ -355,10 +311,7 @@ def _send_common(self, topic: str, data) -> None:
355311
self._logger.debug("Data sent")
356312
break
357313
except RuntimeError as runtime_error:
358-
self._logger.info(
359-
"Could not send data, retrying after 0.5 seconds: "
360-
+ str(runtime_error)
361-
)
314+
self._logger.info("Could not send data, retrying after 0.5 seconds: " + str(runtime_error))
362315
retry = retry + 1
363316

364317
if retry >= 10:
@@ -407,24 +360,18 @@ def __init__(
407360
self._hostname = hostname
408361
self._key = key
409362
self._token_expires = token_expires
410-
self._username = "{}/{}/api-version={}".format(
411-
self._hostname, device_id, constants.IOTC_API_VERSION
412-
)
363+
self._username = "{}/{}/api-version={}".format(self._hostname, device_id, constants.IOTC_API_VERSION)
413364
self._passwd = self._gen_sas_token()
414365
self._logger = logger if logger is not None else logging.getLogger("log")
415366
self._is_subscribed_to_twins = False
416367

417368
def _subscribe_to_core_topics(self):
418369
self._mqtts.subscribe("devices/{}/messages/events/#".format(self._device_id))
419-
self._mqtts.subscribe(
420-
"devices/{}/messages/devicebound/#".format(self._device_id)
421-
)
370+
self._mqtts.subscribe("devices/{}/messages/devicebound/#".format(self._device_id))
422371
self._mqtts.subscribe("$iothub/methods/#")
423372

424373
def _subscribe_to_twin_topics(self):
425-
self._mqtts.subscribe(
426-
"$iothub/twin/PATCH/properties/desired/#"
427-
) # twin desired property changes
374+
self._mqtts.subscribe("$iothub/twin/PATCH/properties/desired/#") # twin desired property changes
428375
self._mqtts.subscribe("$iothub/twin/res/#") # twin properties response
429376

430377
def connect(self) -> bool:
@@ -440,10 +387,7 @@ def connect(self) -> bool:
440387
while self._auth_response_received is None:
441388
self.loop()
442389

443-
self._logger.info(
444-
" - iot_mqtt :: connect :: on_connect must be fired. Connected ? "
445-
+ str(self.is_connected())
446-
)
390+
self._logger.info(" - iot_mqtt :: connect :: on_connect must be fired. Connected ? " + str(self.is_connected()))
447391
if not self.is_connected():
448392
return False
449393

@@ -500,9 +444,7 @@ def loop(self) -> None:
500444

501445
self._mqtts.loop()
502446

503-
def send_device_to_cloud_message(
504-
self, message, system_properties: dict = None
505-
) -> None:
447+
def send_device_to_cloud_message(self, message, system_properties: dict = None) -> None:
506448
"""Send a device to cloud message from this device to Azure IoT Hub
507449
:param message: The message data as a JSON string or a dictionary
508450
:param system_properties: System properties to send with the message
@@ -538,7 +480,5 @@ def send_twin_patch(self, patch) -> None:
538480
:raises RuntimeError: if the internet connection is not responding or is unable to connect
539481
"""
540482
self._logger.info("- iot_mqtt :: sendProperty :: " + str(patch))
541-
topic = "$iothub/twin/PATCH/properties/reported/?$rid={}".format(
542-
int(time.time())
543-
)
483+
topic = "$iothub/twin/PATCH/properties/reported/?$rid={}".format(int(time.time()))
544484
self._send_common(topic, patch)

adafruit_azureiot/iotcentral_device.py

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -62,50 +62,32 @@ def direct_method_called(self, method_name: str, payload: str) -> IoTResponse:
6262

6363
raise IoTError("on_command_executed not set")
6464

65-
def device_twin_desired_updated(
66-
self, desired_property_name: str, desired_property_value, desired_version: int
67-
) -> None:
65+
def device_twin_desired_updated(self, desired_property_name: str, desired_property_value, desired_version: int) -> None:
6866
"""Called when the device twin desired properties are updated
6967
:param str desired_property_name: The name of the desired property that was updated
7068
:param desired_property_value: The value of the desired property that was updated
7169
:param int desired_version: The version of the desired property that was updated
7270
"""
7371
if self.on_property_changed is not None:
7472
# pylint: disable=E1102
75-
self.on_property_changed(
76-
desired_property_name, desired_property_value, desired_version
77-
)
73+
self.on_property_changed(desired_property_name, desired_property_value, desired_version)
7874

7975
# when a desired property changes, update the reported to match to keep them in sync
8076
self.send_property(desired_property_name, desired_property_value)
8177

82-
def device_twin_reported_updated(
83-
self,
84-
reported_property_name: str,
85-
reported_property_value,
86-
reported_version: int,
87-
) -> None:
78+
def device_twin_reported_updated(self, reported_property_name: str, reported_property_value, reported_version: int,) -> None:
8879
"""Called when the device twin reported values are updated
8980
:param str reported_property_name: The name of the reported property that was updated
9081
:param reported_property_value: The value of the reported property that was updated
9182
:param int reported_version: The version of the reported property that was updated
9283
"""
9384
if self.on_property_changed is not None:
9485
# pylint: disable=E1102
95-
self.on_property_changed(
96-
reported_property_name, reported_property_value, reported_version
97-
)
86+
self.on_property_changed(reported_property_name, reported_property_value, reported_version)
9887

9988
# pylint: disable=R0913
10089
def __init__(
101-
self,
102-
socket,
103-
iface,
104-
id_scope: str,
105-
device_id: str,
106-
key: str,
107-
token_expires: int = 21600,
108-
logger: logging = None,
90+
self, socket, iface, id_scope: str, device_id: str, key: str, token_expires: int = 21600, logger: logging = None,
10991
):
11092
"""Create the Azure IoT Central device client
11193
:param socket: The network socket
@@ -152,22 +134,11 @@ def connect(self) -> None:
152134
:raises DeviceRegistrationError: if the device cannot be registered successfully
153135
:raises RuntimeError: if the internet connection is not responding or is unable to connect
154136
"""
155-
self._device_registration = DeviceRegistration(
156-
self._socket, self._id_scope, self._device_id, self._key, self._logger
157-
)
137+
self._device_registration = DeviceRegistration(self._socket, self._id_scope, self._device_id, self._key, self._logger)
158138

159139
token_expiry = int(time.time() + self._token_expires)
160140
hostname = self._device_registration.register_device(token_expiry)
161-
self._mqtt = IoTMQTT(
162-
self,
163-
self._socket,
164-
self._iface,
165-
hostname,
166-
self._device_id,
167-
self._key,
168-
self._token_expires,
169-
self._logger,
170-
)
141+
self._mqtt = IoTMQTT(self, self._socket, self._iface, hostname, self._device_id, self._key, self._token_expires, self._logger,)
171142

172143
self._mqtt.connect()
173144
self._mqtt.subscribe_to_twins()

0 commit comments

Comments
 (0)