From e21ba0391736e0069dc211b0a9e17726191d773c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Sep 2025 09:13:49 +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.587.0 to 1.591.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.587.0...v1.591.0) --- updated-dependencies: - dependency-name: "@seamapi/types" dependency-version: 1.591.0 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 2d25441..ed54f3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.85.1", "@seamapi/nextlove-sdk-generator": "^1.19.1", - "@seamapi/types": "1.587.0", + "@seamapi/types": "1.591.0", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -475,9 +475,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.587.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.587.0.tgz", - "integrity": "sha512-5p5KOjoUUZVdwP0XDS0BYzeR3PU8Hiw6yQwkSaIoYfPhkZWqWiac9DjAmJysKqSOefECPUk/0BT8rpMenJ8puQ==", + "version": "1.591.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.591.0.tgz", + "integrity": "sha512-9r1414GHNbTX85XpEl9tvbiPDvw/TDghWMJk5TSz0CXkwafhOpvY08Wfl16KAPHdN5qVClDlLO9eG4ZS8z8BUQ==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 3a8d0b7..988cacd 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.85.1", "@seamapi/nextlove-sdk-generator": "^1.19.1", - "@seamapi/types": "1.587.0", + "@seamapi/types": "1.591.0", "del": "^7.1.0", "prettier": "^3.2.5" } From 2aa847b39e89784331499d05f21071ba7e899f8c Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Fri, 26 Sep 2025 09:14:33 +0000 Subject: [PATCH 2/2] ci: Generate code --- seam/routes/__init__.py | 2 ++ seam/routes/connected_accounts.py | 5 +++- seam/routes/customers.py | 3 ++ seam/routes/models.py | 33 +++++++++++++++++++++- seam/routes/seam.py | 15 ++++++++++ seam/routes/seam_customer_v1_spaces.py | 38 ++++++++++++++++++++++++++ 6 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 seam/routes/seam.py create mode 100644 seam/routes/seam_customer_v1_spaces.py diff --git a/seam/routes/__init__.py b/seam/routes/__init__.py index 2c14d16..05cdd16 100644 --- a/seam/routes/__init__.py +++ b/seam/routes/__init__.py @@ -16,6 +16,7 @@ from .locks import Locks from .noise_sensors import NoiseSensors from .phones import Phones +from .seam import Seam from .spaces import Spaces from .thermostats import Thermostats from .user_identities import UserIdentities @@ -40,6 +41,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.locks = Locks(client=client, defaults=defaults) self.noise_sensors = NoiseSensors(client=client, defaults=defaults) self.phones = Phones(client=client, defaults=defaults) + self.seam = Seam(client=client, defaults=defaults) self.spaces = Spaces(client=client, defaults=defaults) self.thermostats = Thermostats(client=client, defaults=defaults) self.user_identities = UserIdentities(client=client, defaults=defaults) diff --git a/seam/routes/connected_accounts.py b/seam/routes/connected_accounts.py index 57637a9..6cee9ad 100644 --- a/seam/routes/connected_accounts.py +++ b/seam/routes/connected_accounts.py @@ -79,7 +79,8 @@ def update( connected_account_id: str, accepted_capabilities: Optional[List[str]] = None, automatically_manage_new_devices: Optional[bool] = None, - custom_metadata: Optional[Dict[str, Any]] = None + custom_metadata: Optional[Dict[str, Any]] = None, + customer_key: Optional[str] = None ) -> None: json_payload = {} @@ -93,6 +94,8 @@ def update( ) if custom_metadata is not None: json_payload["custom_metadata"] = custom_metadata + if customer_key is not None: + json_payload["customer_key"] = customer_key self.client.post("/connected_accounts/update", json=json_payload) diff --git a/seam/routes/customers.py b/seam/routes/customers.py index 1d72409..5dedc41 100644 --- a/seam/routes/customers.py +++ b/seam/routes/customers.py @@ -112,6 +112,7 @@ def push_data( reservations: Optional[List[Dict[str, Any]]] = None, residents: Optional[List[Dict[str, Any]]] = None, rooms: Optional[List[Dict[str, Any]]] = None, + sites: Optional[List[Dict[str, Any]]] = None, spaces: Optional[List[Dict[str, Any]]] = None, tenants: Optional[List[Dict[str, Any]]] = None, units: Optional[List[Dict[str, Any]]] = None, @@ -146,6 +147,8 @@ def push_data( json_payload["residents"] = residents if rooms is not None: json_payload["rooms"] = rooms + if sites is not None: + json_payload["sites"] = sites if spaces is not None: json_payload["spaces"] = spaces if tenants is not None: diff --git a/seam/routes/models.py b/seam/routes/models.py index a6a249e..c214bdf 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -1175,6 +1175,8 @@ class Space: device_count: float display_name: str name: str + parent_space_id: str + parent_space_key: str space_id: str space_key: str workspace_id: str @@ -1187,6 +1189,8 @@ def from_dict(d: Dict[str, Any]): device_count=d.get("device_count", None), display_name=d.get("display_name", None), name=d.get("name", None), + parent_space_id=d.get("parent_space_id", None), + parent_space_key=d.get("parent_space_key", None), space_id=d.get("space_id", None), space_key=d.get("space_key", None), workspace_id=d.get("workspace_id", None), @@ -2266,7 +2270,8 @@ def update( connected_account_id: str, accepted_capabilities: Optional[List[str]] = None, automatically_manage_new_devices: Optional[bool] = None, - custom_metadata: Optional[Dict[str, Any]] = None + custom_metadata: Optional[Dict[str, Any]] = None, + customer_key: Optional[str] = None ) -> None: raise NotImplementedError() @@ -2326,6 +2331,7 @@ def push_data( reservations: Optional[List[Dict[str, Any]]] = None, residents: Optional[List[Dict[str, Any]]] = None, rooms: Optional[List[Dict[str, Any]]] = None, + sites: Optional[List[Dict[str, Any]]] = None, spaces: Optional[List[Dict[str, Any]]] = None, tenants: Optional[List[Dict[str, Any]]] = None, units: Optional[List[Dict[str, Any]]] = None, @@ -2553,6 +2559,22 @@ def create_sandbox_phone( raise NotImplementedError() +class AbstractSeamCustomerV1Spaces(abc.ABC): + + @abc.abstractmethod + def create( + self, + *, + name: str, + acs_entrance_ids: Optional[List[str]] = None, + device_ids: Optional[List[str]] = None, + parent_space_key: Optional[str] = None, + parent_space_name: Optional[str] = None, + space_key: Optional[str] = None + ) -> Space: + raise NotImplementedError() + + class AbstractSpaces(abc.ABC): @abc.abstractmethod @@ -3007,6 +3029,14 @@ def list( raise NotImplementedError() +class AbstractSeam(abc.ABC): + + @property + @abc.abstractmethod + def customer(self) -> AbstractSeamCustomer: + raise NotImplementedError() + + class AbstractUserIdentities(abc.ABC): @property @@ -3607,6 +3637,7 @@ class AbstractRoutes(abc.ABC): locks: AbstractLocks noise_sensors: AbstractNoiseSensors phones: AbstractPhones + seam: AbstractSeam spaces: AbstractSpaces thermostats: AbstractThermostats user_identities: AbstractUserIdentities diff --git a/seam/routes/seam.py b/seam/routes/seam.py new file mode 100644 index 0000000..6956628 --- /dev/null +++ b/seam/routes/seam.py @@ -0,0 +1,15 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractSeam +from .seam_customer import SeamCustomer + + +class Seam(AbstractSeam): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + self._customer = SeamCustomer(client=client, defaults=defaults) + + @property + def customer(self) -> SeamCustomer: + return self._customer diff --git a/seam/routes/seam_customer_v1_spaces.py b/seam/routes/seam_customer_v1_spaces.py new file mode 100644 index 0000000..90bdf78 --- /dev/null +++ b/seam/routes/seam_customer_v1_spaces.py @@ -0,0 +1,38 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractSeamCustomerV1Spaces, Space + + +class SeamCustomerV1Spaces(AbstractSeamCustomerV1Spaces): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def create( + self, + *, + name: str, + acs_entrance_ids: Optional[List[str]] = None, + device_ids: Optional[List[str]] = None, + parent_space_key: Optional[str] = None, + parent_space_name: Optional[str] = None, + space_key: Optional[str] = None + ) -> Space: + json_payload = {} + + if name is not None: + json_payload["name"] = name + if acs_entrance_ids is not None: + json_payload["acs_entrance_ids"] = acs_entrance_ids + if device_ids is not None: + json_payload["device_ids"] = device_ids + if parent_space_key is not None: + json_payload["parent_space_key"] = parent_space_key + if parent_space_name is not None: + json_payload["parent_space_name"] = parent_space_name + if space_key is not None: + json_payload["space_key"] = space_key + + res = self.client.post("/seam/customer/v1/spaces/create", json=json_payload) + + return Space.from_dict(res["space"])