@@ -53,13 +53,21 @@ def __init__(self, seam: Seam):
53
53
self .seam = seam
54
54
55
55
@report_error
56
- def list (self , device : Union [DeviceId , Device ]) -> List [AccessCode ]:
56
+ def list (
57
+ self ,
58
+ device : Optional [Union [DeviceId , Device ]] = None ,
59
+ access_codes : Optional [
60
+ Union [List [AccessCode ], List [AccessCodeId ]]
61
+ ] = None ,
62
+ ) -> List [AccessCode ]:
57
63
"""Gets a list of access codes for a device.
58
64
59
65
Parameters
60
66
----------
61
- device : DeviceId or Device
67
+ device : Union[ DeviceId, Device], optional
62
68
Device id or Device to list access codes for
69
+ access_codes : Union[List[AccessCode], List[AccessCodeId]], optional
70
+ Access Code IDs or Access Codes to filter access_codes by
63
71
64
72
Raises
65
73
------
@@ -71,15 +79,22 @@ def list(self, device: Union[DeviceId, Device]) -> List[AccessCode]:
71
79
A list of access codes for a device.
72
80
"""
73
81
74
- device_id = to_device_id (device )
82
+ params = {}
83
+ if device :
84
+ params ["device_id" ] = to_device_id (device )
85
+ if access_codes :
86
+ params ["access_code_ids" ] = [
87
+ to_access_code_id (ac ) for ac in access_codes
88
+ ]
89
+
75
90
res = self .seam .make_request (
76
91
"GET" ,
77
92
"/access_codes/list" ,
78
- params = { "device_id" : device_id } ,
93
+ params = params ,
79
94
)
80
- access_codes = res ["access_codes" ]
95
+ res_access_codes = res ["access_codes" ]
81
96
82
- return [AccessCode .from_dict (ac ) for ac in access_codes ]
97
+ return [AccessCode .from_dict (ac ) for ac in res_access_codes ]
83
98
84
99
@report_error
85
100
def get (
@@ -180,13 +195,19 @@ def create(
180
195
if common_code_key is not None :
181
196
create_payload ["common_code_key" ] = common_code_key
182
197
if attempt_for_offline_device is not None :
183
- create_payload ["attempt_for_offline_device" ] = attempt_for_offline_device
198
+ create_payload [
199
+ "attempt_for_offline_device"
200
+ ] = attempt_for_offline_device
184
201
185
- if (wait_for_code
202
+ if (
203
+ wait_for_code
186
204
and starts_at is not None
187
- and datetime .fromisoformat (starts_at ) > datetime .now () + timedelta (seconds = 5 )
205
+ and datetime .fromisoformat (starts_at )
206
+ > datetime .now () + timedelta (seconds = 5 )
188
207
):
189
- raise RuntimeError ("Cannot use wait_for_code with a future time bound code" )
208
+ raise RuntimeError (
209
+ "Cannot use wait_for_code with a future time bound code"
210
+ )
190
211
191
212
res = self .seam .make_request (
192
213
"POST" ,
@@ -199,25 +220,25 @@ def create(
199
220
duration = 0
200
221
poll_interval = 0.25
201
222
if wait_for_code :
202
- while ( access_code .code is None ) :
203
- if ( access_code .status == "unknown" ) :
223
+ while access_code .code is None :
224
+ if access_code .status == "unknown" :
204
225
raise WaitForAccessCodeFailedException (
205
226
"Access code status returned unknown" ,
206
- access_code_id = access_code .access_code_id
227
+ access_code_id = access_code .access_code_id ,
207
228
)
208
- if ( len (access_code .errors ) > 0 ) :
229
+ if len (access_code .errors ) > 0 :
209
230
raise WaitForAccessCodeFailedException (
210
231
"Access code returned errors" ,
211
232
access_code_id = access_code .access_code_id ,
212
- errors = access_code .errors
233
+ errors = access_code .errors ,
213
234
)
214
235
time .sleep (poll_interval )
215
236
duration += poll_interval
216
- if ( duration > timeout ) :
237
+ if duration > timeout :
217
238
raise WaitForAccessCodeFailedException (
218
239
f"Gave up after waiting the maximum timeout of { timeout } seconds" ,
219
240
access_code_id = access_code .access_code_id ,
220
- errors = access_code .errors
241
+ errors = access_code .errors ,
221
242
)
222
243
223
244
access_code = access_codes .get (access_code )
@@ -294,6 +315,7 @@ def update(
294
315
code : Optional [str ] = None ,
295
316
starts_at : Optional [str ] = None ,
296
317
ends_at : Optional [str ] = None ,
318
+ type : Optional [str ] = None ,
297
319
) -> AccessCode :
298
320
"""Updates an access code on a device.
299
321
@@ -311,6 +333,8 @@ def update(
311
333
Time when access code becomes effective
312
334
ends_at : str, optional
313
335
Time when access code ceases to be effective
336
+ type : str, optional
337
+ Access code type eg. ongoing or time_bound
314
338
315
339
Raises
316
340
------
@@ -334,6 +358,8 @@ def update(
334
358
update_payload ["starts_at" ] = starts_at
335
359
if ends_at is not None :
336
360
update_payload ["ends_at" ] = ends_at
361
+ if type is not None :
362
+ update_payload ["type" ] = type
337
363
338
364
res = self .seam .make_request (
339
365
"POST" ,
0 commit comments