1111 AbstractSeam as Seam ,
1212 DeviceType ,
1313)
14- from typing import List , Union , Optional
14+ from typing import Any , List , Union , Optional , Dict
1515from seamapi .utils .convert_to_id import (
1616 to_connect_webview_id ,
1717 to_connected_account_id ,
@@ -34,12 +34,14 @@ class Devices(AbstractDevices):
3434
3535 Methods
3636 -------
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)
3838 Gets a list of devices
3939 get(device=None, name=None)
4040 Gets a device
4141 update(device, name=None, properties=None, location=None)
4242 Updates a device
43+ list_device_providers(provider_category=None):
44+ Gets a list of device providers
4345 """
4446
4547 seam : Seam
@@ -59,22 +61,33 @@ def __init__(self, seam: Seam):
5961 def list (
6062 self ,
6163 connected_account : Union [ConnectedAccountId , ConnectedAccount ] = None ,
64+ connected_accounts : List [
65+ Union [ConnectedAccountId , ConnectedAccount ]
66+ ] = None ,
6267 connect_webview : Union [ConnectWebviewId , ConnectWebview ] = None ,
6368 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 ,
6572 ) -> List [Device ]:
6673 """Gets a list of devices.
6774
6875 Parameters
6976 ----------
7077 connected_account : ConnectedAccountId or ConnectedAccount, optional
7178 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
7281 connect_webview : ConnectWebviewId or ConnectWebview, optional
7382 Connect webview id or ConnectWebview to get devices associated with
7483 device_type : DeviceType, optional
7584 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]]]
7788 Device IDs to filter devices by
89+ manufacturer : Optional[str]
90+ Manufacturer name to filter devices by e.g. august, schlage
7891
7992 Raises
8093 ------
@@ -88,9 +101,12 @@ def list(
88101
89102 params = parse_list_params (
90103 connected_account ,
104+ connected_accounts ,
91105 connect_webview ,
92106 device_type ,
93- device_ids
107+ device_types ,
108+ device_ids ,
109+ manufacturer ,
94110 )
95111
96112 res = self .seam .make_request (
@@ -209,7 +225,7 @@ def delete(self, device: Union[DeviceId, Device]) -> bool:
209225
210226 Returns
211227 ------
212- None
228+ Boolean
213229 """
214230
215231 if not device :
@@ -222,7 +238,41 @@ def delete(self, device: Union[DeviceId, Device]) -> bool:
222238 json = delete_payload ,
223239 )
224240
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+
226276
227277class UnmanagedDevices (AbstractUnmanagedDevices ):
228278 """
@@ -238,9 +288,9 @@ class UnmanagedDevices(AbstractUnmanagedDevices):
238288
239289 Methods
240290 -------
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)
242292 Gets a list of unmanaged devices
243- update(device, is_managed=False )
293+ update(device, is_managed)
244294 Updates an unmanaged device
245295 """
246296
@@ -260,22 +310,33 @@ def __init__(self, seam: Seam):
260310 def list (
261311 self ,
262312 connected_account : Union [ConnectedAccountId , ConnectedAccount ] = None ,
313+ connected_accounts : List [
314+ Union [ConnectedAccountId , ConnectedAccount ]
315+ ] = None ,
263316 connect_webview : Union [ConnectWebviewId , ConnectWebview ] = None ,
264317 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.
268323
269324 Parameters
270325 ----------
271326 connected_account : ConnectedAccountId or ConnectedAccount, optional
272327 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
273330 connect_webview : ConnectWebviewId or ConnectWebview, optional
274331 Connect webview id or ConnectWebview to get devices associated with
275332 device_type : DeviceType, optional
276333 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]]]
278337 Device IDs to filter devices by
338+ manufacturer : Optional[str]
339+ Manufacturer name to filter devices by e.g. august, schlage
279340
280341 Raises
281342 ------
@@ -284,14 +345,17 @@ def list(
284345
285346 Returns
286347 ------
287- A list of devices.
348+ A list of unmanaged devices.
288349 """
289350
290351 params = parse_list_params (
291352 connected_account ,
353+ connected_accounts ,
292354 connect_webview ,
293355 device_type ,
294- device_ids
356+ device_types ,
357+ device_ids ,
358+ manufacturer ,
295359 )
296360
297361 res = self .seam .make_request (
@@ -307,15 +371,15 @@ def list(
307371 def update (
308372 self ,
309373 device : Union [DeviceId , UnmanagedDevice ],
310- is_managed : Optional [ bool ] = False ,
374+ is_managed : bool ,
311375 ) -> bool :
312- """Updates a device.
376+ """Updates a device transitioning it from an unmanaged state to a managed one .
313377
314378 Parameters
315379 ----------
316380 device : DeviceId or Device
317381 Device id or Device to update
318- is_managed : bool, optional
382+ is_managed : bool
319383 The managed state of the device
320384
321385 Raises
@@ -331,37 +395,44 @@ def update(
331395 if not device :
332396 raise Exception ("device is required" )
333397
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-
340398 self .seam .make_request (
341399 "POST" ,
342400 "/devices/unmanaged/update" ,
343- json = update_payload ,
401+ json = {
402+ "device_id" : to_device_id (device ),
403+ "is_managed" : is_managed ,
404+ },
344405 )
345406
346407 return True
347408
348- def parse_list_params (
409+
410+ def parse_list_params (
349411 connected_account ,
412+ connected_accounts ,
350413 connect_webview ,
351414 device_type ,
415+ device_types ,
352416 device_ids ,
417+ manufacturer ,
353418):
354419 params = {}
355420 if connected_account :
356421 params ["connected_account_id" ] = to_connected_account_id (
357422 connected_account
358423 )
424+ if connected_accounts :
425+ params ["connected_account_ids" ] = [
426+ to_connected_account_id (ca ) for ca in connected_accounts
427+ ]
359428 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 )
363430 if device_type :
364431 params ["device_type" ] = device_type
432+ if device_types is not None :
433+ params ["device_types" ] = device_types
365434 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
367438 return params
0 commit comments