@@ -34,10 +34,12 @@ class AccessCodes(AbstractAccessCodes):
3434 Gets a list of access codes for a device
3535 get(access_code=None, device=None)
3636 Gets a certain access code of a device
37- create(device, name=None, code=None, starts_at=None, ends_at=None)
37+ create(device, name=None, code=None, starts_at=None, ends_at=None, attempt_for_offline_device=None, wait_for_code=None, timeout=None, allow_external_modification=None, prefer_native_scheduling=None, use_backup_access_code_pool=None )
3838 Creates an access code on a device
3939 delete(access_code, device=None)
4040 Deletes an access code on a device
41+ pull_backup_access_code(access_code)
42+ Pulls a backup access code.
4143 """
4244
4345 seam : Seam
@@ -147,6 +149,9 @@ def create(
147149 attempt_for_offline_device : Optional [bool ] = True ,
148150 wait_for_code : Optional [bool ] = False ,
149151 timeout : Optional [int ] = 300 ,
152+ allow_external_modification : Optional [bool ] = None ,
153+ prefer_native_scheduling : Optional [bool ] = None ,
154+ use_backup_access_code_pool : Optional [bool ] = None ,
150155 ) -> AccessCode :
151156 """Creates an access code on a device.
152157
@@ -169,6 +174,12 @@ def create(
169174 Poll the access code until the code is known.
170175 timeout : int, optional:
171176 Maximum polling time in seconds.
177+ allow_external_modification : bool, optional:
178+ Allow external modifications of the access code e.g. through the lock provider's app. False by default.
179+ prefer_native_scheduling : bool, optional:
180+ Where possible, prefer lock provider's native access code scheduling. True by default.
181+ use_backup_access_code_pool : bool, optional:
182+ Activate backup access code pool. False by default.
172183
173184 Raises
174185 ------
@@ -198,6 +209,18 @@ def create(
198209 create_payload [
199210 "attempt_for_offline_device"
200211 ] = attempt_for_offline_device
212+ if allow_external_modification is not None :
213+ create_payload [
214+ "allow_external_modification"
215+ ] = allow_external_modification
216+ if prefer_native_scheduling is not None :
217+ create_payload [
218+ "prefer_native_scheduling"
219+ ] = prefer_native_scheduling
220+ if use_backup_access_code_pool is not None :
221+ create_payload [
222+ "use_backup_access_code_pool"
223+ ] = use_backup_access_code_pool
201224
202225 if (
203226 wait_for_code
@@ -241,7 +264,7 @@ def create(
241264 errors = access_code .errors ,
242265 )
243266
244- access_code = access_codes .get (access_code )
267+ access_code = self . seam . access_codes .get (access_code )
245268
246269 return access_code
247270
@@ -417,3 +440,33 @@ def delete(
417440 )
418441
419442 return action_attempt
443+
444+ @report_error
445+ def pull_backup_access_code (
446+ self ,
447+ access_code : Union [AccessCode , AccessCodeId ],
448+ ) -> AccessCode :
449+ """Pulls a backup access code.
450+
451+ Parameters
452+ ----------
453+ access_code : Union[AccessCode, AccessCodeId]
454+ Access code ID or AccessCode
455+
456+ Raises
457+ ------
458+ Exception
459+ If the API request wasn't successful.
460+
461+ Returns
462+ ------
463+ AccessCode
464+ """
465+
466+ res = self .seam .make_request (
467+ "POST" ,
468+ "/access_codes/pull_backup_access_code" ,
469+ json = {"access_code_id" : to_access_code_id (access_code )},
470+ )
471+
472+ return AccessCode .from_dict (res ["backup_access_code" ])
0 commit comments