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

Commit 36f8974

Browse files
committed
Poll until code
1 parent c637ac9 commit 36f8974

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

seamapi/access_codes.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from datetime import datetime, timezone, timedelta
12
from seamapi.types import (
23
AbstractAccessCodes,
34
AccessCode,
@@ -166,22 +167,27 @@ def create(
166167
if common_code_key is not None:
167168
create_payload["common_code_key"] = common_code_key
168169

170+
if (wait_for_code
171+
and starts_at is not None
172+
and datetime.fromisoformat(starts_at) > datetime.now() + timedelta(seconds=5)
173+
):
174+
raise RuntimeException("Cannot use wait_for_code with a future time bound code")
175+
169176
res = self.seam.make_request(
170177
"POST",
171178
"/access_codes/create",
172179
json=create_payload,
173180
)
174181

175-
# TODO: Poll AccessCode not ActionAttempt
176-
if wait_for_code:
177-
action_attempt = self.seam.action_attempts.poll_until_ready(
178-
res["action_attempt"]["action_attempt_id"]
179-
)
180-
success_res: Any = action_attempt.result
182+
access_code = AccessCode.from_dict(res["access_code"])
181183

182-
return AccessCode.from_dict(success_res["access_code"])
184+
if wait_for_code:
185+
while (access_code.code is None):
186+
if (access_code.status != "unknown"):
187+
raise RuntimeException("Gave up waiting for code since access code status is unknown")
188+
access_code = access_codes.get(access_code)
183189

184-
return AccessCode.from_dict(res["access_code"])
190+
return access_code
185191

186192
@report_error
187193
def create_multiple(

tests/access_codes/test_access_codes.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,20 @@ def test_access_codes(seam: Seam):
3131
delete_action_attempt = seam.access_codes.delete(created_access_code)
3232
assert delete_action_attempt.status == "success"
3333

34-
created_access_code = seam.access_codes.create(
35-
some_device.device_id, "Other Test code", "4445", wait_for_code=False
36-
)
37-
assert created_access_code.name == "Other Test code"
38-
assert created_access_code.code == "4445"
39-
4034
# TODO: Can only test for salto devices.
4135
# access_codes = seam.access_codes.create_multiple(devices=all_devices)
4236
# assert len(access_codes) == len(all_devices)
4337
# assert len(set([ac.common_code_key for ac in access_codes])) == 1
38+
39+
def test_access_codes_create_wait_for_code(seam: Seam):
40+
run_august_factory(seam)
41+
42+
all_devices = seam.devices.list()
43+
some_device = all_devices[0]
44+
45+
created_access_code = seam.access_codes.create(
46+
some_device.device_id, "Test code", "4445", wait_for_code=True
47+
)
48+
49+
assert created_access_code.name == "Test code"
50+
assert created_access_code.code == "4445"

0 commit comments

Comments
 (0)