Skip to content
This repository was archived by the owner on Jun 28, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions seamapi/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ class Devices(AbstractDevices):
Gets a list of devices
get(device=None, name=None)
Gets a device
update(device, name=None, properties=None, location=None)
Updates a device
"""

seam: Seam
Expand Down Expand Up @@ -136,3 +138,53 @@ def get(
raise Exception(res.text)
json_device = res.json()["device"]
return Device.from_dict(json_device)

def update(
self,
device: Union[DeviceId, Device],
name: Optional[str] = None,
properties: Optional[dict] = None,
location: Optional[dict] = None,
) -> Device:
"""Updates a device.

Parameters
----------
device : DeviceId or Device
Device id or Device to update
name : str, optional
New device name
properties : dict, optional
New device properties
location : str, optional
New device location

Raises
------
Exception
If the API request wasn't successful.

Returns
------
Boolean
"""

if not device:
raise Exception("device is required")

params = {
"device_id": to_device_id(device),
"name": name,
"properties": properties,
"location": location,
}

res = requests.post(
f"{self.seam.api_url}/devices/update",
headers={"Authorization": f"Bearer {self.seam.api_key}"},
params=params,
)
if not res.ok:
raise Exception(res.text)

return True
4 changes: 4 additions & 0 deletions tests/devices/test_devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ def test_devices(seam: Seam):
seam.locks.lock_door(device=(some_device))
some_locked_lock = seam.locks.get(device=(some_device))
assert some_locked_lock.properties.locked == True

seam.devices.update(device=(some_device), name="Updated lock")
some_updated_lock = seam.locks.get(device=(some_device))
assert some_updated_lock.properties.name == "Updated lock"