From 0a644b41fe50172549427c7cc33ac8df6ceb8dfa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:53:40 +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.761.0 to 1.768.1 - [Release notes](https://github.com/seamapi/types/releases) - [Commits](https://github.com/seamapi/types/compare/v1.761.0...v1.768.1) --- updated-dependencies: - dependency-name: "@seamapi/types" dependency-version: 1.768.1 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 a39e944..bafb280 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.86.0", "@seamapi/nextlove-sdk-generator": "^1.19.8", - "@seamapi/types": "1.761.0", + "@seamapi/types": "1.768.1", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -535,9 +535,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.761.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.761.0.tgz", - "integrity": "sha512-M25GTKyWbPYXRh0lTFZzpbtlEHMX5dbKj8amhgYe9H0tugVMYm1OMj9+w3t0V+eNXm7Qy2jw3c8IPFoLQxSmUA==", + "version": "1.768.1", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.768.1.tgz", + "integrity": "sha512-BBYgxv+gaE0rz2iekFB5tYm3VzQ8o/xEGbsZy0AXg/FpVtsTxT2f0481XEh6a7UXEJYYEtHZvA7/bXJyXymcnA==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 85a68f8..ebeeed4 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.86.0", "@seamapi/nextlove-sdk-generator": "^1.19.8", - "@seamapi/types": "1.761.0", + "@seamapi/types": "1.768.1", "del": "^7.1.0", "prettier": "^3.2.5" } From 333ac387e34ce6c87b9ff651f836299268bf9dfb Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Wed, 25 Mar 2026 09:54:22 +0000 Subject: [PATCH 2/2] ci: Generate code --- seam/routes/access_codes.py | 26 ---- seam/routes/customers.py | 6 - seam/routes/customers_reservations.py | 21 ---- seam/routes/locks.py | 33 ++++- seam/routes/models.py | 173 ++++++++++++-------------- 5 files changed, 115 insertions(+), 144 deletions(-) delete mode 100644 seam/routes/customers_reservations.py diff --git a/seam/routes/access_codes.py b/seam/routes/access_codes.py index 6066a70..058123c 100644 --- a/seam/routes/access_codes.py +++ b/seam/routes/access_codes.py @@ -182,32 +182,6 @@ def get( return AccessCode.from_dict(res["access_code"]) - def get_timeline( - self, - *, - access_code_id: str, - after: Optional[str] = None, - before: Optional[str] = None, - event_types: Optional[List[str]] = None, - limit: Optional[float] = None - ) -> None: - json_payload = {} - - if access_code_id is not None: - json_payload["access_code_id"] = access_code_id - if after is not None: - json_payload["after"] = after - if before is not None: - json_payload["before"] = before - if event_types is not None: - json_payload["event_types"] = event_types - if limit is not None: - json_payload["limit"] = limit - - self.client.post("/access_codes/get_timeline", json=json_payload) - - return None - def list( self, *, diff --git a/seam/routes/customers.py b/seam/routes/customers.py index ae52a64..6c422cb 100644 --- a/seam/routes/customers.py +++ b/seam/routes/customers.py @@ -1,18 +1,12 @@ from typing import Optional, Any, List, Dict, Union from ..client import SeamHttpClient from .models import AbstractCustomers, MagicLink -from .customers_reservations import CustomersReservations class Customers(AbstractCustomers): def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.client = client self.defaults = defaults - self._reservations = CustomersReservations(client=client, defaults=defaults) - - @property - def reservations(self) -> CustomersReservations: - return self._reservations def create_portal( self, diff --git a/seam/routes/customers_reservations.py b/seam/routes/customers_reservations.py deleted file mode 100644 index 1b33221..0000000 --- a/seam/routes/customers_reservations.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Optional, Any, List, Dict, Union -from ..client import SeamHttpClient -from .models import AbstractCustomersReservations - - -class CustomersReservations(AbstractCustomersReservations): - def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): - self.client = client - self.defaults = defaults - - def create_deep_link(self, *, customer_key: str, reservation_key: str) -> None: - json_payload = {} - - if customer_key is not None: - json_payload["customer_key"] = customer_key - if reservation_key is not None: - json_payload["reservation_key"] = reservation_key - - self.client.post("/customers/reservations/create_deep_link", json=json_payload) - - return None diff --git a/seam/routes/locks.py b/seam/routes/locks.py index 95cff28..9b0de16 100644 --- a/seam/routes/locks.py +++ b/seam/routes/locks.py @@ -1,6 +1,6 @@ from typing import Optional, Any, List, Dict, Union from ..client import SeamHttpClient -from .models import AbstractLocks, Device, ActionAttempt +from .models import AbstractLocks, ActionAttempt, Device from .locks_simulate import LocksSimulate from ..modules.action_attempts import resolve_action_attempt @@ -15,6 +15,37 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): def simulate(self) -> LocksSimulate: return self._simulate + def configure_auto_lock( + self, + *, + auto_lock_enabled: bool, + device_id: str, + auto_lock_delay_seconds: Optional[float] = None, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None + ) -> ActionAttempt: + json_payload = {} + + if auto_lock_enabled is not None: + json_payload["auto_lock_enabled"] = auto_lock_enabled + if device_id is not None: + json_payload["device_id"] = device_id + if auto_lock_delay_seconds is not None: + json_payload["auto_lock_delay_seconds"] = auto_lock_delay_seconds + + res = self.client.post("/locks/configure_auto_lock", 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, + ) + def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: diff --git a/seam/routes/models.py b/seam/routes/models.py index 689aa44..ef96827 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -819,6 +819,7 @@ def from_dict(d: Dict[str, Any]): @dataclass class Device: + can_configure_auto_lock: bool can_hvac_cool: bool can_hvac_heat: bool can_hvac_heat_cool: bool @@ -859,6 +860,7 @@ class Device: @staticmethod def from_dict(d: Dict[str, Any]): return Device( + can_configure_auto_lock=d.get("can_configure_auto_lock", None), can_hvac_cool=d.get("can_hvac_cool", None), can_hvac_heat=d.get("can_hvac_heat", None), can_hvac_heat_cool=d.get("can_hvac_heat_cool", None), @@ -914,6 +916,7 @@ def from_dict(d: Dict[str, Any]): @dataclass class DeviceProvider: + can_configure_auto_lock: bool can_hvac_cool: bool can_hvac_heat: bool can_hvac_heat_cool: bool @@ -941,6 +944,7 @@ class DeviceProvider: @staticmethod def from_dict(d: Dict[str, Any]): return DeviceProvider( + can_configure_auto_lock=d.get("can_configure_auto_lock", None), can_hvac_cool=d.get("can_hvac_cool", None), can_hvac_heat=d.get("can_hvac_heat", None), can_hvac_heat_cool=d.get("can_hvac_heat_cool", None), @@ -1656,6 +1660,7 @@ def from_dict(d: Dict[str, Any]): @dataclass class UnmanagedDevice: + can_configure_auto_lock: bool can_hvac_cool: bool can_hvac_heat: bool can_hvac_heat_cool: bool @@ -1691,6 +1696,7 @@ class UnmanagedDevice: @staticmethod def from_dict(d: Dict[str, Any]): return UnmanagedDevice( + can_configure_auto_lock=d.get("can_configure_auto_lock", None), can_hvac_cool=d.get("can_hvac_cool", None), can_hvac_heat=d.get("can_hvac_heat", None), can_hvac_heat_cool=d.get("can_hvac_heat_cool", None), @@ -2492,10 +2498,77 @@ def disconnect(self, *, connected_account_id: str) -> None: raise NotImplementedError() -class AbstractCustomersReservations(abc.ABC): +class AbstractCustomers(abc.ABC): @abc.abstractmethod - def create_deep_link(self, *, customer_key: str, reservation_key: str) -> None: + def create_portal( + self, + *, + _dev: Optional[bool] = None, + customer_resources_filters: Optional[List[Dict[str, Any]]] = None, + customization_profile_id: Optional[str] = None, + deep_link: Optional[Dict[str, Any]] = None, + exclude_locale_picker: Optional[bool] = None, + features: Optional[Dict[str, Any]] = None, + is_embedded: Optional[bool] = None, + landing_page: Optional[Dict[str, Any]] = None, + locale: Optional[str] = None, + navigation_mode: Optional[str] = None, + customer_data: Optional[Dict[str, Any]] = None + ) -> MagicLink: + raise NotImplementedError() + + @abc.abstractmethod + def delete_data( + self, + *, + access_grant_keys: Optional[List[str]] = None, + booking_keys: Optional[List[str]] = None, + building_keys: Optional[List[str]] = None, + common_area_keys: Optional[List[str]] = None, + customer_keys: Optional[List[str]] = None, + facility_keys: Optional[List[str]] = None, + guest_keys: Optional[List[str]] = None, + listing_keys: Optional[List[str]] = None, + property_keys: Optional[List[str]] = None, + property_listing_keys: Optional[List[str]] = None, + reservation_keys: Optional[List[str]] = None, + resident_keys: Optional[List[str]] = None, + room_keys: Optional[List[str]] = None, + space_keys: Optional[List[str]] = None, + staff_member_keys: Optional[List[str]] = None, + tenant_keys: Optional[List[str]] = None, + unit_keys: Optional[List[str]] = None, + user_identity_keys: Optional[List[str]] = None, + user_keys: Optional[List[str]] = None + ) -> None: + raise NotImplementedError() + + @abc.abstractmethod + def push_data( + self, + *, + customer_key: str, + access_grants: Optional[List[Dict[str, Any]]] = None, + bookings: Optional[List[Dict[str, Any]]] = None, + buildings: Optional[List[Dict[str, Any]]] = None, + common_areas: Optional[List[Dict[str, Any]]] = None, + facilities: Optional[List[Dict[str, Any]]] = None, + guests: Optional[List[Dict[str, Any]]] = None, + listings: Optional[List[Dict[str, Any]]] = None, + properties: Optional[List[Dict[str, Any]]] = None, + property_listings: Optional[List[Dict[str, Any]]] = None, + 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, + staff_members: Optional[List[Dict[str, Any]]] = None, + tenants: Optional[List[Dict[str, Any]]] = None, + units: Optional[List[Dict[str, Any]]] = None, + user_identities: Optional[List[Dict[str, Any]]] = None, + users: Optional[List[Dict[str, Any]]] = None + ) -> None: raise NotImplementedError() @@ -3183,90 +3256,22 @@ def update( raise NotImplementedError() -class AbstractCustomers(abc.ABC): +class AbstractLocks(abc.ABC): @property @abc.abstractmethod - def reservations(self) -> AbstractCustomersReservations: - raise NotImplementedError() - - @abc.abstractmethod - def create_portal( - self, - *, - _dev: Optional[bool] = None, - customer_resources_filters: Optional[List[Dict[str, Any]]] = None, - customization_profile_id: Optional[str] = None, - deep_link: Optional[Dict[str, Any]] = None, - exclude_locale_picker: Optional[bool] = None, - features: Optional[Dict[str, Any]] = None, - is_embedded: Optional[bool] = None, - landing_page: Optional[Dict[str, Any]] = None, - locale: Optional[str] = None, - navigation_mode: Optional[str] = None, - customer_data: Optional[Dict[str, Any]] = None - ) -> MagicLink: - raise NotImplementedError() - - @abc.abstractmethod - def delete_data( - self, - *, - access_grant_keys: Optional[List[str]] = None, - booking_keys: Optional[List[str]] = None, - building_keys: Optional[List[str]] = None, - common_area_keys: Optional[List[str]] = None, - customer_keys: Optional[List[str]] = None, - facility_keys: Optional[List[str]] = None, - guest_keys: Optional[List[str]] = None, - listing_keys: Optional[List[str]] = None, - property_keys: Optional[List[str]] = None, - property_listing_keys: Optional[List[str]] = None, - reservation_keys: Optional[List[str]] = None, - resident_keys: Optional[List[str]] = None, - room_keys: Optional[List[str]] = None, - space_keys: Optional[List[str]] = None, - staff_member_keys: Optional[List[str]] = None, - tenant_keys: Optional[List[str]] = None, - unit_keys: Optional[List[str]] = None, - user_identity_keys: Optional[List[str]] = None, - user_keys: Optional[List[str]] = None - ) -> None: + def simulate(self) -> AbstractLocksSimulate: raise NotImplementedError() @abc.abstractmethod - def push_data( + def configure_auto_lock( self, *, - customer_key: str, - access_grants: Optional[List[Dict[str, Any]]] = None, - bookings: Optional[List[Dict[str, Any]]] = None, - buildings: Optional[List[Dict[str, Any]]] = None, - common_areas: Optional[List[Dict[str, Any]]] = None, - facilities: Optional[List[Dict[str, Any]]] = None, - guests: Optional[List[Dict[str, Any]]] = None, - listings: Optional[List[Dict[str, Any]]] = None, - properties: Optional[List[Dict[str, Any]]] = None, - property_listings: Optional[List[Dict[str, Any]]] = None, - 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, - staff_members: Optional[List[Dict[str, Any]]] = None, - tenants: Optional[List[Dict[str, Any]]] = None, - units: Optional[List[Dict[str, Any]]] = None, - user_identities: Optional[List[Dict[str, Any]]] = None, - users: Optional[List[Dict[str, Any]]] = None - ) -> None: - raise NotImplementedError() - - -class AbstractLocks(abc.ABC): - - @property - @abc.abstractmethod - def simulate(self) -> AbstractLocksSimulate: + auto_lock_enabled: bool, + device_id: str, + auto_lock_delay_seconds: Optional[float] = None, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None + ) -> ActionAttempt: raise NotImplementedError() @abc.abstractmethod @@ -3526,18 +3531,6 @@ def get( ) -> AccessCode: raise NotImplementedError() - @abc.abstractmethod - def get_timeline( - self, - *, - access_code_id: str, - after: Optional[str] = None, - before: Optional[str] = None, - event_types: Optional[List[str]] = None, - limit: Optional[float] = None - ) -> None: - raise NotImplementedError() - @abc.abstractmethod def list( self,