Skip to content
This repository was archived by the owner on Jun 28, 2024. It is now read-only.

Commit ecec2fa

Browse files
committed
Add timeout param
1 parent 06fe512 commit ecec2fa

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

seamapi/access_codes.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)