diff --git a/package-lock.json b/package-lock.json index 03e8308..65e0492 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,8 @@ "name": "@seamapi/python", "devDependencies": { "@seamapi/fake-seam-connect": "1.83.0", - "@seamapi/nextlove-sdk-generator": "1.18.0", - "@seamapi/types": "1.384.0", + "@seamapi/nextlove-sdk-generator": "1.18.1", + "@seamapi/types": "1.385.0", "del": "^7.1.0", "prettier": "^3.2.5" } @@ -453,9 +453,9 @@ } }, "node_modules/@seamapi/nextlove-sdk-generator": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.18.0.tgz", - "integrity": "sha512-lINrwlr3pJUWawFvEXezY89VxS4mafgkqeBGTiLRZSXTDLzqEl8QD6UKN0CHKirwHCjPFj8MUsGDyz7pCzbCmQ==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@seamapi/nextlove-sdk-generator/-/nextlove-sdk-generator-1.18.1.tgz", + "integrity": "sha512-TsK2AY2B/44JNEbWf30/UWfP7Y0T1bxZ3X6AH/buhUKHAzNfiipw133iAN2p6e2fu6sa9zbrjM1cmvwU+lDhiw==", "dev": true, "license": "MIT", "dependencies": { @@ -475,9 +475,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.384.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.384.0.tgz", - "integrity": "sha512-pFQF4O7LaLu9J2yfNxtiuN/kCYX5WH0Sdccx6BC1rYQqwQSD1m5/yXTq14iCBa6z2R8Fw09WRU5Zp+NjHtleQQ==", + "version": "1.385.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.385.0.tgz", + "integrity": "sha512-XafuAs5nzVAMtN1UHTUgUK6BeyiuNR3ZAel3yWPtfEI42hyI+U/KpNHg+Poh2mzRxNq1vdwEf0WWLdEcaJ8Zgg==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 9abcf0d..51148fa 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ }, "devDependencies": { "@seamapi/fake-seam-connect": "1.83.0", - "@seamapi/nextlove-sdk-generator": "1.18.0", - "@seamapi/types": "1.384.0", + "@seamapi/nextlove-sdk-generator": "1.18.1", + "@seamapi/types": "1.385.0", "del": "^7.1.0", "prettier": "^3.2.5" } diff --git a/seam/routes/__init__.py b/seam/routes/__init__.py index 9eb6fac..378bb2c 100644 --- a/seam/routes/__init__.py +++ b/seam/routes/__init__.py @@ -14,6 +14,7 @@ from .networks import Networks from .noise_sensors import NoiseSensors from .phones import Phones +from .seam import Seam from .thermostats import Thermostats from .user_identities import UserIdentities from .webhooks import Webhooks @@ -35,6 +36,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.networks = Networks(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.thermostats = Thermostats(client=client, defaults=defaults) self.user_identities = UserIdentities(client=client, defaults=defaults) self.webhooks = Webhooks(client=client, defaults=defaults) diff --git a/seam/routes/models.py b/seam/routes/models.py index e760ff1..b663c9a 100644 --- a/seam/routes/models.py +++ b/seam/routes/models.py @@ -1946,6 +1946,13 @@ def create_sandbox_phone( raise NotImplementedError() +class AbstractSeamInstantKeyV1ClientSessions(abc.ABC): + + @abc.abstractmethod + def exchange_short_code(self, *, short_code: str) -> ClientSession: + raise NotImplementedError() + + class AbstractThermostatsSchedules(abc.ABC): @abc.abstractmethod @@ -2130,6 +2137,14 @@ def list( raise NotImplementedError() +class AbstractSeam(abc.ABC): + + @property + @abc.abstractmethod + def instant_key(self) -> AbstractSeamInstantKey: + raise NotImplementedError() + + class AbstractUserIdentities(abc.ABC): @property @@ -2661,6 +2676,7 @@ class AbstractRoutes(abc.ABC): networks: AbstractNetworks noise_sensors: AbstractNoiseSensors phones: AbstractPhones + seam: AbstractSeam thermostats: AbstractThermostats user_identities: AbstractUserIdentities webhooks: AbstractWebhooks diff --git a/seam/routes/seam.py b/seam/routes/seam.py new file mode 100644 index 0000000..ae3533b --- /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_instant_key import SeamInstantKey + + +class Seam(AbstractSeam): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + self._instant_key = SeamInstantKey(client=client, defaults=defaults) + + @property + def instant_key(self) -> SeamInstantKey: + return self._instant_key diff --git a/seam/routes/seam_instant_key_v1_client_sessions.py b/seam/routes/seam_instant_key_v1_client_sessions.py new file mode 100644 index 0000000..a284cf6 --- /dev/null +++ b/seam/routes/seam_instant_key_v1_client_sessions.py @@ -0,0 +1,22 @@ +from typing import Optional, Any, List, Dict, Union +from ..client import SeamHttpClient +from .models import AbstractSeamInstantKeyV1ClientSessions, ClientSession + + +class SeamInstantKeyV1ClientSessions(AbstractSeamInstantKeyV1ClientSessions): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + def exchange_short_code(self, *, short_code: str) -> ClientSession: + json_payload = {} + + if short_code is not None: + json_payload["short_code"] = short_code + + res = self.client.post( + "/seam/instant_key/v1/client_sessions/exchange_short_code", + json=json_payload, + ) + + return ClientSession.from_dict(res["client_session"])