99)
1010from typing import List , Optional , Union , Any
1111import requests
12-
13-
14- def to_access_code_id (access_code : Union [AccessCodeId , AccessCode ]) -> str :
15- if isinstance (access_code , str ):
16- return access_code
17- return access_code .access_code_id
18-
19-
20- def to_device_id (device : Union [DeviceId , Device ]) -> str :
21- if isinstance (device , str ):
22- return device
23- return device .device_id
12+ from seamapi .utils .convert_to_id import to_access_code_id , to_device_id
2413
2514
2615class AccessCodes (AbstractAccessCodes ):
27- seam : Seam
2816 """
2917 A class used to retreive access code data
3018 through interaction with Seam API
@@ -33,26 +21,28 @@ class AccessCodes(AbstractAccessCodes):
3321
3422 Attributes
3523 ----------
36- seam : dict
24+ seam : Seam
3725 Initial seam class
3826
3927 Methods
4028 -------
4129 list(device)
4230 Gets a list of access codes for a device
43- get(access_code)
31+ get(access_code=None, device=None )
4432 Gets a certain access code of a device
45- create(device, name, code=None, starts_at=None, ends_at=None)
33+ create(device, name=None , code=None, starts_at=None, ends_at=None)
4634 Creates an access code on a device
47- delete(access_code)
35+ delete(access_code, device=None )
4836 Deletes an access code on a device
4937 """
5038
39+ seam : Seam
40+
5141 def __init__ (self , seam : Seam ):
5242 """
5343 Parameters
5444 ----------
55- seam : dict
45+ seam : Seam
5646 Intial seam class
5747 """
5848
@@ -63,8 +53,8 @@ def list(self, device: Union[DeviceId, Device]) -> List[AccessCode]:
6353
6454 Parameters
6555 ----------
66- device : str or dict
67- Device id or device dict
56+ device : DeviceId or Device
57+ Device id or Device to list access codes for
6858
6959 Raises
7060 ------
@@ -73,7 +63,7 @@ def list(self, device: Union[DeviceId, Device]) -> List[AccessCode]:
7363
7464 Returns
7565 ------
76- A list of access codes for a device
66+ A list of access codes for a device.
7767 """
7868
7969 device_id = to_device_id (device )
@@ -86,13 +76,19 @@ def list(self, device: Union[DeviceId, Device]) -> List[AccessCode]:
8676 access_codes = res .json ()["access_codes" ]
8777 return [AccessCode .from_dict (ac ) for ac in access_codes ]
8878
89- def get (self , access_code : Union [AccessCodeId , AccessCode ]) -> AccessCode :
90- """Gets a certain access code of a device.
79+ def get (
80+ self ,
81+ access_code : Optional [Union [AccessCodeId , AccessCode ]] = None ,
82+ device : Optional [Union [DeviceId , AccessCode ]] = None ,
83+ ) -> AccessCode :
84+ """Gets a certain access code for a device.
9185
9286 Parameters
9387 ----------
94- access_code : str or dict
95- Access code id or access code dict
88+ access_code : AccessCodeId or AccessCode, optional
89+ Access code id or AccessCode to get latest version of
90+ device : DeviceId or Device, optional
91+ Device id or Device to get an access code for
9692
9793 Raises
9894 ------
@@ -101,14 +97,18 @@ def get(self, access_code: Union[AccessCodeId, AccessCode]) -> AccessCode:
10197
10298 Returns
10399 ------
104- An access code dict
100+ AccessCode
105101 """
106102
107- access_code_id = to_access_code_id (access_code )
103+ params = {}
104+ if access_code :
105+ params ["access_code_id" ] = to_access_code_id (access_code )
106+ if device :
107+ params ["device_id" ] = to_device_id (device )
108108 res = requests .get (
109109 f"{ self .seam .api_url } /access_codes/get" ,
110110 headers = {"Authorization" : f"Bearer { self .seam .api_key } " },
111- params = { "access_code_id" : access_code_id } ,
111+ params = params ,
112112 )
113113 if not res .ok :
114114 raise Exception (res .text )
@@ -117,7 +117,7 @@ def get(self, access_code: Union[AccessCodeId, AccessCode]) -> AccessCode:
117117 def create (
118118 self ,
119119 device : Union [DeviceId , Device ],
120- name : str ,
120+ name : Optional [ str ] = None ,
121121 code : Optional [str ] = None ,
122122 starts_at : Optional [str ] = None ,
123123 ends_at : Optional [str ] = None ,
@@ -126,9 +126,9 @@ def create(
126126
127127 Parameters
128128 ----------
129- device : str or dict
130- Device id or device dict
131- name : str
129+ device : DeviceId or Device
130+ Device id or Device to create an access code for
131+ name : str, optional
132132 Access code name
133133 code : str, optional
134134 Access code value
@@ -144,11 +144,13 @@ def create(
144144
145145 Returns
146146 ------
147- Access code dict
147+ AccessCode
148148 """
149149
150150 device_id = to_device_id (device )
151- create_payload = {"device_id" : device_id , "name" : name }
151+ create_payload = {"device_id" : device_id }
152+ if name is not None :
153+ create_payload ["name" ] = name
152154 if code is not None :
153155 create_payload ["code" ] = code
154156 if starts_at is not None :
@@ -168,13 +170,19 @@ def create(
168170 success_res : Any = action_attempt .result
169171 return AccessCode .from_dict (success_res ["access_code" ])
170172
171- def delete (self , access_code : Union [AccessCodeId , AccessCode ]) -> ActionAttempt :
173+ def delete (
174+ self ,
175+ access_code : Union [AccessCodeId , AccessCode ],
176+ device : Optional [Union [DeviceId , AccessCode ]] = None ,
177+ ) -> ActionAttempt :
172178 """Deletes an access code on a device.
173179
174180 Parameters
175181 ----------
176- access_code : str or dict
177- Access code id or access code dict
182+ access_code : AccessCodeId or AccessCode
183+ Access code id or AccessCode to delete it
184+ device : DeviceId or Device, optional
185+ Device id or Device to delete an access code on
178186
179187 Raises
180188 ------
@@ -185,14 +193,17 @@ def delete(self, access_code: Union[AccessCodeId, AccessCode]) -> ActionAttempt:
185193
186194 Returns
187195 ------
188- An access code dict
196+ ActionAttempt
189197 """
190198
191199 access_code_id = to_access_code_id (access_code )
200+ create_payload = {"access_code_id" : access_code_id }
201+ if device is not None :
202+ create_payload ["device_id" ] = to_device_id (device )
192203 res = requests .delete (
193204 (f"{ self .seam .api_url } /access_codes/delete" ),
194205 headers = {"Authorization" : f"Bearer { self .seam .api_key } " },
195- json = { "access_code_id" : access_code_id } ,
206+ json = create_payload ,
196207 )
197208 if not res .ok :
198209 raise Exception (res .text )
0 commit comments