From 01128612ba524bb3a135037bfadc152c9a960771 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 09:55: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.413.0 to 1.414.2 - [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.413.0...v1.414.2) --- updated-dependencies: - dependency-name: "@seamapi/types" dependency-version: 1.414.2 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 40c96ae..bc78824 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.83.1", "@seamapi/nextlove-sdk-generator": "^1.18.1", - "@seamapi/types": "1.413.0", + "@seamapi/types": "1.414.2", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -475,9 +475,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.413.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.413.0.tgz", - "integrity": "sha512-oNesrHvS1zuxd89YNGhqWG76W2KWl0S9jDfDiVtvWxbyB91PUK3rVpntoK3P0l0HBFMV8E9Vghhmmvo/FLV70Q==", + "version": "1.414.2", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.414.2.tgz", + "integrity": "sha512-QWTHKz+I3JePDpia2mDeWMI9ATEVjWD8lXZwSp1rqDbOrS4CWWrYDEU4TxWP4wdmI2XpffyDE/Xnaqn/gFvdeQ==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index c05eb1c..97317b8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@seamapi/fake-seam-connect": "1.83.1", "@seamapi/nextlove-sdk-generator": "^1.18.1", - "@seamapi/types": "1.413.0", + "@seamapi/types": "1.414.2", "del": "^7.1.0", "prettier": "^3.2.5" } From 7530f45635be27f4d9cf924df027f0c17de26c8e Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Mon, 16 Jun 2025 09:56:37 +0000 Subject: [PATCH 2/2] ci: Generate code --- seam/routes/acs_entrances.py | 6 + seam/routes/models.py | 151 +++++++++++++++++- seam/routes/thermostats_daily_programs.py | 12 +- .../user_identities_enrollment_automations.py | 6 +- 4 files changed, 166 insertions(+), 9 deletions(-) diff --git a/seam/routes/acs_entrances.py b/seam/routes/acs_entrances.py index bfe899b..bc8314a 100644 --- a/seam/routes/acs_entrances.py +++ b/seam/routes/acs_entrances.py @@ -41,6 +41,8 @@ def grant_access( def list( self, *, + access_grant_id: Optional[str] = None, + access_method_id: Optional[str] = None, acs_credential_id: Optional[str] = None, acs_system_id: Optional[str] = None, location_id: Optional[str] = None, @@ -48,6 +50,10 @@ def list( ) -> List[AcsEntrance]: json_payload = {} + if access_grant_id is not None: + json_payload["access_grant_id"] = access_grant_id + if access_method_id is not None: + json_payload["access_method_id"] = access_method_id if acs_credential_id is not None: json_payload["acs_credential_id"] = acs_credential_id if acs_system_id is not None: diff --git a/seam/routes/models.py b/seam/routes/models.py index d24145f..df97c1a 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -451,6 +451,70 @@ def from_dict(d: Dict[str, Any]): ) +@dataclass +class BridgeClientSession: + bridge_client_machine_identifier_key: str + bridge_client_name: str + bridge_client_session_id: str + bridge_client_session_token: str + bridge_client_time_zone: str + created_at: str + errors: List[Dict[str, Any]] + pairing_code: str + pairing_code_expires_at: str + tailscale_auth_key: str + tailscale_hostname: str + telemetry_token: str + telemetry_token_expires_at: str + telemetry_url: str + + @staticmethod + def from_dict(d: Dict[str, Any]): + return BridgeClientSession( + bridge_client_machine_identifier_key=d.get( + "bridge_client_machine_identifier_key", None + ), + bridge_client_name=d.get("bridge_client_name", None), + bridge_client_session_id=d.get("bridge_client_session_id", None), + bridge_client_session_token=d.get("bridge_client_session_token", None), + bridge_client_time_zone=d.get("bridge_client_time_zone", None), + created_at=d.get("created_at", None), + errors=d.get("errors", None), + pairing_code=d.get("pairing_code", None), + pairing_code_expires_at=d.get("pairing_code_expires_at", None), + tailscale_auth_key=d.get("tailscale_auth_key", None), + tailscale_hostname=d.get("tailscale_hostname", None), + telemetry_token=d.get("telemetry_token", None), + telemetry_token_expires_at=d.get("telemetry_token_expires_at", None), + telemetry_url=d.get("telemetry_url", None), + ) + + +@dataclass +class BridgeConnectedSystems: + acs_system_display_name: str + acs_system_id: str + bridge_created_at: str + bridge_id: str + connected_account_created_at: str + connected_account_id: str + workspace_display_name: str + workspace_id: str + + @staticmethod + def from_dict(d: Dict[str, Any]): + return BridgeConnectedSystems( + acs_system_display_name=d.get("acs_system_display_name", None), + acs_system_id=d.get("acs_system_id", None), + bridge_created_at=d.get("bridge_created_at", None), + bridge_id=d.get("bridge_id", None), + connected_account_created_at=d.get("connected_account_created_at", None), + connected_account_id=d.get("connected_account_id", None), + workspace_display_name=d.get("workspace_display_name", None), + workspace_id=d.get("workspace_id", None), + ) + + @dataclass class ClientSession: client_session_id: str @@ -829,6 +893,29 @@ def from_dict(d: Dict[str, Any]): ) +@dataclass +class Location: + created_at: str + display_name: str + geolocation: Dict[str, Any] + location_id: str + name: str + time_zone: str + workspace_id: str + + @staticmethod + def from_dict(d: Dict[str, Any]): + return Location( + created_at=d.get("created_at", None), + display_name=d.get("display_name", None), + geolocation=DeepAttrDict(d.get("geolocation", None)), + location_id=d.get("location_id", None), + name=d.get("name", None), + time_zone=d.get("time_zone", None), + workspace_id=d.get("workspace_id", None), + ) + + @dataclass class MagicLink: building_block_type: str @@ -888,6 +975,39 @@ def from_dict(d: Dict[str, Any]): ) +@dataclass +class PartnerResource: + custom_metadata: Dict[str, Any] + customer_key: str + description: str + email_address: str + ends_at: str + location_keys: List[str] + name: str + partner_resource_key: str + partner_resource_type: str + phone_number: str + starts_at: str + user_identity_key: str + + @staticmethod + def from_dict(d: Dict[str, Any]): + return PartnerResource( + custom_metadata=DeepAttrDict(d.get("custom_metadata", None)), + customer_key=d.get("customer_key", None), + description=d.get("description", None), + email_address=d.get("email_address", None), + ends_at=d.get("ends_at", None), + location_keys=d.get("location_keys", None), + name=d.get("name", None), + partner_resource_key=d.get("partner_resource_key", None), + partner_resource_type=d.get("partner_resource_type", None), + phone_number=d.get("phone_number", None), + starts_at=d.get("starts_at", None), + user_identity_key=d.get("user_identity_key", None), + ) + + @dataclass class Phone: created_at: str @@ -964,6 +1084,27 @@ def from_dict(d: Dict[str, Any]): ) +@dataclass +class ThermostatDailyProgram: + created_at: str + device_id: str + name: str + periods: List[Dict[str, Any]] + thermostat_daily_program_id: str + workspace_id: str + + @staticmethod + def from_dict(d: Dict[str, Any]): + return ThermostatDailyProgram( + created_at=d.get("created_at", None), + device_id=d.get("device_id", None), + name=d.get("name", None), + periods=d.get("periods", None), + thermostat_daily_program_id=d.get("thermostat_daily_program_id", None), + workspace_id=d.get("workspace_id", None), + ) + + @dataclass class ThermostatSchedule: climate_preset_key: str @@ -1253,10 +1394,12 @@ class UserIdentity: created_at: str display_name: str email_address: str + errors: List[Dict[str, Any]] full_name: str phone_number: str user_identity_id: str user_identity_key: str + warnings: List[Dict[str, Any]] workspace_id: str @staticmethod @@ -1265,10 +1408,12 @@ def from_dict(d: Dict[str, Any]): created_at=d.get("created_at", None), display_name=d.get("display_name", None), email_address=d.get("email_address", None), + errors=d.get("errors", None), full_name=d.get("full_name", None), phone_number=d.get("phone_number", None), user_identity_id=d.get("user_identity_id", None), user_identity_key=d.get("user_identity_key", None), + warnings=d.get("warnings", None), workspace_id=d.get("workspace_id", None), ) @@ -1657,6 +1802,8 @@ def grant_access( def list( self, *, + access_grant_id: Optional[str] = None, + access_method_id: Optional[str] = None, acs_credential_id: Optional[str] = None, acs_system_id: Optional[str] = None, location_id: Optional[str] = None, @@ -2244,7 +2391,7 @@ class AbstractThermostatsDailyPrograms(abc.ABC): @abc.abstractmethod def create( self, *, device_id: str, name: str, periods: List[Dict[str, Any]] - ) -> None: + ) -> ThermostatDailyProgram: raise NotImplementedError() @abc.abstractmethod @@ -2353,7 +2500,7 @@ def launch( acs_credential_pool_id: Optional[str] = None, create_credential_manager_user: Optional[bool] = None, credential_manager_acs_user_id: Optional[str] = None - ) -> None: + ) -> EnrollmentAutomation: raise NotImplementedError() @abc.abstractmethod diff --git a/seam/routes/thermostats_daily_programs.py b/seam/routes/thermostats_daily_programs.py index efb660b..a098516 100644 --- a/seam/routes/thermostats_daily_programs.py +++ b/seam/routes/thermostats_daily_programs.py @@ -1,6 +1,10 @@ from typing import Optional, Any, List, Dict, Union from ..client import SeamHttpClient -from .models import AbstractThermostatsDailyPrograms, ActionAttempt +from .models import ( + AbstractThermostatsDailyPrograms, + ThermostatDailyProgram, + ActionAttempt, +) from ..modules.action_attempts import resolve_action_attempt @@ -12,7 +16,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): def create( self, *, device_id: str, name: str, periods: List[Dict[str, Any]] - ) -> None: + ) -> ThermostatDailyProgram: json_payload = {} if device_id is not None: @@ -22,9 +26,9 @@ def create( if periods is not None: json_payload["periods"] = periods - self.client.post("/thermostats/daily_programs/create", json=json_payload) + res = self.client.post("/thermostats/daily_programs/create", json=json_payload) - return None + return ThermostatDailyProgram.from_dict(res["thermostat_daily_program"]) def delete(self, *, thermostat_daily_program_id: str) -> None: json_payload = {} diff --git a/seam/routes/user_identities_enrollment_automations.py b/seam/routes/user_identities_enrollment_automations.py index 4edbf2a..3433499 100644 --- a/seam/routes/user_identities_enrollment_automations.py +++ b/seam/routes/user_identities_enrollment_automations.py @@ -40,7 +40,7 @@ def launch( acs_credential_pool_id: Optional[str] = None, create_credential_manager_user: Optional[bool] = None, credential_manager_acs_user_id: Optional[str] = None - ) -> None: + ) -> EnrollmentAutomation: json_payload = {} if credential_manager_acs_system_id is not None: @@ -60,11 +60,11 @@ def launch( credential_manager_acs_user_id ) - self.client.post( + res = self.client.post( "/user_identities/enrollment_automations/launch", json=json_payload ) - return None + return EnrollmentAutomation.from_dict(res["enrollment_automation"]) def list(self, *, user_identity_id: str) -> List[EnrollmentAutomation]: json_payload = {}