11
11
AbstractSeam as Seam ,
12
12
DeviceType ,
13
13
)
14
- from typing import List , Union , Optional
14
+ from typing import Any , List , Union , Optional , Dict
15
15
from seamapi .utils .convert_to_id import (
16
16
to_connect_webview_id ,
17
17
to_connected_account_id ,
@@ -34,12 +34,14 @@ class Devices(AbstractDevices):
34
34
35
35
Methods
36
36
-------
37
- list(connected_account=None, connect_webview=None, device_type=None, device_ids=None)
37
+ list(connected_account=None, connected_accounts=None, connect_webview=None, device_type=None, device_ids=None, manufacturer =None)
38
38
Gets a list of devices
39
39
get(device=None, name=None)
40
40
Gets a device
41
41
update(device, name=None, properties=None, location=None)
42
42
Updates a device
43
+ list_device_providers(provider_category=None):
44
+ Gets a list of device providers
43
45
"""
44
46
45
47
seam : Seam
@@ -59,22 +61,33 @@ def __init__(self, seam: Seam):
59
61
def list (
60
62
self ,
61
63
connected_account : Union [ConnectedAccountId , ConnectedAccount ] = None ,
64
+ connected_accounts : List [
65
+ Union [ConnectedAccountId , ConnectedAccount ]
66
+ ] = None ,
62
67
connect_webview : Union [ConnectWebviewId , ConnectWebview ] = None ,
63
68
device_type : Optional [DeviceType ] = None ,
64
- device_ids : Optional [list ] = None ,
69
+ device_types : Optional [List [DeviceType ]] = None ,
70
+ device_ids : Optional [List [Union [DeviceId , Device ]]] = None ,
71
+ manufacturer : Optional [str ] = None ,
65
72
) -> List [Device ]:
66
73
"""Gets a list of devices.
67
74
68
75
Parameters
69
76
----------
70
77
connected_account : ConnectedAccountId or ConnectedAccount, optional
71
78
Connected account id or ConnectedAccount to get devices associated with
79
+ connected_accounts : ConnectedAccountId(s) or ConnectedAccount(s), optional
80
+ Connected account ids or ConnectedAccount(s) to get devices associated with
72
81
connect_webview : ConnectWebviewId or ConnectWebview, optional
73
82
Connect webview id or ConnectWebview to get devices associated with
74
83
device_type : DeviceType, optional
75
84
Device type e.g. august_lock
76
- device_ids : Optional[list]
85
+ device_types : List[DeviceType], optional
86
+ List of device types e.g. august_lock
87
+ device_ids : Optional[List[Union[DeviceId, Device]]]
77
88
Device IDs to filter devices by
89
+ manufacturer : Optional[str]
90
+ Manufacturer name to filter devices by e.g. august, schlage
78
91
79
92
Raises
80
93
------
@@ -88,9 +101,12 @@ def list(
88
101
89
102
params = parse_list_params (
90
103
connected_account ,
104
+ connected_accounts ,
91
105
connect_webview ,
92
106
device_type ,
93
- device_ids
107
+ device_types ,
108
+ device_ids ,
109
+ manufacturer ,
94
110
)
95
111
96
112
res = self .seam .make_request (
@@ -209,7 +225,7 @@ def delete(self, device: Union[DeviceId, Device]) -> bool:
209
225
210
226
Returns
211
227
------
212
- None
228
+ Boolean
213
229
"""
214
230
215
231
if not device :
@@ -222,7 +238,41 @@ def delete(self, device: Union[DeviceId, Device]) -> bool:
222
238
json = delete_payload ,
223
239
)
224
240
225
- return None
241
+ return True
242
+
243
+ @report_error
244
+ def list_device_providers (
245
+ self , provider_category : Optional [str ] = None
246
+ ) -> List [Dict [str , Any ]]:
247
+ """Retrieve a list of device providers
248
+
249
+ Parameters
250
+ ----------
251
+ provider_category : Optional[str]
252
+ Provider category to filter by eg. stable
253
+
254
+ Raises
255
+ ------
256
+ Exception
257
+ If the API request wasn't successful.
258
+
259
+ Returns
260
+ ------
261
+ List of device providers
262
+ """
263
+ params = {}
264
+
265
+ if provider_category :
266
+ params ["provider_category" ] = provider_category
267
+
268
+ res = self .seam .make_request (
269
+ "GET" ,
270
+ "/devices/list_device_providers" ,
271
+ params = params ,
272
+ )
273
+
274
+ return res ["device_providers" ]
275
+
226
276
227
277
class UnmanagedDevices (AbstractUnmanagedDevices ):
228
278
"""
@@ -238,9 +288,9 @@ class UnmanagedDevices(AbstractUnmanagedDevices):
238
288
239
289
Methods
240
290
-------
241
- list(connected_account=None, connect_webview=None, device_type=None, device_ids=None)
291
+ list(connected_account=None, connected_accounts=None, connect_webview=None, device_type=None, device_ids=None, manufacturer =None)
242
292
Gets a list of unmanaged devices
243
- update(device, is_managed=False )
293
+ update(device, is_managed)
244
294
Updates an unmanaged device
245
295
"""
246
296
@@ -260,22 +310,33 @@ def __init__(self, seam: Seam):
260
310
def list (
261
311
self ,
262
312
connected_account : Union [ConnectedAccountId , ConnectedAccount ] = None ,
313
+ connected_accounts : List [
314
+ Union [ConnectedAccountId , ConnectedAccount ]
315
+ ] = None ,
263
316
connect_webview : Union [ConnectWebviewId , ConnectWebview ] = None ,
264
317
device_type : Optional [DeviceType ] = None ,
265
- device_ids : Optional [list ] = None ,
266
- ) -> List [Device ]:
267
- """Gets a list of devices.
318
+ device_types : Optional [List [DeviceType ]] = None ,
319
+ device_ids : Optional [List [Union [DeviceId , Device ]]] = None ,
320
+ manufacturer : Optional [str ] = None ,
321
+ ) -> List [UnmanagedDevice ]:
322
+ """Gets a list of unmanaged devices.
268
323
269
324
Parameters
270
325
----------
271
326
connected_account : ConnectedAccountId or ConnectedAccount, optional
272
327
Connected account id or ConnectedAccount to get devices associated with
328
+ connected_accounts : ConnectedAccountId(s) or ConnectedAccount(s), optional
329
+ Connected account ids or ConnectedAccount(s) to get devices associated with
273
330
connect_webview : ConnectWebviewId or ConnectWebview, optional
274
331
Connect webview id or ConnectWebview to get devices associated with
275
332
device_type : DeviceType, optional
276
333
Device type e.g. august_lock
277
- device_ids : Optional[list]
334
+ device_types : List[DeviceType], optional
335
+ List of device types e.g. august_lock
336
+ device_ids : Optional[List[Union[DeviceId, Device]]]
278
337
Device IDs to filter devices by
338
+ manufacturer : Optional[str]
339
+ Manufacturer name to filter devices by e.g. august, schlage
279
340
280
341
Raises
281
342
------
@@ -284,14 +345,17 @@ def list(
284
345
285
346
Returns
286
347
------
287
- A list of devices.
348
+ A list of unmanaged devices.
288
349
"""
289
350
290
351
params = parse_list_params (
291
352
connected_account ,
353
+ connected_accounts ,
292
354
connect_webview ,
293
355
device_type ,
294
- device_ids
356
+ device_types ,
357
+ device_ids ,
358
+ manufacturer ,
295
359
)
296
360
297
361
res = self .seam .make_request (
@@ -307,15 +371,15 @@ def list(
307
371
def update (
308
372
self ,
309
373
device : Union [DeviceId , UnmanagedDevice ],
310
- is_managed : Optional [ bool ] = False ,
374
+ is_managed : bool ,
311
375
) -> bool :
312
- """Updates a device.
376
+ """Updates a device transitioning it from an unmanaged state to a managed one .
313
377
314
378
Parameters
315
379
----------
316
380
device : DeviceId or Device
317
381
Device id or Device to update
318
- is_managed : bool, optional
382
+ is_managed : bool
319
383
The managed state of the device
320
384
321
385
Raises
@@ -331,37 +395,44 @@ def update(
331
395
if not device :
332
396
raise Exception ("device is required" )
333
397
334
- update_payload = {
335
- "device_id" : to_device_id (device ),
336
- }
337
- if is_managed is not None :
338
- update_payload ["is_managed" ] = is_managed
339
-
340
398
self .seam .make_request (
341
399
"POST" ,
342
400
"/devices/unmanaged/update" ,
343
- json = update_payload ,
401
+ json = {
402
+ "device_id" : to_device_id (device ),
403
+ "is_managed" : is_managed ,
404
+ },
344
405
)
345
406
346
407
return True
347
408
348
- def parse_list_params (
409
+
410
+ def parse_list_params (
349
411
connected_account ,
412
+ connected_accounts ,
350
413
connect_webview ,
351
414
device_type ,
415
+ device_types ,
352
416
device_ids ,
417
+ manufacturer ,
353
418
):
354
419
params = {}
355
420
if connected_account :
356
421
params ["connected_account_id" ] = to_connected_account_id (
357
422
connected_account
358
423
)
424
+ if connected_accounts :
425
+ params ["connected_account_ids" ] = [
426
+ to_connected_account_id (ca ) for ca in connected_accounts
427
+ ]
359
428
if connect_webview :
360
- params ["connect_webview_id" ] = to_connect_webview_id (
361
- connect_webview
362
- )
429
+ params ["connect_webview_id" ] = to_connect_webview_id (connect_webview )
363
430
if device_type :
364
431
params ["device_type" ] = device_type
432
+ if device_types is not None :
433
+ params ["device_types" ] = device_types
365
434
if device_ids is not None :
366
- params ["device_ids" ] = [to_device_id (d ) for d in device_ids ]
435
+ params ["device_ids" ] = [to_device_id (d ) for d in device_ids ]
436
+ if manufacturer :
437
+ params ["manufacturer" ] = manufacturer
367
438
return params
0 commit comments