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

Commit bd94e17

Browse files
authored
feat: Merge pull request #41 from seamapi/implement-device-update
fix #29: Implement `devices.update` method
2 parents 0d3ef59 + 06c50b7 commit bd94e17

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

seamapi/devices.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ class Devices(AbstractDevices):
3636
Gets a list of devices
3737
get(device=None, name=None)
3838
Gets a device
39+
update(device, name=None, properties=None, location=None)
40+
Updates a device
3941
"""
4042

4143
seam: Seam
@@ -136,3 +138,53 @@ def get(
136138
raise Exception(res.text)
137139
json_device = res.json()["device"]
138140
return Device.from_dict(json_device)
141+
142+
def update(
143+
self,
144+
device: Union[DeviceId, Device],
145+
name: Optional[str] = None,
146+
properties: Optional[dict] = None,
147+
location: Optional[dict] = None,
148+
) -> Device:
149+
"""Updates a device.
150+
151+
Parameters
152+
----------
153+
device : DeviceId or Device
154+
Device id or Device to update
155+
name : str, optional
156+
New device name
157+
properties : dict, optional
158+
New device properties
159+
location : str, optional
160+
New device location
161+
162+
Raises
163+
------
164+
Exception
165+
If the API request wasn't successful.
166+
167+
Returns
168+
------
169+
Boolean
170+
"""
171+
172+
if not device:
173+
raise Exception("device is required")
174+
175+
params = {
176+
"device_id": to_device_id(device),
177+
"name": name,
178+
"properties": properties,
179+
"location": location,
180+
}
181+
182+
res = requests.post(
183+
f"{self.seam.api_url}/devices/update",
184+
headers={"Authorization": f"Bearer {self.seam.api_key}"},
185+
params=params,
186+
)
187+
if not res.ok:
188+
raise Exception(res.text)
189+
190+
return True

tests/devices/test_devices.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,7 @@ def test_devices(seam: Seam):
2727
seam.locks.lock_door(device=(some_device))
2828
some_locked_lock = seam.locks.get(device=(some_device))
2929
assert some_locked_lock.properties.locked == True
30+
31+
seam.devices.update(device=(some_device), name="Updated lock")
32+
some_updated_lock = seam.locks.get(device=(some_device))
33+
assert some_updated_lock.properties.name == "Updated lock"

0 commit comments

Comments
 (0)