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

Commit 777edbc

Browse files
authored
feat: Merge pull request #17 from seamapi/feat-update-access-codes
2 parents c36b15a + dfb91b4 commit 777edbc

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed

seamapi/access_codes.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,68 @@ def create(
170170
success_res: Any = action_attempt.result
171171
return AccessCode.from_dict(success_res["access_code"])
172172

173+
def update(
174+
self,
175+
access_code: Union[AccessCodeId, AccessCode],
176+
device: Optional[Union[DeviceId, Device]] = None,
177+
name: Optional[str] = None,
178+
code: Optional[str] = None,
179+
starts_at: Optional[str] = None,
180+
ends_at: Optional[str] = None,
181+
) -> AccessCode:
182+
"""Updates an access code on a device.
183+
184+
Parameters
185+
----------
186+
access_code: AccessCodeId or AccessCode
187+
Access code id or Access code to update
188+
device : DeviceId or Device
189+
New device to move access code to
190+
name : str, optional
191+
Access code name
192+
code : str, optional
193+
Access code value
194+
starts_at : str, optional
195+
Time when access code becomes effective
196+
ends_at : str, optional
197+
Time when access code ceases to be effective
198+
199+
Raises
200+
------
201+
Exception
202+
If the API request wasn't successful.
203+
204+
Returns
205+
------
206+
AccessCode
207+
"""
208+
209+
access_code_id = to_access_code_id(access_code)
210+
update_payload = {"access_code_id": access_code_id}
211+
if device is not None:
212+
update_payload["device_id"] = to_device_id(device)
213+
if name is not None:
214+
update_payload["name"] = name
215+
if code is not None:
216+
update_payload["code"] = code
217+
if starts_at is not None:
218+
update_payload["starts_at"] = starts_at
219+
if ends_at is not None:
220+
update_payload["ends_at"] = ends_at
221+
res = requests.post(
222+
f"{self.seam.api_url}/access_codes/update",
223+
headers={"Authorization": f"Bearer {self.seam.api_key}"},
224+
json=update_payload,
225+
)
226+
if not res.ok:
227+
raise Exception(res.text)
228+
action_attempt = self.seam.action_attempts.poll_until_ready(
229+
res.json()["action_attempt"]["action_attempt_id"]
230+
)
231+
success_res: Any = action_attempt.result
232+
return AccessCode.from_dict(success_res["access_code"])
233+
234+
173235
def delete(
174236
self,
175237
access_code: Union[AccessCodeId, AccessCode],

seamapi/types.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,18 @@ def create(
140140
) -> AccessCode:
141141
raise NotImplementedError
142142

143+
@abc.abstractmethod
144+
def update(
145+
self,
146+
access_code: Union[AccessCodeId, AccessCode],
147+
device: Optional[Union[DeviceId, Device]] = None,
148+
name: Optional[str] = None,
149+
code: Optional[str] = None,
150+
starts_at: Optional[str] = None,
151+
ends_at: Optional[str] = None,
152+
) -> AccessCode:
153+
raise NotImplementedError
154+
143155
@abc.abstractmethod
144156
def delete(
145157
self,

tests/access_codes/test_access_codes.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,8 @@ def test_access_codes(seam: Seam):
1616
access_code = seam.access_codes.get(created_access_code.access_code_id)
1717
assert access_code.code == "4444"
1818

19+
access_code = seam.access_codes.update(access_code, name="Updated name")
20+
assert access_code.name == "Updated name"
21+
1922
delete_action_attempt = seam.access_codes.delete(created_access_code)
2023
assert delete_action_attempt.status == "success"

0 commit comments

Comments
 (0)