diff --git a/package-lock.json b/package-lock.json index 5f6ed7f1..1d937c4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,8 @@ "name": "@seamapi/python", "devDependencies": { "@seamapi/fake-seam-connect": "1.75.1", - "@seamapi/nextlove-sdk-generator": "1.15.8", - "@seamapi/types": "1.351.1", + "@seamapi/nextlove-sdk-generator": "1.16.1", + "@seamapi/types": "1.353.1", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -453,9 +453,9 @@ } }, "node_modules/@seamapi/nextlove-sdk-generator": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.15.8.tgz", - "integrity": "sha512-Q2v5p5BmK45/Qm6LpwUe3c2s6zzgUum9VOxnQU0K9CO3n23KaJf1X2M/sU6mRedAGh+JJsgmXLePtj21hhPZZg==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.16.1.tgz", + "integrity": "sha512-u/0ALbUe9h84Q3GDaje2z5/nR8ufEfhbmhImcO06MKDi2aULvIuupBI8GtctVYaNWtCbyVpNM/YPM7CQLoHwYA==", "dev": true, "license": "MIT", "dependencies": { @@ -475,9 +475,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.351.1", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.351.1.tgz", - "integrity": "sha512-zqgGhSUs1EpNAxSAuDPq0jQNifMJua+lX5jviFtC7RSxjqGIP47oBtW76OxFHOnJK9FyIk4vYE583ioBzIPzOg==", + "version": "1.353.1", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.353.1.tgz", + "integrity": "sha512-TlLtRSnkfzQnUJaZ4apH5FeSblfBkE2ZecJ55QCrtg7V/7Buy3A2au6RqK/kHhXLS7aBT5T1kd/dhCubnmYonw==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 6cd7a7a8..b16398ec 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ }, "devDependencies": { "@seamapi/fake-seam-connect": "1.75.1", - "@seamapi/nextlove-sdk-generator": "1.15.8", - "@seamapi/types": "1.351.1", + "@seamapi/nextlove-sdk-generator": "1.16.1", + "@seamapi/types": "1.353.1", "del": "^7.1.0", "prettier": "^3.2.5" } diff --git a/seam/routes/acs.py b/seam/routes/acs.py index 1f2f90f7..54343a14 100644 --- a/seam/routes/acs.py +++ b/seam/routes/acs.py @@ -2,10 +2,6 @@ from ..client import SeamHttpClient from .models import AbstractAcs from .acs_access_groups import AcsAccessGroups -from .acs_credential_pools import AcsCredentialPools -from .acs_credential_provisioning_automations import ( - AcsCredentialProvisioningAutomations, -) from .acs_credentials import AcsCredentials from .acs_encoders import AcsEncoders from .acs_entrances import AcsEntrances @@ -18,10 +14,6 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.client = client self.defaults = defaults self._access_groups = AcsAccessGroups(client=client, defaults=defaults) - self._credential_pools = AcsCredentialPools(client=client, defaults=defaults) - self._credential_provisioning_automations = ( - 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) @@ -32,16 +24,6 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): def access_groups(self) -> AcsAccessGroups: return self._access_groups - @property - def credential_pools(self) -> AcsCredentialPools: - return self._credential_pools - - @property - def credential_provisioning_automations( - self, - ) -> AcsCredentialProvisioningAutomations: - return self._credential_provisioning_automations - @property def credentials(self) -> AcsCredentials: return self._credentials diff --git a/seam/routes/acs_access_groups_unmanaged.py b/seam/routes/acs_access_groups_unmanaged.py deleted file mode 100644 index 010869ec..00000000 --- a/seam/routes/acs_access_groups_unmanaged.py +++ /dev/null @@ -1,35 +0,0 @@ -from typing import Optional, Any, List, Dict, Union -from ..client import SeamHttpClient -from .models import AbstractAcsAccessGroupsUnmanaged, UnmanagedAcsAccessGroup - - -class AcsAccessGroupsUnmanaged(AbstractAcsAccessGroupsUnmanaged): - def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): - self.client = client - self.defaults = defaults - - def get(self, *, acs_access_group_id: str) -> UnmanagedAcsAccessGroup: - json_payload = {} - - if acs_access_group_id is not None: - json_payload["acs_access_group_id"] = acs_access_group_id - - res = self.client.post("/acs/access_groups/unmanaged/get", json=json_payload) - - return UnmanagedAcsAccessGroup.from_dict(res["acs_access_group"]) - - def list( - self, *, acs_system_id: Optional[str] = None, acs_user_id: Optional[str] = None - ) -> List[UnmanagedAcsAccessGroup]: - json_payload = {} - - if acs_system_id is not None: - json_payload["acs_system_id"] = acs_system_id - if acs_user_id is not None: - json_payload["acs_user_id"] = acs_user_id - - res = self.client.post("/acs/access_groups/unmanaged/list", json=json_payload) - - return [ - UnmanagedAcsAccessGroup.from_dict(item) for item in res["acs_access_groups"] - ] diff --git a/seam/routes/acs_credential_pools.py b/seam/routes/acs_credential_pools.py deleted file mode 100644 index 62471627..00000000 --- a/seam/routes/acs_credential_pools.py +++ /dev/null @@ -1,21 +0,0 @@ -from typing import Optional, Any, List, Dict, Union -from ..client import SeamHttpClient -from .models import AbstractAcsCredentialPools, AcsCredentialPool - - -class AcsCredentialPools(AbstractAcsCredentialPools): - def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): - self.client = client - self.defaults = defaults - - def list(self, *, acs_system_id: str) -> List[AcsCredentialPool]: - json_payload = {} - - if acs_system_id is not None: - json_payload["acs_system_id"] = acs_system_id - - res = self.client.post("/acs/credential_pools/list", json=json_payload) - - return [ - AcsCredentialPool.from_dict(item) for item in res["acs_credential_pools"] - ] diff --git a/seam/routes/acs_credential_provisioning_automations.py b/seam/routes/acs_credential_provisioning_automations.py deleted file mode 100644 index c30a567e..00000000 --- a/seam/routes/acs_credential_provisioning_automations.py +++ /dev/null @@ -1,50 +0,0 @@ -from typing import Optional, Any, List, Dict, Union -from ..client import SeamHttpClient -from .models import ( - AbstractAcsCredentialProvisioningAutomations, - AcsCredentialProvisioningAutomation, -) - - -class AcsCredentialProvisioningAutomations( - AbstractAcsCredentialProvisioningAutomations -): - def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): - self.client = client - self.defaults = defaults - - def launch( - self, - *, - credential_manager_acs_system_id: str, - user_identity_id: str, - acs_credential_pool_id: Optional[str] = None, - create_credential_manager_user: Optional[bool] = None, - credential_manager_acs_user_id: Optional[str] = None - ) -> AcsCredentialProvisioningAutomation: - json_payload = {} - - if credential_manager_acs_system_id is not None: - json_payload["credential_manager_acs_system_id"] = ( - credential_manager_acs_system_id - ) - if user_identity_id is not None: - json_payload["user_identity_id"] = user_identity_id - if acs_credential_pool_id is not None: - json_payload["acs_credential_pool_id"] = acs_credential_pool_id - if create_credential_manager_user is not None: - json_payload["create_credential_manager_user"] = ( - create_credential_manager_user - ) - if credential_manager_acs_user_id is not None: - json_payload["credential_manager_acs_user_id"] = ( - credential_manager_acs_user_id - ) - - res = self.client.post( - "/acs/credential_provisioning_automations/launch", json=json_payload - ) - - return AcsCredentialProvisioningAutomation.from_dict( - res["acs_credential_provisioning_automation"] - ) diff --git a/seam/routes/acs_credentials.py b/seam/routes/acs_credentials.py index fd2ed74d..61686732 100644 --- a/seam/routes/acs_credentials.py +++ b/seam/routes/acs_credentials.py @@ -68,34 +68,6 @@ def create( return AcsCredential.from_dict(res["acs_credential"]) - def create_offline_code( - self, - *, - acs_user_id: str, - allowed_acs_entrance_id: str, - ends_at: Optional[str] = None, - is_one_time_use: Optional[bool] = None, - starts_at: Optional[str] = None - ) -> AcsCredential: - json_payload = {} - - if acs_user_id is not None: - json_payload["acs_user_id"] = acs_user_id - if allowed_acs_entrance_id is not None: - json_payload["allowed_acs_entrance_id"] = allowed_acs_entrance_id - if ends_at is not None: - json_payload["ends_at"] = ends_at - if is_one_time_use is not None: - json_payload["is_one_time_use"] = is_one_time_use - if starts_at is not None: - json_payload["starts_at"] = starts_at - - res = self.client.post( - "/acs/credentials/create_offline_code", json=json_payload - ) - - return AcsCredential.from_dict(res["acs_credential"]) - def delete(self, *, acs_credential_id: str) -> None: json_payload = {} diff --git a/seam/routes/acs_credentials_unmanaged.py b/seam/routes/acs_credentials_unmanaged.py deleted file mode 100644 index c7d9d79e..00000000 --- a/seam/routes/acs_credentials_unmanaged.py +++ /dev/null @@ -1,41 +0,0 @@ -from typing import Optional, Any, List, Dict, Union -from ..client import SeamHttpClient -from .models import AbstractAcsCredentialsUnmanaged, UnmanagedAcsCredential - - -class AcsCredentialsUnmanaged(AbstractAcsCredentialsUnmanaged): - def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): - self.client = client - self.defaults = defaults - - def get(self, *, acs_credential_id: str) -> UnmanagedAcsCredential: - json_payload = {} - - if acs_credential_id is not None: - json_payload["acs_credential_id"] = acs_credential_id - - res = self.client.post("/acs/credentials/unmanaged/get", json=json_payload) - - return UnmanagedAcsCredential.from_dict(res["acs_credential"]) - - def list( - self, - *, - acs_user_id: Optional[str] = None, - acs_system_id: Optional[str] = None, - user_identity_id: Optional[str] = None - ) -> List[UnmanagedAcsCredential]: - json_payload = {} - - if acs_user_id is not None: - json_payload["acs_user_id"] = acs_user_id - if acs_system_id is not None: - json_payload["acs_system_id"] = acs_system_id - if user_identity_id is not None: - json_payload["user_identity_id"] = user_identity_id - - res = self.client.post("/acs/credentials/unmanaged/list", json=json_payload) - - return [ - UnmanagedAcsCredential.from_dict(item) for item in res["acs_credentials"] - ] diff --git a/seam/routes/acs_users.py b/seam/routes/acs_users.py index 421de44d..a9953826 100644 --- a/seam/routes/acs_users.py +++ b/seam/routes/acs_users.py @@ -82,7 +82,8 @@ def list( *, acs_system_id: Optional[str] = None, created_before: Optional[str] = None, - limit: Optional[float] = None, + limit: Optional[int] = None, + page_cursor: Optional[str] = None, user_identity_email_address: Optional[str] = None, user_identity_id: Optional[str] = None, user_identity_phone_number: Optional[str] = None @@ -95,6 +96,8 @@ def list( json_payload["created_before"] = created_before if limit is not None: json_payload["limit"] = limit + if page_cursor is not None: + json_payload["page_cursor"] = page_cursor if user_identity_email_address is not None: json_payload["user_identity_email_address"] = user_identity_email_address if user_identity_id is not None: diff --git a/seam/routes/acs_users_unmanaged.py b/seam/routes/acs_users_unmanaged.py deleted file mode 100644 index 6c985251..00000000 --- a/seam/routes/acs_users_unmanaged.py +++ /dev/null @@ -1,45 +0,0 @@ -from typing import Optional, Any, List, Dict, Union -from ..client import SeamHttpClient -from .models import AbstractAcsUsersUnmanaged, UnmanagedAcsUser - - -class AcsUsersUnmanaged(AbstractAcsUsersUnmanaged): - def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): - self.client = client - self.defaults = defaults - - def get(self, *, acs_user_id: str) -> UnmanagedAcsUser: - json_payload = {} - - if acs_user_id is not None: - json_payload["acs_user_id"] = acs_user_id - - res = self.client.post("/acs/users/unmanaged/get", json=json_payload) - - return UnmanagedAcsUser.from_dict(res["acs_user"]) - - def list( - self, - *, - acs_system_id: Optional[str] = None, - limit: Optional[float] = None, - user_identity_email_address: Optional[str] = None, - user_identity_id: Optional[str] = None, - user_identity_phone_number: Optional[str] = None - ) -> List[UnmanagedAcsUser]: - json_payload = {} - - if acs_system_id is not None: - json_payload["acs_system_id"] = acs_system_id - if limit is not None: - json_payload["limit"] = limit - if user_identity_email_address is not None: - json_payload["user_identity_email_address"] = user_identity_email_address - if user_identity_id is not None: - json_payload["user_identity_id"] = user_identity_id - if user_identity_phone_number is not None: - json_payload["user_identity_phone_number"] = user_identity_phone_number - - res = self.client.post("/acs/users/unmanaged/list", json=json_payload) - - return [UnmanagedAcsUser.from_dict(item) for item in res["acs_users"]] diff --git a/seam/routes/devices.py b/seam/routes/devices.py index f079cde4..92f48c79 100644 --- a/seam/routes/devices.py +++ b/seam/routes/devices.py @@ -20,16 +20,6 @@ def simulate(self) -> DevicesSimulate: def unmanaged(self) -> DevicesUnmanaged: return self._unmanaged - def delete(self, *, device_id: str) -> None: - json_payload = {} - - if device_id is not None: - json_payload["device_id"] = device_id - - self.client.post("/devices/delete", json=json_payload) - - return None - def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: diff --git a/seam/routes/events.py b/seam/routes/events.py index 22659019..f769a542 100644 --- a/seam/routes/events.py +++ b/seam/routes/events.py @@ -40,6 +40,7 @@ def list( connected_account_id: Optional[str] = None, device_id: Optional[str] = None, device_ids: Optional[List[str]] = None, + event_ids: Optional[List[str]] = None, event_type: Optional[str] = None, event_types: Optional[List[str]] = None, limit: Optional[float] = None, @@ -66,6 +67,8 @@ def list( json_payload["device_id"] = device_id if device_ids is not None: json_payload["device_ids"] = device_ids + if event_ids is not None: + json_payload["event_ids"] = event_ids if event_type is not None: json_payload["event_type"] = event_type if event_types is not None: diff --git a/seam/routes/models.py b/seam/routes/models.py index 6404895b..99732195 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -1245,41 +1245,6 @@ def remove_user(self, *, acs_access_group_id: str, acs_user_id: str) -> None: raise NotImplementedError() -class AbstractAcsAccessGroupsUnmanaged(abc.ABC): - - @abc.abstractmethod - def get(self, *, acs_access_group_id: str) -> UnmanagedAcsAccessGroup: - raise NotImplementedError() - - @abc.abstractmethod - def list( - self, *, acs_system_id: Optional[str] = None, acs_user_id: Optional[str] = None - ) -> List[UnmanagedAcsAccessGroup]: - raise NotImplementedError() - - -class AbstractAcsCredentialPools(abc.ABC): - - @abc.abstractmethod - def list(self, *, acs_system_id: str) -> List[AcsCredentialPool]: - raise NotImplementedError() - - -class AbstractAcsCredentialProvisioningAutomations(abc.ABC): - - @abc.abstractmethod - def launch( - self, - *, - credential_manager_acs_system_id: str, - user_identity_id: str, - acs_credential_pool_id: Optional[str] = None, - create_credential_manager_user: Optional[bool] = None, - credential_manager_acs_user_id: Optional[str] = None - ) -> AcsCredentialProvisioningAutomation: - raise NotImplementedError() - - class AbstractAcsCredentials(abc.ABC): @abc.abstractmethod @@ -1304,18 +1269,6 @@ def create( ) -> AcsCredential: raise NotImplementedError() - @abc.abstractmethod - def create_offline_code( - self, - *, - acs_user_id: str, - allowed_acs_entrance_id: str, - ends_at: Optional[str] = None, - is_one_time_use: Optional[bool] = None, - starts_at: Optional[str] = None - ) -> AcsCredential: - raise NotImplementedError() - @abc.abstractmethod def delete(self, *, acs_credential_id: str) -> None: raise NotImplementedError() @@ -1356,23 +1309,6 @@ def update( raise NotImplementedError() -class AbstractAcsCredentialsUnmanaged(abc.ABC): - - @abc.abstractmethod - def get(self, *, acs_credential_id: str) -> UnmanagedAcsCredential: - raise NotImplementedError() - - @abc.abstractmethod - def list( - self, - *, - acs_user_id: Optional[str] = None, - acs_system_id: Optional[str] = None, - user_identity_id: Optional[str] = None - ) -> List[UnmanagedAcsCredential]: - raise NotImplementedError() - - class AbstractAcsEncoders(abc.ABC): @abc.abstractmethod @@ -1525,7 +1461,8 @@ def list( *, acs_system_id: Optional[str] = None, created_before: Optional[str] = None, - limit: Optional[float] = None, + limit: Optional[int] = None, + page_cursor: Optional[str] = None, user_identity_email_address: Optional[str] = None, user_identity_id: Optional[str] = None, user_identity_phone_number: Optional[str] = None @@ -1569,25 +1506,6 @@ def update( raise NotImplementedError() -class AbstractAcsUsersUnmanaged(abc.ABC): - - @abc.abstractmethod - def get(self, *, acs_user_id: str) -> UnmanagedAcsUser: - raise NotImplementedError() - - @abc.abstractmethod - def list( - self, - *, - acs_system_id: Optional[str] = None, - limit: Optional[float] = None, - user_identity_email_address: Optional[str] = None, - user_identity_id: Optional[str] = None, - user_identity_phone_number: Optional[str] = None - ) -> List[UnmanagedAcsUser]: - raise NotImplementedError() - - class AbstractActionAttempts(abc.ABC): @abc.abstractmethod @@ -1826,6 +1744,7 @@ def list( connected_account_id: Optional[str] = None, device_id: Optional[str] = None, device_ids: Optional[List[str]] = None, + event_ids: Optional[List[str]] = None, event_type: Optional[str] = None, event_types: Optional[List[str]] = None, limit: Optional[float] = None, @@ -2374,10 +2293,6 @@ def simulate(self) -> AbstractDevicesSimulate: def unmanaged(self) -> AbstractDevicesUnmanaged: raise NotImplementedError() - @abc.abstractmethod - def delete(self, *, device_id: str) -> None: - raise NotImplementedError() - @abc.abstractmethod def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None @@ -2511,12 +2426,6 @@ def create_climate_preset( def delete_climate_preset(self, *, climate_preset_key: str, device_id: str) -> None: raise NotImplementedError() - @abc.abstractmethod - def get( - self, *, device_id: Optional[str] = None, name: Optional[str] = None - ) -> Device: - raise NotImplementedError() - @abc.abstractmethod def heat( self, @@ -2642,18 +2551,6 @@ class AbstractAcs(abc.ABC): def access_groups(self) -> AbstractAcsAccessGroups: raise NotImplementedError() - @property - @abc.abstractmethod - def credential_pools(self) -> AbstractAcsCredentialPools: - raise NotImplementedError() - - @property - @abc.abstractmethod - def credential_provisioning_automations( - self, - ) -> AbstractAcsCredentialProvisioningAutomations: - raise NotImplementedError() - @property @abc.abstractmethod def credentials(self) -> AbstractAcsCredentials: diff --git a/seam/routes/thermostats.py b/seam/routes/thermostats.py index 28ef7437..396392f6 100644 --- a/seam/routes/thermostats.py +++ b/seam/routes/thermostats.py @@ -138,20 +138,6 @@ def delete_climate_preset(self, *, climate_preset_key: str, device_id: str) -> N return None - def get( - self, *, device_id: Optional[str] = None, name: Optional[str] = None - ) -> Device: - json_payload = {} - - if device_id is not None: - json_payload["device_id"] = device_id - if name is not None: - json_payload["name"] = name - - res = self.client.post("/thermostats/get", json=json_payload) - - return Device.from_dict(res["thermostat"]) - def heat( self, *,