From 06c50b70530b44d173d9553e7df5c61517cc4602 Mon Sep 17 00:00:00 2001 From: Tristan Brewster Date: Fri, 16 Sep 2022 13:33:37 -0600 Subject: [PATCH] fix #29: Implement `devices.update` method --- seamapi/devices.py | 52 +++++++++++++++++++++++++++++++++++ tests/devices/test_devices.py | 4 +++ 2 files changed, 56 insertions(+) diff --git a/seamapi/devices.py b/seamapi/devices.py index a97ce41..7adc406 100644 --- a/seamapi/devices.py +++ b/seamapi/devices.py @@ -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 @@ -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 \ No newline at end of file diff --git a/tests/devices/test_devices.py b/tests/devices/test_devices.py index c977b1e..7724d20 100644 --- a/tests/devices/test_devices.py +++ b/tests/devices/test_devices.py @@ -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"