@@ -130,6 +130,7 @@ def create(
130130 ends_at : Optional [str ] = None ,
131131 common_code_key : Optional [str ] = None ,
132132 wait_for_code : Optional [bool ] = False ,
133+ timeout : Optional [int ] = 300 ,
133134 ) -> AccessCode :
134135 """Creates an access code on a device.
135136
@@ -145,6 +146,10 @@ def create(
145146 Time when access code becomes effective
146147 ends_at : str, optional
147148 Time when access code ceases to be effective
149+ wait_for_code : bool, optional
150+ Poll the access code until the code is known.
151+ timeout : int, optional:
152+ Maximum polling time in seconds.
148153
149154 Raises
150155 ------
@@ -185,6 +190,8 @@ def create(
185190
186191 access_code = AccessCode .from_dict (res ["access_code" ])
187192
193+ duration = 0
194+ poll_interval = 0.25
188195 if wait_for_code :
189196 while (access_code .code is None ):
190197 if (access_code .status == "unknown" ):
@@ -198,7 +205,15 @@ def create(
198205 access_code_id = access_code .access_code_id ,
199206 errors = access_code .errors
200207 )
201- time .sleep (0.25 )
208+ time .sleep (poll_interval )
209+ duration += poll_interval
210+ if (duration > timeout ):
211+ raise WaitForAccessCodeFailedException (
212+ f"Gave up after waiting the maximum timeout of { timeout } seconds" ,
213+ access_code_id = access_code .access_code_id ,
214+ errors = access_code .errors
215+ )
216+
202217 access_code = access_codes .get (access_code )
203218
204219 return access_code
0 commit comments