@@ -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 ],
0 commit comments