From da7a8ea3ef78ecaaa964d8a862edd86bd81bdd5e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:11:50 +0000 Subject: [PATCH 1/2] feat(deps-dev): bump @seamapi/types in the seam group Bumps the seam group with 1 update: [@seamapi/types](https://github.com/seamapi/types). Updates `@seamapi/types` from 1.248.0 to 1.253.0 - [Release notes](https://github.com/seamapi/types/releases) - [Changelog](https://github.com/seamapi/types/blob/main/.releaserc.json) - [Commits](https://github.com/seamapi/types/compare/v1.248.0...v1.253.0) --- updated-dependencies: - dependency-name: "@seamapi/types" dependency-type: direct:development update-type: version-update:semver-minor dependency-group: seam ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8e3a4d1..afdaa4fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.72.1", "@seamapi/nextlove-sdk-generator": "1.14.4", - "@seamapi/types": "1.248.0", + "@seamapi/types": "1.253.0", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -473,9 +473,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.248.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.248.0.tgz", - "integrity": "sha512-EP69PSUhsQ2UE8yXz9+JITZGgjTZEoVPyVA+V5ZmbgP0aiPeM0K60L5HJol9HDidTL2taNf051+qpPYwRbKd9Q==", + "version": "1.253.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.253.0.tgz", + "integrity": "sha512-p7glHUlIj0ZlA9lyocuQ/vJN2e4kb0KmP2ULRchSvfo0vcAe8JaLfGURB1ha6S2xZjzgm0rU4JUvOpiKRp1aBQ==", "dev": true, "engines": { "node": ">=18.12.0", diff --git a/package.json b/package.json index c83961ce..ea0500c1 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.72.1", "@seamapi/nextlove-sdk-generator": "1.14.4", - "@seamapi/types": "1.248.0", + "@seamapi/types": "1.253.0", "del": "^7.1.0", "prettier": "^3.2.5" } From 2169ba8500d36d8b45cc7cea2af2674d3fd156a6 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Fri, 27 Sep 2024 09:12:44 +0000 Subject: [PATCH 2/2] ci: Generate code --- seam/routes/acs.py | 6 ++++++ seam/routes/acs_encoders.py | 42 +++++++++++++++++++++++++++++++++++++ seam/routes/models.py | 21 ++++++++++++++++++- seam/routes/thermostats.py | 8 +++---- 4 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 seam/routes/acs_encoders.py diff --git a/seam/routes/acs.py b/seam/routes/acs.py index fe36479f..1f2f90f7 100644 --- a/seam/routes/acs.py +++ b/seam/routes/acs.py @@ -7,6 +7,7 @@ AcsCredentialProvisioningAutomations, ) from .acs_credentials import AcsCredentials +from .acs_encoders import AcsEncoders from .acs_entrances import AcsEntrances from .acs_systems import AcsSystems from .acs_users import AcsUsers @@ -22,6 +23,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): AcsCredentialProvisioningAutomations(client=client, defaults=defaults) ) self._credentials = AcsCredentials(client=client, defaults=defaults) + self._encoders = AcsEncoders(client=client, defaults=defaults) self._entrances = AcsEntrances(client=client, defaults=defaults) self._systems = AcsSystems(client=client, defaults=defaults) self._users = AcsUsers(client=client, defaults=defaults) @@ -44,6 +46,10 @@ def credential_provisioning_automations( def credentials(self) -> AcsCredentials: return self._credentials + @property + def encoders(self) -> AcsEncoders: + return self._encoders + @property def entrances(self) -> AcsEntrances: return self._entrances diff --git a/seam/routes/acs_encoders.py b/seam/routes/acs_encoders.py new file mode 100644 index 00000000..fd99656f --- /dev/null +++ b/seam/routes/acs_encoders.py @@ -0,0 +1,42 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractAcsEncoders, ActionAttempt + +from ..modules.action_attempts import resolve_action_attempt + + +class AcsEncoders(AbstractAcsEncoders): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def read_card( + self, + *, + acs_system_id: Optional[str] = None, + device_name: Optional[str] = None, + device_id: Optional[str] = None, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None + ) -> ActionAttempt: + json_payload = {} + + if acs_system_id is not None: + json_payload["acs_system_id"] = acs_system_id + if device_name is not None: + json_payload["device_name"] = device_name + if device_id is not None: + json_payload["device_id"] = device_id + + res = self.client.post("/acs/encoders/read_card", json=json_payload) + + wait_for_action_attempt = ( + self.defaults.get("wait_for_action_attempt") + if wait_for_action_attempt is None + else wait_for_action_attempt + ) + + return resolve_action_attempt( + client=self.client, + action_attempt=ActionAttempt.from_dict(res["action_attempt"]), + wait_for_action_attempt=wait_for_action_attempt, + ) diff --git a/seam/routes/models.py b/seam/routes/models.py index 2136d9b9..64b0842f 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -1149,6 +1149,20 @@ def list( raise NotImplementedError() +class AbstractAcsEncoders(abc.ABC): + + @abc.abstractmethod + def read_card( + self, + *, + acs_system_id: Optional[str] = None, + device_name: Optional[str] = None, + device_id: Optional[str] = None, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None + ) -> ActionAttempt: + raise NotImplementedError() + + class AbstractAcsEntrances(abc.ABC): @abc.abstractmethod @@ -1847,7 +1861,7 @@ def create_climate_preset( heating_set_point_fahrenheit: Optional[float] = None, hvac_mode_setting: Optional[str] = None, name: Optional[str] = None - ) -> None: + ) -> ClimatePreset: raise NotImplementedError() @abc.abstractmethod @@ -2272,6 +2286,11 @@ def credential_provisioning_automations( def credentials(self) -> AbstractAcsCredentials: raise NotImplementedError() + @property + @abc.abstractmethod + def encoders(self) -> AbstractAcsEncoders: + raise NotImplementedError() + @property @abc.abstractmethod def entrances(self) -> AbstractAcsEntrances: diff --git a/seam/routes/thermostats.py b/seam/routes/thermostats.py index 641ce9a7..f6a868ac 100644 --- a/seam/routes/thermostats.py +++ b/seam/routes/thermostats.py @@ -1,6 +1,6 @@ from typing import Optional, Any, List, Dict, Union from ..client import SeamHttpClient -from .models import AbstractThermostats, ActionAttempt, Device +from .models import AbstractThermostats, ActionAttempt, ClimatePreset, Device from .thermostats_schedules import ThermostatsSchedules from ..modules.action_attempts import resolve_action_attempt @@ -92,7 +92,7 @@ def create_climate_preset( heating_set_point_fahrenheit: Optional[float] = None, hvac_mode_setting: Optional[str] = None, name: Optional[str] = None - ) -> None: + ) -> ClimatePreset: json_payload = {} if climate_preset_key is not None: @@ -116,9 +116,9 @@ def create_climate_preset( if name is not None: json_payload["name"] = name - self.client.post("/thermostats/create_climate_preset", json=json_payload) + res = self.client.post("/thermostats/create_climate_preset", json=json_payload) - return None + return ClimatePreset.from_dict(res["climate_preset"]) def delete_climate_preset(self, *, climate_preset_key: str, device_id: str) -> None: json_payload = {}