diff --git a/codegen/lib/layouts/route.ts b/codegen/lib/layouts/route.ts index 04550504..1a326445 100644 --- a/codegen/lib/layouts/route.ts +++ b/codegen/lib/layouts/route.ts @@ -139,7 +139,26 @@ export const setRouteLayoutContext = (cls: ClassModel): RouteLayoutContext => { const abstractClassName = `Abstract${cls.name}` const asyncClassName = `Async${cls.name}` const asyncAbstractClassName = `AbstractAsync${cls.name}` - const methods = cls.methods.map(getMethodLayoutContext) + + // A resource named like its route class (e.g. the media resource returned by + // the media route) would be shadowed by the route class, so import it under + // an alias. + const resourceAlias = `${cls.name}Resource` + const isResourceShadowed = resourceClasses.includes(cls.name) + const importedResourceClasses = resourceClasses.map((className) => + className === cls.name ? `${className} as ${resourceAlias}` : className, + ) + const methods = cls.methods.map(getMethodLayoutContext).map((method) => + isResourceShadowed + ? { + ...method, + returnType: method.returnType.replace( + new RegExp(`^(List\\[)?${cls.name}(\\])?$`), + `$1${resourceAlias}$2`, + ), + } + : method, + ) const importNull = methods.some(({ params }) => params.some(({ isNullable }) => isNullable), @@ -188,7 +207,7 @@ export const setRouteLayoutContext = (cls: ClassModel): RouteLayoutContext => { })), methods, }, - resourceClasses, + resourceClasses: importedResourceClasses, childClasses: cls.childClassIdentifiers.map((identifier) => ({ namespace: identifier.namespace, className: identifier.className, diff --git a/package-lock.json b/package-lock.json index 1e775908..afd0a81e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,10 +6,10 @@ "": { "name": "@seamapi/python", "devDependencies": { - "@seamapi/blueprint": "^1.10.0", + "@seamapi/blueprint": "^1.12.0", "@seamapi/fake-seam-connect": "2.0.6", "@seamapi/smith": "^1.1.0", - "@seamapi/types": "1.1047.0", + "@seamapi/types": "1.1092.0", "change-case": "^5.4.4", "prettier": "^3.2.5" }, @@ -787,14 +787,14 @@ "license": "MIT" }, "node_modules/@seamapi/blueprint": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@seamapi/blueprint/-/blueprint-1.10.0.tgz", - "integrity": "sha512-XyP6zvbhv5naWEa9T9utNLi3FVVmvUB1Htih/IjUqS3Uz0FrIIBWy7Myk5+s4uylEt+wTdtSBaA1fGOF/6ILmA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@seamapi/blueprint/-/blueprint-1.12.0.tgz", + "integrity": "sha512-cH6mpLIUm2q2YxuxEW4G6ODYZJFZihJcUtGyVWjwfdfrmGCyAJRl+S7XCyGz5LuNhdBRux5iShHxtsc/b0Y80g==", "dev": true, "license": "MIT", "dependencies": { "change-case": "^5.4.4", - "zod": "^3.23.8" + "zod": "^4.0.0" }, "engines": { "node": ">=22.12.0", @@ -853,9 +853,9 @@ } }, "node_modules/@seamapi/types": { - "version": "1.1047.0", - "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.1047.0.tgz", - "integrity": "sha512-S3A3FcQ4fWJ1IsxVjHaE14k7WlQt0iKJsb3oPF/YVUZHJAmHnFg6riAF6LghlMig7prLf6C2uxaTDairw5dCJQ==", + "version": "1.1092.0", + "resolved": "https://registry.npmjs.org/@seamapi/types/-/types-1.1092.0.tgz", + "integrity": "sha512-99Wi8sSk4RZ2g9/iRJiONtIp9Hc/c2Xe5SeIIacbwxKbqkpmiTi8tQO0+M2qGXVzYuoO3xM/lBkEy4kUAhe/Ew==", "dev": true, "license": "MIT", "engines": { @@ -863,7 +863,7 @@ "npm": ">=10.0.0" }, "peerDependencies": { - "zod": "^3.24.0" + "zod": "^3.25.0 || ^4.0.0" } }, "node_modules/@sindresorhus/merge-streams": { @@ -5823,9 +5823,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "dev": true, "license": "MIT", "funding": { diff --git a/package.json b/package.json index 85b6576d..d22e652e 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,10 @@ }, "packageManager": "npm@11.19.0", "devDependencies": { - "@seamapi/blueprint": "^1.10.0", + "@seamapi/blueprint": "^1.12.0", "@seamapi/fake-seam-connect": "2.0.6", "@seamapi/smith": "^1.1.0", - "@seamapi/types": "1.1047.0", + "@seamapi/types": "1.1092.0", "change-case": "^5.4.4", "prettier": "^3.2.5" } diff --git a/seam/resources/__init__.py b/seam/resources/__init__.py index 14aac489..b765dd08 100644 --- a/seam/resources/__init__.py +++ b/seam/resources/__init__.py @@ -38,6 +38,9 @@ ActivateClimatePresetSuccessActionAttempt, ActivateClimatePresetPendingActionAttempt, ActivateClimatePresetErrorActionAttempt, + ActivateWeeklyProgramSuccessActionAttempt, + ActivateWeeklyProgramPendingActionAttempt, + ActivateWeeklyProgramErrorActionAttempt, SimulateKeypadCodeEntrySuccessActionAttempt, SimulateKeypadCodeEntryPendingActionAttempt, SimulateKeypadCodeEntryErrorActionAttempt, @@ -81,6 +84,7 @@ SetFanModeActionAttempt, SetHvacModeActionAttempt, ActivateClimatePresetActionAttempt, + ActivateWeeklyProgramActionAttempt, SimulateKeypadCodeEntryActionAttempt, SimulateManualLockViaKeypadActionAttempt, PushThermostatProgramsActionAttempt, @@ -99,6 +103,8 @@ action_attempt_from_dict, ) from .batch import Batch +from .camera_live_view_answer import CameraLiveViewAnswer +from .camera_live_view_session import CameraLiveViewSession from .client_session import ClientSession from .connect_webview import ConnectWebview from .connected_account import ConnectedAccount @@ -106,6 +112,7 @@ from .device import Device from .device_provider import DeviceProvider from .instant_key import InstantKey +from .media import Media from .noise_threshold import NoiseThreshold from .pagination import Pagination from .phone import Phone diff --git a/seam/resources/access_code.py b/seam/resources/access_code.py index 0a1b094e..760db4a7 100644 --- a/seam/resources/access_code.py +++ b/seam/resources/access_code.py @@ -13,15 +13,15 @@ def _from_discriminated_dict( @dataclass class AccessCode: - """Represents a smart lock `access code `_. + """Represents a smart lock `access code `_. An access code is a code used for a keypad or pinpad device. Unlike physical keys, which can easily be lost or duplicated, PIN codes can be customized, tracked, and altered on the fly. Using the Seam Access Code API, you can easily generate access codes on the hundreds of door lock models with which we integrate. - Seam supports programming two types of access codes: `ongoing `_ and `time-bound `_. To differentiate between the two, refer to the ``type`` property of the access code. Ongoing codes display as ``ongoing``, whereas time-bound codes are labeled ``time_bound``. An ongoing access code is active, until it has been removed from the device. To specify an ongoing access code, leave both ``starts_at`` and ``ends_at`` empty. A time-bound access code will be programmed at the ``starts_at`` time and removed at the ``ends_at`` time. + Seam supports programming two types of access codes: `ongoing `_ and `time-bound `_. To differentiate between the two, refer to the ``type`` property of the access code. Ongoing codes display as ``ongoing``, whereas time-bound codes are labeled ``time_bound``. An ongoing access code is active, until it has been removed from the device. To specify an ongoing access code, leave both ``starts_at`` and ``ends_at`` empty. A time-bound access code will be programmed at the ``starts_at`` time and removed at the ``ends_at`` time. - In addition, for certain devices, Seam also supports `offline access codes `_. Offline access (PIN) codes are designed for door locks that might not always maintain an internet connection. For this type of access code, the device manufacturer uses encryption keys (tokens) to create server-based registries of algorithmically-generated offline PIN codes. Because the tokens remain synchronized with the managed devices, the locks do not require an active internet connection—and you do not need to be near the locks—to create an offline access code. Then, owners or managers can share these offline codes with users through a variety of mechanisms, such as messaging applications. That is, lock users do not need to install a smartphone application to receive an offline access code. + In addition, for certain devices, Seam also supports `offline access codes `_. Offline access (PIN) codes are designed for door locks that might not always maintain an internet connection. For this type of access code, the device manufacturer uses encryption keys (tokens) to create server-based registries of algorithmically-generated offline PIN codes. Because the tokens remain synchronized with the managed devices, the locks do not require an active internet connection—and you do not need to be near the locks—to create an offline access code. Then, owners or managers can share these offline codes with users through a variety of mechanisms, such as messaging applications. That is, lock users do not need to install a smartphone application to receive an offline access code. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. :ivar access_code_id: Unique identifier for the access code. @@ -33,11 +33,13 @@ class AccessCode: :ivar device_id: Unique identifier for the device associated with the access code. + :ivar display_status: Human-readable label for where this access code sits in its lifecycle, for example ``Active``, ``Issuing``, or ``Expired``. For display only. The wording is not stable and is not an enumeration — it may change at any time, so never compare against or branch on it. To make decisions, read ``pending_mutations``, ``errors``, ``warnings``, ``starts_at``, and ``ends_at``. + :ivar dormakaba_oracode_metadata: Metadata for a dormakaba Oracode managed access code. Only present for access codes from dormakaba Oracode devices. :ivar ends_at: Date and time after which the time-bound access code becomes inactive. - :ivar errors: Errors associated with the `access code `_. + :ivar errors: Errors associated with the `access code `_. :ivar is_backup: Indicates whether the access code is a backup code. @@ -63,11 +65,11 @@ class AccessCode: :ivar starts_at: Date and time at which the time-bound access code becomes active. - :ivar status: Current status of the access code within the operational lifecycle. Values are ``setting``, a transitional phase that indicates that the code is being configured or activated; ``set``, which indicates that the code is active and operational; ``unset``, which indicates a deactivated or unused state, either before activation or after deliberate deactivation; ``removing``, which indicates a transitional period in which the code is being deleted or made inactive; and ``unknown``, which indicates an indeterminate state, due to reasons such as system errors or incomplete data, that highlights a potential need for system review or troubleshooting. See also `Lifecycle of Access Codes `_. + :ivar status: Deprecated: Use ``display_status`` to show a person the code's state. To make decisions, read ``pending_mutations``, ``errors``, ``warnings``, ``starts_at``, and ``ends_at``. Current status of the access code within the operational lifecycle. Values are ``setting``, a transitional phase that indicates that the code is being configured or activated; ``set``, which indicates that the code is active and operational; ``unset``, which indicates a deactivated or unused state, either before activation or after deliberate deactivation; ``removing``, which indicates a transitional period in which the code is being deleted or made inactive; and ``unknown``, which indicates an indeterminate state, due to reasons such as system errors or incomplete data, that highlights a potential need for system review or troubleshooting. See also `Lifecycle of Access Codes `_. :ivar type: Type of the access code. ``ongoing`` access codes are active continuously until deactivated manually. ``time_bound`` access codes have a specific duration. - :ivar warnings: Warnings associated with the `access code `_. + :ivar warnings: Warnings associated with the `access code `_. :ivar workspace_id: Unique identifier for the Seam workspace associated with the access code. """ @@ -427,8 +429,8 @@ def from_dict(cls, d: Any): ) @dataclass - class FailedToExpireError(ResourceMapping): - """This access code is still active on the device even though its ``ends_at`` has passed, so the recipient may still be able to unlock the device after their access window ended. Seam is attempting to remove it, and this error clears automatically once the access code is no longer active. + class FailedToDeleteError(ResourceMapping): + """This access code is still active on the device even though its ``ends_at`` has passed, so the recipient may still be able to unlock the device after their access window ended. Seam is attempting to delete it, and this error clears automatically once the access code is no longer active. :ivar created_at: Date and time at which Seam created the error. @@ -440,7 +442,7 @@ class FailedToExpireError(ResourceMapping): """ created_at: Optional[str] - error_code: Literal["failed_to_expire"] + error_code: Literal["failed_to_delete"] is_access_code_error: Literal[True] message: str @@ -461,7 +463,7 @@ class AccountDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -492,7 +494,7 @@ class SaltoKsSubscriptionLimitExceededError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -517,13 +519,13 @@ def from_dict(cls, d: Any): @dataclass class InsufficientPermissionsError(ResourceMapping): - """Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + """Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -554,7 +556,7 @@ class DormakabaSitesDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -687,7 +689,7 @@ def from_dict(cls, d: Any): @dataclass class EmptyBackupAccessCodePoolError(ResourceMapping): - """Indicates that the `backup access code pool `_ is empty. + """Indicates that the `backup access code pool `_ is empty. :ivar created_at: Date and time at which Seam created the error. @@ -822,13 +824,13 @@ def from_dict(cls, d: Any): @dataclass class BridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -1438,7 +1440,7 @@ def from_dict(cls, d: Any): CodeConstraintsViolatedError, FailedToIssueError, FailedToUpdateError, - FailedToExpireError, + FailedToDeleteError, AccountDisconnectedError, SaltoKsSubscriptionLimitExceededError, InsufficientPermissionsError, @@ -1465,7 +1467,7 @@ def from_dict(cls, d: Any): "code_constraints_violated": CodeConstraintsViolatedError, "failed_to_issue": FailedToIssueError, "failed_to_update": FailedToUpdateError, - "failed_to_expire": FailedToExpireError, + "failed_to_delete": FailedToDeleteError, "account_disconnected": AccountDisconnectedError, "salto_ks_subscription_limit_exceeded": SaltoKsSubscriptionLimitExceededError, "insufficient_permissions": InsufficientPermissionsError, @@ -1533,6 +1535,7 @@ def from_dict(cls, d: Any): common_code_key: Optional[str] created_at: str device_id: str + display_status: str dormakaba_oracode_metadata: Optional[DormakabaOracodeMetadata] ends_at: Optional[str] errors: List[Errors] @@ -1561,6 +1564,7 @@ def from_dict(cls, d: Any): common_code_key=d.get("common_code_key", None), created_at=d.get("created_at", None), device_id=d.get("device_id", None), + display_status=d.get("display_status", None), dormakaba_oracode_metadata=( cls.DormakabaOracodeMetadata.from_dict( d.get("dormakaba_oracode_metadata") diff --git a/seam/resources/access_grant.py b/seam/resources/access_grant.py index 8e52b3e4..db9a5498 100644 --- a/seam/resources/access_grant.py +++ b/seam/resources/access_grant.py @@ -33,7 +33,7 @@ class AccessGrant: :ivar ends_at: Date and time at which the Access Grant ends. - :ivar errors: Errors associated with the `access grant `_. + :ivar errors: Errors associated with the `access grant `_. :ivar instant_key_url: Instant Key URL. Only returned if the Access Grant has a single mobile_key access_method. @@ -53,7 +53,7 @@ class AccessGrant: :ivar user_identity_id: ID of user identity to which the Access Grant gives access. - :ivar warnings: Warnings associated with the `access grant `_. + :ivar warnings: Warnings associated with the `access grant `_. :ivar workspace_id: ID of the Seam workspace associated with the Access Grant.""" @@ -261,7 +261,7 @@ def from_dict(cls, d: Any): @dataclass class BeingDeletedWarning(ResourceMapping): - """Indicates that the `access grant `_ is being deleted. + """Indicates that the `access grant `_ is being deleted. :ivar created_at: Date and time at which Seam created the warning. @@ -359,7 +359,7 @@ def from_dict(cls, d: Any): @dataclass class UpdatingAccessTimesWarning(ResourceMapping): - """Indicates that the access times for this `access grant `_ are being updated. + """Indicates that the access times for this `access grant `_ are being updated. :ivar access_method_ids: IDs of the access methods being updated. diff --git a/seam/resources/access_method.py b/seam/resources/access_method.py index bc0efc94..a95bdf87 100644 --- a/seam/resources/access_method.py +++ b/seam/resources/access_method.py @@ -29,7 +29,7 @@ class AccessMethod: :ivar display_status: Human-readable sentence describing where the access method sits in its relationship with the device or access system, for example ``Awaiting encoding``. For display only. The wording is not stable and is not an enumeration — it may change at any time, so never compare against or branch on it. To make decisions, read ``is_issued``, ``errors``, and ``pending_mutations``. - :ivar errors: Errors associated with the `access method `_. + :ivar errors: Errors associated with the `access method `_. :ivar instant_key_url: URL of the Instant Key for mobile key access methods. @@ -47,15 +47,15 @@ class AccessMethod: :ivar mode: Access method mode. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar pending_mutations: Pending mutations for the `access method `_. Indicates operations that are in progress. + :ivar pending_mutations: Pending mutations for the `access method `_. Indicates operations that are in progress. - :ivar warnings: Warnings associated with the `access method `_. + :ivar warnings: Warnings associated with the `access method `_. :ivar workspace_id: ID of the Seam workspace associated with the access method.""" @dataclass class FailedToIssueError(ResourceMapping): - """Indicates that Seam was unable to issue this `access method `_ before its access grant started, so the recipient may be unable to access the space. This usually points to a problem that needs attention, such as an offline or disconnected device. Seam keeps retrying, and this error clears automatically if the access method is eventually issued. + """Indicates that Seam was unable to issue this `access method `_ before its access grant started, so the recipient may be unable to access the space. This usually points to a problem that needs attention, such as an offline or disconnected device. Seam keeps retrying, and this error clears automatically if the access method is eventually issued. :ivar created_at: Date and time at which Seam created the error. @@ -272,7 +272,7 @@ def from_dict(cls, d: Any): @dataclass class BeingDeletedWarning(ResourceMapping): - """Indicates that the `access method `_ is being deleted. + """Indicates that the `access method `_ is being deleted. :ivar created_at: Date and time at which Seam created the warning. @@ -295,7 +295,7 @@ def from_dict(cls, d: Any): @dataclass class UpdatingAccessTimesWarning(ResourceMapping): - """Indicates that the access times for this `access method `_ are being updated. + """Indicates that the access times for this `access method `_ are being updated. :ivar created_at: Date and time at which Seam created the warning. @@ -345,7 +345,7 @@ def from_dict(cls, d: Any): @dataclass class DelayInIssuingWarning(ResourceMapping): - """Indicates that Seam has not yet issued this `access method `_, even though its access grant is about to begin, so access may not be ready when the recipient arrives. Seam is still attempting to issue it, and this warning clears automatically once issuance succeeds. + """Indicates that Seam has not yet issued this `access method `_, even though its access grant is about to begin, so access may not be ready when the recipient arrives. Seam is still attempting to issue it, and this warning clears automatically once issuance succeeds. :ivar created_at: Date and time at which Seam created the warning. @@ -366,6 +366,52 @@ def from_dict(cls, d: Any): warning_code=d.get("warning_code", None), ) + @dataclass + class UserIdentityMissingEmailAddressWarning(ResourceMapping): + """Indicates that the access system delivers this mobile key through an app invitation sent to the recipient's email address, but the `user identity `_ for this `access grant `_ has no email address, so the mobile key cannot be delivered. Set an email address on the user identity when you create the access grant. + + :ivar created_at: Date and time at which Seam created the warning. + + :ivar message: Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + :ivar warning_code: Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + """ + + created_at: str + message: str + warning_code: Literal["user_identity_missing_email_address"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + created_at=d.get("created_at", None), + message=d.get("message", None), + warning_code=d.get("warning_code", None), + ) + + @dataclass + class UserIdentityMissingPhoneNumberWarning(ResourceMapping): + """Indicates that the access system delivers this mobile key to the recipient's phone number, but the `user identity `_ for this `access grant `_ has no phone number, so the mobile key cannot be delivered. Set a phone number on the user identity when you create the access grant. + + :ivar created_at: Date and time at which Seam created the warning. + + :ivar message: Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + :ivar warning_code: Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + """ + + created_at: str + message: str + warning_code: Literal["user_identity_missing_phone_number"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + created_at=d.get("created_at", None), + message=d.get("message", None), + warning_code=d.get("warning_code", None), + ) + Errors = Union[FailedToIssueError] _ErrorsVariants = { "failed_to_issue": FailedToIssueError, @@ -387,12 +433,16 @@ def from_dict(cls, d: Any): UpdatingAccessTimesWarning, PulledBackupAccessCodeWarning, DelayInIssuingWarning, + UserIdentityMissingEmailAddressWarning, + UserIdentityMissingPhoneNumberWarning, ] _WarningsVariants = { "being_deleted": BeingDeletedWarning, "updating_access_times": UpdatingAccessTimesWarning, "pulled_backup_access_code": PulledBackupAccessCodeWarning, "delay_in_issuing": DelayInIssuingWarning, + "user_identity_missing_email_address": UserIdentityMissingEmailAddressWarning, + "user_identity_missing_phone_number": UserIdentityMissingPhoneNumberWarning, } access_method_id: str diff --git a/seam/resources/acs_access_group.py b/seam/resources/acs_access_group.py index cf3cd29d..20ea9da5 100644 --- a/seam/resources/acs_access_group.py +++ b/seam/resources/acs_access_group.py @@ -15,9 +15,9 @@ def _from_discriminated_dict( class AcsAccessGroup: """Group that defines the entrances to which a set of users has access and, in some cases, the access schedule for these entrances and users. - Some access control systems use `access group `_, which are sets of users, combined with sets of permissions. These permissions include both the set of areas or assets that the users can access and the schedule during which the users can access these areas or assets. Instead of assigning access rights individually to each access control system user, which can be time-consuming and error-prone, administrators can assign users to an access group, thereby ensuring that the users inherit all the permissions associated with the access group. Using access groups streamlines the process of managing large numbers of access control system users, especially in bigger organizations or complexes. + Some access control systems use `access group `_, which are sets of users, combined with sets of permissions. These permissions include both the set of areas or assets that the users can access and the schedule during which the users can access these areas or assets. Instead of assigning access rights individually to each access control system user, which can be time-consuming and error-prone, administrators can assign users to an access group, thereby ensuring that the users inherit all the permissions associated with the access group. Using access groups streamlines the process of managing large numbers of access control system users, especially in bigger organizations or complexes. - To learn whether your access control system supports access groups, see the corresponding `system integration guide `_. + To learn whether your access control system supports access groups, see the corresponding `system integration guide `_. :ivar access_group_type: Deprecated: Use ``external_type``. @@ -72,7 +72,7 @@ def from_dict(cls, d: Any): @dataclass class FailedToCreateOnAcsSystemError(ResourceMapping): - """Indicates that the `access group `_ was not created on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. + """Indicates that the `access group `_ was not created on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. :ivar created_at: Date and time at which Seam created the error. diff --git a/seam/resources/acs_credential.py b/seam/resources/acs_credential.py index 5b916f38..b6451ef7 100644 --- a/seam/resources/acs_credential.py +++ b/seam/resources/acs_credential.py @@ -13,76 +13,76 @@ def _from_discriminated_dict( @dataclass class AcsCredential: - """Means by which an `access control system user `_ gains access at an `entrance `_. The ``acs_credential`` object represents a `credential `_ that provides an ACS user access within an `access control system `_. + """Means by which an `access control system user `_ gains access at an `entrance `_. The ``acs_credential`` object represents a `credential `_ that provides an ACS user access within an `access control system `_. An access control system generally uses digital means of access to authorize a user trying to get through a specific entrance. Examples of credentials include plastic key cards, mobile keys, biometric identifiers, and PIN codes. The electronic nature of these credentials, as well as the fact that access is centralized, enables both the rapid provisioning and rescinding of access and the ability to compile access audit logs. For each ``acs_credential``, you define the access method. You can also specify additional properties, such as a PIN code, depending on the credential type. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach. Use the lower-level ACS credential API directly only when you specifically need to manage individual credentials. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach. Use the lower-level ACS credential API directly only when you specifically need to manage individual credentials. - :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. + :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar acs_credential_id: ID of the `credential `_. + :ivar acs_credential_id: ID of the `credential `_. :ivar acs_credential_pool_id: ID of the credential pool to which the credential belongs. - :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. + :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. - :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. + :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. - :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. + :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. - :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. + :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. - :ivar card_number: Number of the card associated with the `credential `_. + :ivar card_number: Number of the card associated with the `credential `_. - :ivar code: Access (PIN) code for the `credential `_. + :ivar code: Access (PIN) code for the `credential `_. - :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. + :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. - :ivar created_at: Date and time at which the `credential `_ was created. + :ivar created_at: Date and time at which the `credential `_ was created. - :ivar display_name: Display name that corresponds to the `credential `_ type. + :ivar display_name: Display name that corresponds to the `credential `_ type. - :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. + :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :ivar errors: Errors associated with the `credential `_. + :ivar errors: Errors associated with the `credential `_. - :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. + :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. - :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. + :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. - :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. + :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. - :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. + :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. :ivar is_managed: Indicates whether Seam manages the credential. - :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. + :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. - :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. + :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. - :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. + :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. - :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. + :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. - :ivar parent_acs_credential_id: ID of the parent `credential `_. + :ivar parent_acs_credential_id: ID of the parent `credential `_. - :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. + :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. - :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. + :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. - :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. + :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. - :ivar warnings: Warnings associated with the `credential `_. + :ivar warnings: Warnings associated with the `credential `_. - :ivar workspace_id: ID of the workspace that contains the `credential `_. + :ivar workspace_id: ID of the workspace that contains the `credential `_. """ @dataclass class AkilesMetadata(ResourceMapping): - """Akiles-specific metadata for the `credential `_. + """Akiles-specific metadata for the `credential `_. :ivar member_pin_id: ID of the Akiles member PIN.""" @@ -96,7 +96,7 @@ def from_dict(cls, d: Any): @dataclass class AssaAbloyVostioMetadata(ResourceMapping): - """Vostio-specific metadata for the `credential `_. + """Vostio-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -133,7 +133,7 @@ def from_dict(cls, d: Any): @dataclass class Errors(ResourceMapping): - """Errors associated with the `credential `_. + """Errors associated with the `credential `_. :ivar created_at: Date and time at which Seam created the error. @@ -155,7 +155,7 @@ def from_dict(cls, d: Any): @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata for the `credential `_. + """Visionline-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -198,7 +198,7 @@ def from_dict(cls, d: Any): @dataclass class WaitingToBeIssuedWarning(ResourceMapping): - """Indicates that the `credential `_ is waiting to be issued. + """Indicates that the `credential `_ is waiting to be issued. :ivar created_at: Date and time at which Seam created the warning. @@ -221,7 +221,7 @@ def from_dict(cls, d: Any): @dataclass class ScheduleExternallyModifiedWarning(ResourceMapping): - """Indicates that the schedule of one of the `credential `_'s children was modified externally. + """Indicates that the schedule of one of the `credential `_'s children was modified externally. :ivar created_at: Date and time at which Seam created the warning. @@ -244,7 +244,7 @@ def from_dict(cls, d: Any): @dataclass class ScheduleModifiedWarning(ResourceMapping): - """Indicates that the schedule of the `credential `_ was modified to avoid creating a credential with a start date in the past. + """Indicates that the schedule of the `credential `_ was modified to avoid creating a credential with a start date in the past. :ivar created_at: Date and time at which Seam created the warning. @@ -267,7 +267,7 @@ def from_dict(cls, d: Any): @dataclass class BeingDeletedWarning(ResourceMapping): - """Indicates that the `credential `_ is being deleted. + """Indicates that the `credential `_ is being deleted. :ivar created_at: Date and time at which Seam created the warning. @@ -290,7 +290,7 @@ def from_dict(cls, d: Any): @dataclass class UnknownIssueWithAcsCredentialWarning(ResourceMapping): - """An unknown issue occurred while syncing the state of the `credential `_ with the provider. This issue may affect the proper functioning of the credential. + """An unknown issue occurred while syncing the state of the `credential `_ with the provider. This issue may affect the proper functioning of the credential. :ivar created_at: Date and time at which Seam created the warning. @@ -313,7 +313,7 @@ def from_dict(cls, d: Any): @dataclass class NeedsToBeReissuedWarning(ResourceMapping): - """Access permissions for the `credential `_ have changed. `Reissue `_ (re-encode) the credential. This issue may affect the proper functioning of the credential. + """Access permissions for the `credential `_ have changed. `Reissue `_ (re-encode) the credential. This issue may affect the proper functioning of the credential. :ivar created_at: Date and time at which Seam created the warning. diff --git a/seam/resources/acs_encoder.py b/seam/resources/acs_encoder.py index 510c6b71..b9aadfa7 100644 --- a/seam/resources/acs_encoder.py +++ b/seam/resources/acs_encoder.py @@ -6,7 +6,7 @@ @dataclass class AcsEncoder: - """Represents a hardware device that encodes `credential `_ data onto physical cards within an `access control system `_. + """Represents a hardware device that encodes `credential `_ data onto physical cards within an `access control system `_. Some access control systems require credentials to be encoded onto plastic key cards using a card encoder. This process involves the following two key steps: @@ -17,28 +17,28 @@ class AcsEncoder: Separately, the Seam API also supports card scanning, which enables you to scan and read the encoded data on a card. You can use this action to confirm consistency with access control system records or diagnose discrepancies if needed. - See `Working with Card Encoders and Scanners `_. + See `Working with Card Encoders and Scanners `_. - To verify if your access control system requires a card encoder, see the corresponding `system integration guide `_. + To verify if your access control system requires a card encoder, see the corresponding `system integration guide `_. - :ivar acs_encoder_id: ID of the `encoder `_. + :ivar acs_encoder_id: ID of the `encoder `_. - :ivar acs_system_id: ID of the `access control system `_ that contains the `encoder `_. + :ivar acs_system_id: ID of the `access control system `_ that contains the `encoder `_. - :ivar connected_account_id: ID of the connected account that contains the `encoder `_. + :ivar connected_account_id: ID of the connected account that contains the `encoder `_. - :ivar created_at: Date and time at which the `encoder `_ was created. + :ivar created_at: Date and time at which the `encoder `_ was created. - :ivar display_name: Display name for the `encoder `_. + :ivar display_name: Display name for the `encoder `_. - :ivar errors: Errors associated with the `encoder `_. + :ivar errors: Errors associated with the `encoder `_. - :ivar workspace_id: ID of the workspace that contains the `encoder `_. + :ivar workspace_id: ID of the workspace that contains the `encoder `_. """ @dataclass class Errors(ResourceMapping): - """Errors associated with the `encoder `_. + """Errors associated with the `encoder `_. :ivar created_at: Date and time at which Seam created the error. diff --git a/seam/resources/acs_entrance.py b/seam/resources/acs_entrance.py index 1c2a3661..13426755 100644 --- a/seam/resources/acs_entrance.py +++ b/seam/resources/acs_entrance.py @@ -13,21 +13,21 @@ def _from_discriminated_dict( @dataclass class AcsEntrance: - """Represents an `entrance `_ within an `access control system `_. + """Represents an `entrance `_ within an `access control system `_. In an access control system, an entrance is a secured door, gate, zone, or other method of entry. You can list details for all the ``acs_entrance`` resources in your workspace or get these details for a specific ``acs_entrance``. You can also list all entrances associated with a specific credential, and you can list all credentials associated with a specific entrance. - :ivar acs_entrance_id: ID of the `entrance `_. + :ivar acs_entrance_id: ID of the `entrance `_. - :ivar acs_system_id: ID of the `access control system `_ that contains the `entrance `_. + :ivar acs_system_id: ID of the `access control system `_ that contains the `entrance `_. - :ivar akiles_metadata: Akiles-specific metadata associated with the `entrance `_. + :ivar akiles_metadata: Akiles-specific metadata associated with the `entrance `_. - :ivar assa_abloy_vostio_metadata: ASSA ABLOY Vostio-specific metadata associated with the `entrance `_. + :ivar assa_abloy_vostio_metadata: ASSA ABLOY Vostio-specific metadata associated with the `entrance `_. - :ivar avigilon_alta_metadata: Avigilon Alta-specific metadata associated with the `entrance `_. + :ivar avigilon_alta_metadata: Avigilon Alta-specific metadata associated with the `entrance `_. - :ivar brivo_metadata: Brivo-specific metadata associated with the `entrance `_. + :ivar brivo_metadata: Brivo-specific metadata associated with the `entrance `_. :ivar can_belong_to_reservation: Indicates whether the ACS entrance can belong to a reservation via an access_grant.reservation_key. @@ -39,38 +39,38 @@ class AcsEntrance: :ivar can_unlock_with_mobile_key: Indicates whether the ACS entrance can be unlocked with mobile key credentials. - :ivar connected_account_id: ID of the `connected account `_ associated with the `entrance `_. + :ivar connected_account_id: ID of the `connected account `_ associated with the `entrance `_. - :ivar created_at: Date and time at which the `entrance `_ was created. + :ivar created_at: Date and time at which the `entrance `_ was created. - :ivar display_name: Display name for the `entrance `_. + :ivar display_name: Display name for the `entrance `_. - :ivar dormakaba_ambiance_metadata: dormakaba Ambiance-specific metadata associated with the `entrance `_. + :ivar dormakaba_ambiance_metadata: dormakaba Ambiance-specific metadata associated with the `entrance `_. - :ivar dormakaba_community_metadata: dormakaba Community-specific metadata associated with the `entrance `_. + :ivar dormakaba_community_metadata: dormakaba Community-specific metadata associated with the `entrance `_. - :ivar errors: Errors associated with the `entrance `_. + :ivar errors: Errors associated with the `entrance `_. - :ivar hotek_metadata: Hotek-specific metadata associated with the `entrance `_. + :ivar hotek_metadata: Hotek-specific metadata associated with the `entrance `_. - :ivar is_locked: Indicates whether the `entrance `_ is currently locked. + :ivar is_locked: Indicates whether the `entrance `_ is currently locked. - :ivar latch_metadata: Latch-specific metadata associated with the `entrance `_. + :ivar latch_metadata: Latch-specific metadata associated with the `entrance `_. - :ivar salto_ks_metadata: Salto KS-specific metadata associated with the `entrance `_. + :ivar salto_ks_metadata: Salto KS-specific metadata associated with the `entrance `_. - :ivar salto_space_metadata: Salto Space-specific metadata associated with the `entrance `_. + :ivar salto_space_metadata: Salto Space-specific metadata associated with the `entrance `_. :ivar space_ids: IDs of the spaces that the entrance is in. - :ivar visionline_metadata: Visionline-specific metadata associated with the `entrance `_. + :ivar visionline_metadata: Visionline-specific metadata associated with the `entrance `_. - :ivar warnings: Warnings associated with the `entrance `_. + :ivar warnings: Warnings associated with the `entrance `_. """ @dataclass class AkilesMetadata(ResourceMapping): - """Akiles-specific metadata associated with the `entrance `_. + """Akiles-specific metadata associated with the `entrance `_. :ivar actions: Actions the gadget exposes (for example, open). @@ -114,7 +114,7 @@ def from_dict(cls, d: Any): @dataclass class AssaAbloyVostioMetadata(ResourceMapping): - """ASSA ABLOY Vostio-specific metadata associated with the `entrance `_. + """ASSA ABLOY Vostio-specific metadata associated with the `entrance `_. :ivar door_name: Name of the door in the Vostio access system. @@ -147,7 +147,7 @@ def from_dict(cls, d: Any): @dataclass class AvigilonAltaMetadata(ResourceMapping): - """Avigilon Alta-specific metadata associated with the `entrance `_. + """Avigilon Alta-specific metadata associated with the `entrance `_. :ivar entry_name: Entry name for an Avigilon Alta system. @@ -185,7 +185,7 @@ def from_dict(cls, d: Any): @dataclass class BrivoMetadata(ResourceMapping): - """Brivo-specific metadata associated with the `entrance `_. + """Brivo-specific metadata associated with the `entrance `_. :ivar access_point_id: ID of the access point in the Brivo access system. @@ -207,7 +207,7 @@ def from_dict(cls, d: Any): @dataclass class DormakabaAmbianceMetadata(ResourceMapping): - """dormakaba Ambiance-specific metadata associated with the `entrance `_. + """dormakaba Ambiance-specific metadata associated with the `entrance `_. :ivar access_point_name: Name of the access point in the dormakaba Ambiance access system. """ @@ -222,7 +222,7 @@ def from_dict(cls, d: Any): @dataclass class DormakabaCommunityMetadata(ResourceMapping): - """dormakaba Community-specific metadata associated with the `entrance `_. + """dormakaba Community-specific metadata associated with the `entrance `_. :ivar access_point_profile: Type of access point profile in the dormakaba Community access system. """ @@ -237,7 +237,7 @@ def from_dict(cls, d: Any): @dataclass class Errors(ResourceMapping): - """Errors associated with the `entrance `_. + """Errors associated with the `entrance `_. :ivar created_at: Date and time at which Seam created the error. @@ -260,7 +260,7 @@ def from_dict(cls, d: Any): @dataclass class HotekMetadata(ResourceMapping): - """Hotek-specific metadata associated with the `entrance `_. + """Hotek-specific metadata associated with the `entrance `_. :ivar common_area_name: Display name of the entrance. @@ -282,7 +282,7 @@ def from_dict(cls, d: Any): @dataclass class LatchMetadata(ResourceMapping): - """Latch-specific metadata associated with the `entrance `_. + """Latch-specific metadata associated with the `entrance `_. :ivar accessibility_type: Accessibility type in the Latch access system. @@ -308,7 +308,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoKsMetadata(ResourceMapping): - """Salto KS-specific metadata associated with the `entrance `_. + """Salto KS-specific metadata associated with the `entrance `_. :ivar battery_level: Battery level of the door access device. @@ -350,7 +350,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoSpaceMetadata(ResourceMapping): - """Salto Space-specific metadata associated with the `entrance `_. + """Salto Space-specific metadata associated with the `entrance `_. :ivar audit_on_keys: Indicates whether AuditOnKeys is enabled for the door in the Salto Space access system. @@ -384,7 +384,7 @@ def from_dict(cls, d: Any): @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata associated with the `entrance `_. + """Visionline-specific metadata associated with the `entrance `_. :ivar door_category: Category of the door in the Visionline access system. diff --git a/seam/resources/acs_system.py b/seam/resources/acs_system.py index efe0bf50..485d614c 100644 --- a/seam/resources/acs_system.py +++ b/seam/resources/acs_system.py @@ -13,58 +13,58 @@ def _from_discriminated_dict( @dataclass class AcsSystem: - """Represents an `access control system `_. + """Represents an `access control system `_. - Within an ``acs_system``, create ```acs_user``s `_ and ```acs_credential``s `_ to grant access to the ``acs_user``s. + Within an ``acs_system``, create ```acs_user``s `_ and ```acs_credential``s `_ to grant access to the ``acs_user``s. - For details about the resources associated with an access control system, see the `access control systems namespace `_. + For details about the resources associated with an access control system, see the `access control systems namespace `_. - :ivar acs_access_group_count: Number of access groups in the `access control system `_. + :ivar acs_access_group_count: Number of access groups in the `access control system `_. - :ivar acs_system_id: ID of the `access control system `_. + :ivar acs_system_id: ID of the `access control system `_. - :ivar acs_user_count: Number of users in the `access control system `_. + :ivar acs_user_count: Number of users in the `access control system `_. - :ivar connected_account_id: ID of the connected account associated with the `access control system `_. + :ivar connected_account_id: ID of the connected account associated with the `access control system `_. - :ivar connected_account_ids: Deprecated: Use ``connected_account_id``. IDs of the `connected accounts `_ associated with the `access control system `_. + :ivar connected_account_ids: Deprecated: Use ``connected_account_id``. IDs of the `connected accounts `_ associated with the `access control system `_. - :ivar created_at: Date and time at which the `access control system `_ was created. + :ivar created_at: Date and time at which the `access control system `_ was created. - :ivar default_credential_manager_acs_system_id: ID of the default credential manager ``acs_system`` for this `access control system `_. + :ivar default_credential_manager_acs_system_id: ID of the default credential manager ``acs_system`` for this `access control system `_. - :ivar errors: Errors associated with the `access control system `_. + :ivar errors: Errors associated with the `access control system `_. - :ivar external_type: Brand-specific terminology for the `access control system `_ type. + :ivar external_type: Brand-specific terminology for the `access control system `_ type. - :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `access control system `_ type. + :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `access control system `_ type. - :ivar image_alt_text: Alternative text for the `access control system `_ image. + :ivar image_alt_text: Alternative text for the `access control system `_ image. - :ivar image_url: URL for the image that represents the `access control system `_. + :ivar image_url: URL for the image that represents the `access control system `_. :ivar is_credential_manager: Indicates whether the ``acs_system`` is a credential manager. - :ivar location: Location information for the `access control system `_. + :ivar location: Location information for the `access control system `_. - :ivar name: Name of the `access control system `_. + :ivar name: Name of the `access control system `_. :ivar system_type: Deprecated: Use ``external_type``. :ivar system_type_display_name: Deprecated: Use ``external_type_display_name``. - :ivar visionline_metadata: Visionline-specific metadata for the `access control system `_. + :ivar visionline_metadata: Visionline-specific metadata for the `access control system `_. - :ivar warnings: Warnings associated with the `access control system `_. + :ivar warnings: Warnings associated with the `access control system `_. - :ivar workspace_id: ID of the workspace that contains the `access control system `_. + :ivar workspace_id: ID of the workspace that contains the `access control system `_. """ @dataclass class SeamBridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. - This error might also occur if Seam Bridge is connected to the wrong `workspace `_. - See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. + This error might also occur if Seam Bridge is connected to the wrong `workspace `_. + See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. @@ -87,14 +87,14 @@ def from_dict(cls, d: Any): @dataclass class BridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. - See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. + See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to the `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to the `Seam Bridge `_. :ivar message: Detailed description of the error. Provides insights into the issue and potentially how to rectify it. """ @@ -115,9 +115,9 @@ def from_dict(cls, d: Any): @dataclass class VisionlineInstanceUnreachableError(ResourceMapping): - """Indicates that `Seam Bridge `_ is functioning correctly and the Seam API can communicate with Seam Bridge, but the Seam API cannot connect to the on-premises `Visionline access control system `_. - For example, the IP address of the on-premises access control system may be set incorrectly within the Seam `workspace `_. - See also `Troubleshooting Your Access Control System `_. + """Indicates that `Seam Bridge `_ is functioning correctly and the Seam API can communicate with Seam Bridge, but the Seam API cannot connect to the on-premises `Visionline access control system `_. + For example, the IP address of the on-premises access control system may be set incorrectly within the Seam `workspace `_. + See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. @@ -163,7 +163,7 @@ def from_dict(cls, d: Any): @dataclass class InsufficientPermissionsError(ResourceMapping): - """Indicates that Seam's integration user does not have sufficient permissions on the provider's system backing this `access control system `_. Access cannot be managed until permissions are restored. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + """Indicates that the provider's system backing this `access control system `_ is not letting Seam act on it, so access cannot be managed until this is resolved. The error message says which of two causes applies. Either Seam's integration user does not have sufficient permissions on the provider's system, or has been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. Or the provider account or site does not have a valid subscription with the provider: set up or renew that subscription with the provider. :ivar created_at: Date and time at which Seam created the error. @@ -186,7 +186,7 @@ def from_dict(cls, d: Any): @dataclass class AcsSystemDisconnectedError(ResourceMapping): - """Indicates that the `access control system `_ has been disconnected. See `Troubleshooting Your Access Control System `_ to resolve the issue. + """Indicates that the `access control system `_ has been disconnected. See `Troubleshooting Your Access Control System `_ to resolve the issue. :ivar created_at: Date and time at which Seam created the error. @@ -209,7 +209,7 @@ def from_dict(cls, d: Any): @dataclass class AccountDisconnectedError(ResourceMapping): - """Indicates that the login credentials are invalid. Reconnect the account using a `Connect Webview `_ to restore access. + """Indicates that the login credentials are invalid. Reconnect the account using a `Connect Webview `_ to restore access. :ivar created_at: Date and time at which Seam created the error. @@ -232,7 +232,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoKsCertificationExpiredError(ResourceMapping): - """Indicates that the `access control system `_ has lost its Salto KS certification. Contact `support `_ to regain access. + """Indicates that the `access control system `_ has lost its Salto KS certification. Contact `support `_ to regain access. :ivar created_at: Date and time at which Seam created the error. @@ -278,9 +278,9 @@ def from_dict(cls, d: Any): @dataclass class Location(ResourceMapping): - """Location information for the `access control system `_. + """Location information for the `access control system `_. - :ivar time_zone: Time zone in which the `access control system `_ is located. + :ivar time_zone: Time zone in which the `access control system `_ is located. """ time_zone: Optional[str] @@ -293,9 +293,9 @@ def from_dict(cls, d: Any): @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata for the `access control system `_. + """Visionline-specific metadata for the `access control system `_. - :ivar lan_address: IP address or hostname of the main Visionline server relative to `Seam Bridge `_ on the local network. + :ivar lan_address: IP address or hostname of the main Visionline server relative to `Seam Bridge `_ on the local network. :ivar mobile_access_uuid: Keyset loaded into a reader. Mobile keys and reader administration tools securely authenticate only with readers programmed with a matching keyset. @@ -339,7 +339,7 @@ def from_dict(cls, d: Any): @dataclass class TimeZoneDoesNotMatchLocationWarning(ResourceMapping): - """Indicates the `access control system `_ time zone could not be determined because the reported physical location does not match the time zone configured on the physical `ACS entrances `_. + """Indicates the `access control system `_ time zone could not be determined because the reported physical location does not match the time zone configured on the physical `ACS entrances `_. :ivar created_at: Date and time at which Seam created the warning. @@ -391,7 +391,7 @@ def from_dict(cls, d: Any): @dataclass class UnknownIssueWithAcsSystemWarning(ResourceMapping): - """Indicates that Seam encountered an unexpected error while syncing this `access control system `_, so its users, credentials, and access groups may be out of date. Seam retries on every sync cycle and clears this warning once a sync succeeds; if it persists, contact `support `_. + """Indicates that Seam encountered an unexpected error while syncing this `access control system `_, so its users, credentials, and access groups may be out of date. Seam retries on every sync cycle and clears this warning once a sync succeeds; if it persists, contact `support `_. :ivar created_at: Date and time at which Seam created the warning. diff --git a/seam/resources/acs_user.py b/seam/resources/acs_user.py index 5ac83c10..01917fd2 100644 --- a/seam/resources/acs_user.py +++ b/seam/resources/acs_user.py @@ -13,66 +13,66 @@ def _from_discriminated_dict( @dataclass class AcsUser: - """Represents a `user `_ in an `access system `_. + """Represents a `user `_ in an `access system `_. An access system user typically refers to an individual who requires access, like an employee or resident. Each user can possess multiple credentials that serve as their keys or identifiers for access. The type of credential can vary widely. For example, in the Salto system, a user can have a PIN code, a mobile app account, and a fob. In other platforms, it is not uncommon for a user to have more than one of the same credential type, such as multiple key cards. Additionally, these credentials can have a schedule or validity period. - For details about how to configure users in your access system, see the corresponding `system integration guide `_. + For details about how to configure users in your access system, see the corresponding `system integration guide `_. - :ivar access_schedule: ``starts_at`` and ``ends_at`` timestamps for the `access system user's `_ access. + :ivar access_schedule: ``starts_at`` and ``ends_at`` timestamps for the `access system user's `_ access. - :ivar acs_system_id: ID of the `access system `_ that contains the `access system user `_. + :ivar acs_system_id: ID of the `access system `_ that contains the `access system user `_. - :ivar acs_user_id: ID of the `access system user `_. + :ivar acs_user_id: ID of the `access system user `_. - :ivar connected_account_id: The ID of the connected account that is associated with the `access system user `_. + :ivar connected_account_id: The ID of the connected account that is associated with the `access system user `_. - :ivar created_at: Date and time at which the `access system user `_ was created. + :ivar created_at: Date and time at which the `access system user `_ was created. - :ivar display_name: Display name for the `access system user `_. + :ivar display_name: Display name for the `access system user `_. :ivar email: Deprecated: use email_address. - :ivar email_address: Email address of the `access system user `_. + :ivar email_address: Email address of the `access system user `_. - :ivar errors: Errors associated with the `access system user `_. + :ivar errors: Errors associated with the `access system user `_. - :ivar external_type: Brand-specific terminology for the `access system user `_ type. + :ivar external_type: Brand-specific terminology for the `access system user `_ type. - :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `access system user `_ type. + :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `access system user `_ type. - :ivar full_name: Full name of the `access system user `_. + :ivar full_name: Full name of the `access system user `_. :ivar hid_acs_system_id: ID of the HID access control system associated with the user. :ivar is_managed: Indicates whether Seam manages the access system user. - :ivar is_suspended: Indicates whether the `access system user `_ is currently `suspended `_. + :ivar is_suspended: Indicates whether the `access system user `_ is currently `suspended `_. - :ivar pending_mutations: Pending mutations associated with the `access system user `_. Seam is in the process of pushing these mutations to the integrated access system. + :ivar pending_mutations: Pending mutations associated with the `access system user `_. Seam is in the process of pushing these mutations to the integrated access system. - :ivar phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :ivar phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). - :ivar salto_ks_metadata: Salto KS-specific metadata associated with the `access system user `_. + :ivar salto_ks_metadata: Salto KS-specific metadata associated with the `access system user `_. - :ivar salto_space_metadata: Salto Space-specific metadata associated with the `access system user `_. + :ivar salto_space_metadata: Salto Space-specific metadata associated with the `access system user `_. - :ivar user_identity_email_address: Email address of the user identity associated with the `access system user `_. + :ivar user_identity_email_address: Email address of the user identity associated with the `access system user `_. - :ivar user_identity_full_name: Full name of the user identity associated with the `access system user `_. + :ivar user_identity_full_name: Full name of the user identity associated with the `access system user `_. - :ivar user_identity_id: ID of the user identity associated with the `access system user `_. + :ivar user_identity_id: ID of the user identity associated with the `access system user `_. - :ivar user_identity_phone_number: Phone number of the user identity associated with the `access system user `_ in E.164 format (for example, ``+15555550100``). + :ivar user_identity_phone_number: Phone number of the user identity associated with the `access system user `_ in E.164 format (for example, ``+15555550100``). - :ivar warnings: Warnings associated with the `access system user `_. + :ivar warnings: Warnings associated with the `access system user `_. - :ivar workspace_id: ID of the workspace that contains the `access system user `_. + :ivar workspace_id: ID of the workspace that contains the `access system user `_. """ @dataclass class AccessSchedule(ResourceMapping): - """``starts_at`` and ``ends_at`` timestamps for the `access system user's `_ access. + """``starts_at`` and ``ends_at`` timestamps for the `access system user's `_ access. :ivar ends_at: Date and time at which the user's access ends, in `ISO 8601 `_ format. @@ -91,7 +91,7 @@ def from_dict(cls, d: Any): @dataclass class DeletedExternallyError(ResourceMapping): - """Indicates that the `access system user `_ was deleted from the `access system `_ outside of Seam. + """Indicates that the `access system user `_ was deleted from the `access system `_ outside of Seam. :ivar created_at: Date and time at which Seam created the error. @@ -114,7 +114,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoKsSubscriptionLimitExceededError(ResourceMapping): - """Indicates that the `access system user `_ could not be subscribed on Salto KS because the subscription limit has been exceeded. + """Indicates that the `access system user `_ could not be subscribed on Salto KS because the subscription limit has been exceeded. :ivar created_at: Date and time at which Seam created the error. @@ -137,7 +137,7 @@ def from_dict(cls, d: Any): @dataclass class FailedToCreateOnAcsSystemError(ResourceMapping): - """Indicates that the `access system user `_ was not created on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. + """Indicates that the `access system user `_ was not created on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. :ivar created_at: Date and time at which Seam created the error. @@ -160,7 +160,7 @@ def from_dict(cls, d: Any): @dataclass class FailedToUpdateOnAcsSystemError(ResourceMapping): - """Indicates that the `access system user `_ was not updated on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. + """Indicates that the `access system user `_ was not updated on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. :ivar created_at: Date and time at which Seam created the error. @@ -183,7 +183,7 @@ def from_dict(cls, d: Any): @dataclass class FailedToDeleteOnAcsSystemError(ResourceMapping): - """Indicates that the `access system user `_ was not deleted on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. + """Indicates that the `access system user `_ was not deleted on the `access system `_. This is likely due to an internal unexpected error. Contact Seam `support `_. :ivar created_at: Date and time at which Seam created the error. @@ -206,7 +206,7 @@ def from_dict(cls, d: Any): @dataclass class LatchConflictWithResidentUserError(ResourceMapping): - """Indicates that the `access system user `_ was created from the Seam API but also exists on Mission Control. This is unsupported. Contact Seam `support `_. + """Indicates that the `access system user `_ was created from the Seam API but also exists on Mission Control. This is unsupported. Contact Seam `support `_. :ivar created_at: Date and time at which Seam created the error. @@ -666,7 +666,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoKsMetadata(ResourceMapping): - """Salto KS-specific metadata associated with the `access system user `_. + """Salto KS-specific metadata associated with the `access system user `_. :ivar is_subscribed: Indicates whether the user holds an active subscription slot on the Salto KS site. Only subscribed users can unlock doors and count against the site's user-subscription limit. A user may not be subscribed because their access schedule has not started or has ended, the site has reached its subscription limit, or they were manually unsubscribed. This is distinct from ``is_suspended``, which reflects whether the user has been explicitly blocked. """ @@ -681,7 +681,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoSpaceMetadata(ResourceMapping): - """Salto Space-specific metadata associated with the `access system user `_. + """Salto Space-specific metadata associated with the `access system user `_. :ivar audit_openings: Indicates whether AuditOpenings is enabled for the user in the Salto Space access system. @@ -699,7 +699,7 @@ def from_dict(cls, d: Any): @dataclass class BeingDeletedWarning(ResourceMapping): - """Indicates that the `access system user `_ is being deleted from the `access system `_. This is a temporary state, and the access system user will be deleted shortly. + """Indicates that the `access system user `_ is being deleted from the `access system `_. This is a temporary state, and the access system user will be deleted shortly. :ivar created_at: Date and time at which Seam created the warning. @@ -721,7 +721,7 @@ def from_dict(cls, d: Any): @dataclass class SaltoKsUserNotSubscribedWarning(ResourceMapping): - """Indicates that the `access system user `_ is not subscribed on Salto KS, so they cannot unlock doors or perform any actions. This occurs when the their access schedule hasn’t started yet, if their access schedule has ended, if the site has reached its limit for active users (subscription slots), or if they have been manually unsubscribed. + """Indicates that the `access system user `_ is not subscribed on Salto KS, so they cannot unlock doors or perform any actions. This occurs when the their access schedule hasn’t started yet, if their access schedule has ended, if the site has reached its limit for active users (subscription slots), or if they have been manually unsubscribed. :ivar created_at: Date and time at which Seam created the warning. @@ -743,7 +743,7 @@ def from_dict(cls, d: Any): @dataclass class AcsUserInactiveWarning(ResourceMapping): - """Indicates that the `access system user `_ exists but is not currently able to gain access—for example, because their access schedule has not started yet or has ended, the access system has reached its limit for active users, or they have been unsubscribed or deactivated. Refer to the warning message for the provider-specific reason. This is distinct from ``is_suspended``, which indicates the user has been explicitly blocked. + """Indicates that the `access system user `_ exists but is not currently able to gain access—for example, because their access schedule has not started yet or has ended, the access system has reached its limit for active users, or they have been unsubscribed or deactivated. Refer to the warning message for the provider-specific reason. This is distinct from ``is_suspended``, which indicates the user has been explicitly blocked. :ivar created_at: Date and time at which Seam created the warning. @@ -765,7 +765,7 @@ def from_dict(cls, d: Any): @dataclass class UnknownIssueWithAcsUserWarning(ResourceMapping): - """An unknown issue occurred while syncing the state of this `access system user `_ with the provider. This issue may affect the proper functioning of this user. + """An unknown issue occurred while syncing the state of this `access system user `_ with the provider. This issue may affect the proper functioning of this user. :ivar created_at: Date and time at which Seam created the warning. @@ -787,7 +787,7 @@ def from_dict(cls, d: Any): @dataclass class LatchResidentUserWarning(ResourceMapping): - """Indicates that the `access system user `_ was created on Latch Mission Control. Please use the Latch Mission Control to manage this user. + """Indicates that the `access system user `_ was created on Latch Mission Control. Please use the Latch Mission Control to manage this user. :ivar created_at: Date and time at which Seam created the warning. diff --git a/seam/resources/action_attempt.py b/seam/resources/action_attempt.py index 162d4492..a745735c 100644 --- a/seam/resources/action_attempt.py +++ b/seam/resources/action_attempt.py @@ -285,46 +285,46 @@ class Result(ResourceMapping): class AcsCredentialOnEncoder(ResourceMapping): """Snapshot of credential data read from the physical encoder. - :ivar card_number: A number or string that physically identifies the card associated with the `credential `_. + :ivar card_number: A number or string that physically identifies the card associated with the `credential `_. - :ivar created_at: Date and time at which the `credential `_ was created. + :ivar created_at: Date and time at which the `credential `_ was created. - :ivar ends_at: Date and time at which the `credential `_ will stop being usable. + :ivar ends_at: Date and time at which the `credential `_ will stop being usable. :ivar is_issued: Indicates whether the credential has been issued (encoded onto a card). - :ivar starts_at: Date and time at which the `credential `_ becomes usable. + :ivar starts_at: Date and time at which the `credential `_ becomes usable. - :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. + :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. """ @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata for the `credential `_. + """Visionline-specific metadata for the `credential `_. - :ivar cancelled: Indicates whether the card associated with the `credential `_ is cancelled. + :ivar cancelled: Indicates whether the card associated with the `credential `_ is cancelled. - :ivar card_format: Format of the card associated with the `credential `_. + :ivar card_format: Format of the card associated with the `credential `_. - :ivar card_holder: Holder of the card associated with the `credential `_. + :ivar card_holder: Holder of the card associated with the `credential `_. - :ivar card_id: Card ID for the Visionline card associated with the `credential `_. + :ivar card_id: Card ID for the Visionline card associated with the `credential `_. - :ivar common_acs_entrance_ids: IDs of the common `entrances `_ for the `credential `_. + :ivar common_acs_entrance_ids: IDs of the common `entrances `_ for the `credential `_. - :ivar discarded: Indicates whether the card associated with the `credential `_ is discarded. + :ivar discarded: Indicates whether the card associated with the `credential `_ is discarded. - :ivar expired: Indicates whether the card associated with the `credential `_ is expired. + :ivar expired: Indicates whether the card associated with the `credential `_ is expired. - :ivar guest_acs_entrance_ids: IDs of the guest `entrances `_ for the `credential `_. + :ivar guest_acs_entrance_ids: IDs of the guest `entrances `_ for the `credential `_. - :ivar number_of_issued_cards: Number of issued cards associated with the `credential `_. + :ivar number_of_issued_cards: Number of issued cards associated with the `credential `_. - :ivar overridden: Indicates whether the card associated with the `credential `_ is overridden. + :ivar overridden: Indicates whether the card associated with the `credential `_ is overridden. - :ivar overwritten: Indicates whether the card associated with the `credential `_ is overwritten. + :ivar overwritten: Indicates whether the card associated with the `credential `_ is overwritten. - :ivar pending_auto_update: Indicates whether the card associated with the `credential `_ is pending auto-update. + :ivar pending_auto_update: Indicates whether the card associated with the `credential `_ is pending auto-update. """ cancelled: Optional[bool] @@ -383,68 +383,68 @@ def from_dict(cls, d: Any): class AcsCredentialOnSeam(ResourceMapping): """Corresponding credential data as stored on Seam and the access system. - :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. + :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar acs_credential_id: ID of the `credential `_. + :ivar acs_credential_id: ID of the `credential `_. :ivar acs_credential_pool_id: ID of the credential pool to which the credential belongs. - :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. + :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. - :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. + :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. - :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. + :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. - :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. + :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. - :ivar card_number: Number of the card associated with the `credential `_. + :ivar card_number: Number of the card associated with the `credential `_. - :ivar code: Access (PIN) code for the `credential `_. + :ivar code: Access (PIN) code for the `credential `_. - :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. + :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. - :ivar created_at: Date and time at which the `credential `_ was created. + :ivar created_at: Date and time at which the `credential `_ was created. - :ivar display_name: Display name that corresponds to the `credential `_ type. + :ivar display_name: Display name that corresponds to the `credential `_ type. - :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. + :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :ivar errors: Errors associated with the `credential `_. + :ivar errors: Errors associated with the `credential `_. - :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. + :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. - :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. + :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. - :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. + :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. - :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. + :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. :ivar is_managed: - :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. + :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. - :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. + :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. - :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. + :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. - :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. + :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. - :ivar parent_acs_credential_id: ID of the parent `credential `_. + :ivar parent_acs_credential_id: ID of the parent `credential `_. - :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. + :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. - :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. + :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. - :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. + :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. - :ivar warnings: Warnings associated with the `credential `_. + :ivar warnings: Warnings associated with the `credential `_. - :ivar workspace_id: ID of the workspace that contains the `credential `_. + :ivar workspace_id: ID of the workspace that contains the `credential `_. """ @dataclass class AkilesMetadata(ResourceMapping): - """Akiles-specific metadata for the `credential `_. + """Akiles-specific metadata for the `credential `_. :ivar member_pin_id: ID of the Akiles member PIN.""" @@ -458,7 +458,7 @@ def from_dict(cls, d: Any): @dataclass class AssaAbloyVostioMetadata(ResourceMapping): - """Vostio-specific metadata for the `credential `_. + """Vostio-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -495,7 +495,7 @@ def from_dict(cls, d: Any): @dataclass class Errors(ResourceMapping): - """Errors associated with the `credential `_. + """Errors associated with the `credential `_. :ivar created_at: Date and time at which Seam created the error. @@ -517,7 +517,7 @@ def from_dict(cls, d: Any): @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata for the `credential `_. + """Visionline-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -562,7 +562,7 @@ def from_dict(cls, d: Any): @dataclass class Warnings(ResourceMapping): - """Warnings associated with the `credential `_. + """Warnings associated with the `credential `_. :ivar created_at: Date and time at which Seam created the warning. @@ -871,68 +871,68 @@ class EncodeCredentialSuccessActionAttempt: class Result(ResourceMapping): """Result of an encoding attempt. If the attempt was successful, includes the credential data that was encoded onto the card. - :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. + :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar acs_credential_id: ID of the `credential `_. + :ivar acs_credential_id: ID of the `credential `_. :ivar acs_credential_pool_id: ID of the credential pool to which the credential belongs. - :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. + :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. - :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. + :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. - :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. + :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. - :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. + :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. - :ivar card_number: Number of the card associated with the `credential `_. + :ivar card_number: Number of the card associated with the `credential `_. - :ivar code: Access (PIN) code for the `credential `_. + :ivar code: Access (PIN) code for the `credential `_. - :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. + :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. - :ivar created_at: Date and time at which the `credential `_ was created. + :ivar created_at: Date and time at which the `credential `_ was created. - :ivar display_name: Display name that corresponds to the `credential `_ type. + :ivar display_name: Display name that corresponds to the `credential `_ type. - :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. + :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :ivar errors: Errors associated with the `credential `_. + :ivar errors: Errors associated with the `credential `_. - :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. + :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. - :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. + :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. - :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. + :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. - :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. + :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. :ivar is_managed: - :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. + :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. - :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. + :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. - :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. + :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. - :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. + :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. - :ivar parent_acs_credential_id: ID of the parent `credential `_. + :ivar parent_acs_credential_id: ID of the parent `credential `_. - :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. + :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. - :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. + :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. - :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. + :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. - :ivar warnings: Warnings associated with the `credential `_. + :ivar warnings: Warnings associated with the `credential `_. - :ivar workspace_id: ID of the workspace that contains the `credential `_. + :ivar workspace_id: ID of the workspace that contains the `credential `_. """ @dataclass class AkilesMetadata(ResourceMapping): - """Akiles-specific metadata for the `credential `_. + """Akiles-specific metadata for the `credential `_. :ivar member_pin_id: ID of the Akiles member PIN.""" @@ -946,7 +946,7 @@ def from_dict(cls, d: Any): @dataclass class AssaAbloyVostioMetadata(ResourceMapping): - """Vostio-specific metadata for the `credential `_. + """Vostio-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -983,7 +983,7 @@ def from_dict(cls, d: Any): @dataclass class Errors(ResourceMapping): - """Errors associated with the `credential `_. + """Errors associated with the `credential `_. :ivar created_at: Date and time at which Seam created the error. @@ -1005,7 +1005,7 @@ def from_dict(cls, d: Any): @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata for the `credential `_. + """Visionline-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -1048,7 +1048,7 @@ def from_dict(cls, d: Any): @dataclass class Warnings(ResourceMapping): - """Warnings associated with the `credential `_. + """Warnings associated with the `credential `_. :ivar created_at: Date and time at which Seam created the warning. @@ -1313,68 +1313,68 @@ class ScanToAssignCredentialSuccessActionAttempt: class Result(ResourceMapping): """Result of a scan to assign attempt. If the attempt was successful, includes the credential data that was scanned and assigned. - :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. + :ivar access_method: Access method for the `credential `_. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar acs_credential_id: ID of the `credential `_. + :ivar acs_credential_id: ID of the `credential `_. :ivar acs_credential_pool_id: ID of the credential pool to which the credential belongs. - :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. + :ivar acs_system_id: ID of the `access control system `_ that contains the `credential `_. - :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. + :ivar acs_user_id: ID of the `ACS user `_ to whom the `credential `_ belongs. - :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. + :ivar akiles_metadata: Akiles-specific metadata for the `credential `_. - :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. + :ivar assa_abloy_vostio_metadata: Vostio-specific metadata for the `credential `_. - :ivar card_number: Number of the card associated with the `credential `_. + :ivar card_number: Number of the card associated with the `credential `_. - :ivar code: Access (PIN) code for the `credential `_. + :ivar code: Access (PIN) code for the `credential `_. - :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. + :ivar connected_account_id: ID of the `connected account `_ to which the `credential `_ belongs. - :ivar created_at: Date and time at which the `credential `_ was created. + :ivar created_at: Date and time at which the `credential `_ was created. - :ivar display_name: Display name that corresponds to the `credential `_ type. + :ivar display_name: Display name that corresponds to the `credential `_ type. - :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. + :ivar ends_at: Date and time at which the `credential `_ validity ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :ivar errors: Errors associated with the `credential `_. + :ivar errors: Errors associated with the `credential `_. - :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. + :ivar external_type: Brand-specific terminology for the `credential `_ type. Supported values: ``pti_card``, ``brivo_credential``, ``hid_credential``, ``visionline_card``. - :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. + :ivar external_type_display_name: Display name that corresponds to the brand-specific terminology for the `credential `_ type. - :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. + :ivar is_issued: Indicates whether the `credential `_ has been encoded onto a card. - :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. + :ivar is_latest_desired_state_synced_with_provider: Indicates whether the latest state of the `credential `_ has been synced from Seam to the provider. :ivar is_managed: Indicates whether Seam manages the credential. - :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. + :ivar is_multi_phone_sync_credential: Indicates whether the `credential `_ is a `multi-phone sync credential `_. - :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. + :ivar is_one_time_use: Indicates whether the `credential `_ can only be used once. If ``true``, the code becomes invalid after the first use. - :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. + :ivar issued_at: Date and time at which the `credential `_ was encoded onto a card. - :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. + :ivar latest_desired_state_synced_with_provider_at: Date and time at which the state of the `credential `_ was most recently synced from Seam to the provider. - :ivar parent_acs_credential_id: ID of the parent `credential `_. + :ivar parent_acs_credential_id: ID of the parent `credential `_. - :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. + :ivar starts_at: Date and time at which the `credential `_ validity starts, in `ISO 8601 `_ format. - :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. + :ivar user_identity_id: ID of the `user identity `_ to whom the `credential `_ belongs. - :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. + :ivar visionline_metadata: Visionline-specific metadata for the `credential `_. - :ivar warnings: Warnings associated with the `credential `_. + :ivar warnings: Warnings associated with the `credential `_. - :ivar workspace_id: ID of the workspace that contains the `credential `_. + :ivar workspace_id: ID of the workspace that contains the `credential `_. """ @dataclass class AkilesMetadata(ResourceMapping): - """Akiles-specific metadata for the `credential `_. + """Akiles-specific metadata for the `credential `_. :ivar member_pin_id: ID of the Akiles member PIN.""" @@ -1388,7 +1388,7 @@ def from_dict(cls, d: Any): @dataclass class AssaAbloyVostioMetadata(ResourceMapping): - """Vostio-specific metadata for the `credential `_. + """Vostio-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -1425,7 +1425,7 @@ def from_dict(cls, d: Any): @dataclass class Errors(ResourceMapping): - """Errors associated with the `credential `_. + """Errors associated with the `credential `_. :ivar created_at: Date and time at which Seam created the error. @@ -1447,7 +1447,7 @@ def from_dict(cls, d: Any): @dataclass class VisionlineMetadata(ResourceMapping): - """Visionline-specific metadata for the `credential `_. + """Visionline-specific metadata for the `credential `_. :ivar auto_join: Indicates whether the credential should auto-join. For an auto-join credential, Seam automatically issues an override card if there are no other cards and a joiner card if there are existing cards on the doors. @@ -1490,7 +1490,7 @@ def from_dict(cls, d: Any): @dataclass class Warnings(ResourceMapping): - """Warnings associated with the `credential `_. + """Warnings associated with the `credential `_. :ivar created_at: Date and time at which Seam created the warning. @@ -1760,7 +1760,7 @@ class Result(ResourceMapping): :ivar display_status: Human-readable sentence describing where the access method sits in its relationship with the device or access system, for example ``Awaiting encoding``. For display only. The wording is not stable and is not an enumeration — it may change at any time, so never compare against or branch on it. To make decisions, read ``is_issued``, ``errors``, and ``pending_mutations``. - :ivar errors: Errors associated with the `access method `_. + :ivar errors: Errors associated with the `access method `_. :ivar instant_key_url: URL of the Instant Key for mobile key access methods. @@ -1778,16 +1778,16 @@ class Result(ResourceMapping): :ivar mode: Access method mode. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar pending_mutations: Pending mutations for the `access method `_. Indicates operations that are in progress. + :ivar pending_mutations: Pending mutations for the `access method `_. Indicates operations that are in progress. - :ivar warnings: Warnings associated with the `access method `_. + :ivar warnings: Warnings associated with the `access method `_. :ivar workspace_id: ID of the Seam workspace associated with the access method. """ @dataclass class Errors(ResourceMapping): - """Errors associated with the `access method `_. + """Errors associated with the `access method `_. :ivar created_at: Date and time at which Seam created the error. @@ -1810,7 +1810,7 @@ def from_dict(cls, d: Any): @dataclass class PendingMutations(ResourceMapping): - """Pending mutations for the `access method `_. Indicates operations that are in progress. + """Pending mutations for the `access method `_. Indicates operations that are in progress. :ivar created_at: Date and time at which the mutation was created. @@ -1886,7 +1886,7 @@ def from_dict(cls, d: Any): @dataclass class Warnings(ResourceMapping): - """Warnings associated with the `access method `_. + """Warnings associated with the `access method `_. :ivar created_at: Date and time at which Seam created the warning. @@ -1904,6 +1904,8 @@ class Warnings(ResourceMapping): "updating_access_times", "pulled_backup_access_code", "delay_in_issuing", + "user_identity_missing_email_address", + "user_identity_missing_phone_number", ] original_access_method_id: Optional[str] @@ -2542,6 +2544,126 @@ def from_dict(cls, d: Any): ) +@dataclass +class ActivateWeeklyProgramSuccessActionAttempt: + """Activating the weekly program is pending. + + :ivar action_attempt_id: ID of the action attempt. + + :ivar action_type: Action attempt to track the status of returning a thermostat to its weekly program. + + :ivar error: Error associated with the action. + + :ivar result: Result of the action. + + :ivar status:""" + + @dataclass + class Result(ResourceMapping): + """Result of the action.""" + + @classmethod + def from_dict(cls, d: Any): + # pylint: disable=unused-argument + return cls() + + action_attempt_id: str + action_type: Literal["ACTIVATE_WEEKLY_PROGRAM"] + error: None + result: Result + status: Literal["success"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + action_attempt_id=d.get("action_attempt_id", None), + action_type=d.get("action_type", None), + error=d.get("error", None), + result=cls.Result.from_dict(d.get("result") or {}), + status=d.get("status", None), + ) + + +@dataclass +class ActivateWeeklyProgramPendingActionAttempt: + """Activating the weekly program is pending. + + :ivar action_attempt_id: ID of the action attempt. + + :ivar action_type: Action attempt to track the status of returning a thermostat to its weekly program. + + :ivar error: Error associated with the action. + + :ivar result: Result of the action. + + :ivar status:""" + + action_attempt_id: str + action_type: Literal["ACTIVATE_WEEKLY_PROGRAM"] + error: None + result: None + status: Literal["pending"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + action_attempt_id=d.get("action_attempt_id", None), + action_type=d.get("action_type", None), + error=d.get("error", None), + result=d.get("result", None), + status=d.get("status", None), + ) + + +@dataclass +class ActivateWeeklyProgramErrorActionAttempt: + """Activating the weekly program is pending. + + :ivar action_attempt_id: ID of the action attempt. + + :ivar action_type: Action attempt to track the status of returning a thermostat to its weekly program. + + :ivar error: Error associated with the action. + + :ivar result: Result of the action. + + :ivar status:""" + + @dataclass + class Error(ResourceMapping): + """Error associated with the action. + + :ivar message: Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + :ivar type: Type of the error.""" + + message: str + type: str + + @classmethod + def from_dict(cls, d: Any): + return cls( + message=d.get("message", None), + type=d.get("type", None), + ) + + action_attempt_id: str + action_type: Literal["ACTIVATE_WEEKLY_PROGRAM"] + error: Error + result: None + status: Literal["error"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + action_attempt_id=d.get("action_attempt_id", None), + action_type=d.get("action_type", None), + error=cls.Error.from_dict(d.get("error") or {}), + result=d.get("result", None), + status=d.get("status", None), + ) + + @dataclass class SimulateKeypadCodeEntrySuccessActionAttempt: """Simulating a keypad code entry is pending. @@ -3913,6 +4035,9 @@ def from_dict(cls, d: Any): ActivateClimatePresetSuccessActionAttempt, ActivateClimatePresetPendingActionAttempt, ActivateClimatePresetErrorActionAttempt, + ActivateWeeklyProgramSuccessActionAttempt, + ActivateWeeklyProgramPendingActionAttempt, + ActivateWeeklyProgramErrorActionAttempt, SimulateKeypadCodeEntrySuccessActionAttempt, SimulateKeypadCodeEntryPendingActionAttempt, SimulateKeypadCodeEntryErrorActionAttempt, @@ -4008,6 +4133,12 @@ def from_dict(cls, d: Any): ActivateClimatePresetErrorActionAttempt, ] +ActivateWeeklyProgramActionAttempt = Union[ + ActivateWeeklyProgramSuccessActionAttempt, + ActivateWeeklyProgramPendingActionAttempt, + ActivateWeeklyProgramErrorActionAttempt, +] + SimulateKeypadCodeEntryActionAttempt = Union[ SimulateKeypadCodeEntrySuccessActionAttempt, SimulateKeypadCodeEntryPendingActionAttempt, @@ -4085,6 +4216,7 @@ def from_dict(cls, d: Any): SetFanModeSuccessActionAttempt, SetHvacModeSuccessActionAttempt, ActivateClimatePresetSuccessActionAttempt, + ActivateWeeklyProgramSuccessActionAttempt, SimulateKeypadCodeEntrySuccessActionAttempt, SimulateManualLockViaKeypadSuccessActionAttempt, PushThermostatProgramsSuccessActionAttempt, @@ -4109,6 +4241,7 @@ def from_dict(cls, d: Any): SetFanModePendingActionAttempt, SetHvacModePendingActionAttempt, ActivateClimatePresetPendingActionAttempt, + ActivateWeeklyProgramPendingActionAttempt, SimulateKeypadCodeEntryPendingActionAttempt, SimulateManualLockViaKeypadPendingActionAttempt, PushThermostatProgramsPendingActionAttempt, @@ -4133,6 +4266,7 @@ def from_dict(cls, d: Any): SetFanModeErrorActionAttempt, SetHvacModeErrorActionAttempt, ActivateClimatePresetErrorActionAttempt, + ActivateWeeklyProgramErrorActionAttempt, SimulateKeypadCodeEntryErrorActionAttempt, SimulateManualLockViaKeypadErrorActionAttempt, PushThermostatProgramsErrorActionAttempt, @@ -4183,6 +4317,9 @@ def from_dict(cls, d: Any): ("ACTIVATE_CLIMATE_PRESET", "success"): ActivateClimatePresetSuccessActionAttempt, ("ACTIVATE_CLIMATE_PRESET", "pending"): ActivateClimatePresetPendingActionAttempt, ("ACTIVATE_CLIMATE_PRESET", "error"): ActivateClimatePresetErrorActionAttempt, + ("ACTIVATE_WEEKLY_PROGRAM", "success"): ActivateWeeklyProgramSuccessActionAttempt, + ("ACTIVATE_WEEKLY_PROGRAM", "pending"): ActivateWeeklyProgramPendingActionAttempt, + ("ACTIVATE_WEEKLY_PROGRAM", "error"): ActivateWeeklyProgramErrorActionAttempt, ( "SIMULATE_KEYPAD_CODE_ENTRY", "success", diff --git a/seam/resources/batch.py b/seam/resources/batch.py index cdd4151b..bc51de18 100644 --- a/seam/resources/batch.py +++ b/seam/resources/batch.py @@ -8,15 +8,15 @@ class Batch: """A batch of workspace resources. - :ivar access_codes: Represents a smart lock `access code `_. + :ivar access_codes: Represents a smart lock `access code `_. An access code is a code used for a keypad or pinpad device. Unlike physical keys, which can easily be lost or duplicated, PIN codes can be customized, tracked, and altered on the fly. Using the Seam Access Code API, you can easily generate access codes on the hundreds of door lock models with which we integrate. - Seam supports programming two types of access codes: `ongoing `_ and `time-bound `_. To differentiate between the two, refer to the ``type`` property of the access code. Ongoing codes display as ``ongoing``, whereas time-bound codes are labeled ``time_bound``. An ongoing access code is active, until it has been removed from the device. To specify an ongoing access code, leave both ``starts_at`` and ``ends_at`` empty. A time-bound access code will be programmed at the ``starts_at`` time and removed at the ``ends_at`` time. + Seam supports programming two types of access codes: `ongoing `_ and `time-bound `_. To differentiate between the two, refer to the ``type`` property of the access code. Ongoing codes display as ``ongoing``, whereas time-bound codes are labeled ``time_bound``. An ongoing access code is active, until it has been removed from the device. To specify an ongoing access code, leave both ``starts_at`` and ``ends_at`` empty. A time-bound access code will be programmed at the ``starts_at`` time and removed at the ``ends_at`` time. - In addition, for certain devices, Seam also supports `offline access codes `_. Offline access (PIN) codes are designed for door locks that might not always maintain an internet connection. For this type of access code, the device manufacturer uses encryption keys (tokens) to create server-based registries of algorithmically-generated offline PIN codes. Because the tokens remain synchronized with the managed devices, the locks do not require an active internet connection—and you do not need to be near the locks—to create an offline access code. Then, owners or managers can share these offline codes with users through a variety of mechanisms, such as messaging applications. That is, lock users do not need to install a smartphone application to receive an offline access code. + In addition, for certain devices, Seam also supports `offline access codes `_. Offline access (PIN) codes are designed for door locks that might not always maintain an internet connection. For this type of access code, the device manufacturer uses encryption keys (tokens) to create server-based registries of algorithmically-generated offline PIN codes. Because the tokens remain synchronized with the managed devices, the locks do not require an active internet connection—and you do not need to be near the locks—to create an offline access code. Then, owners or managers can share these offline codes with users through a variety of mechanisms, such as messaging applications. That is, lock users do not need to install a smartphone application to receive an offline access code. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. :ivar access_grants: Represents an Access Grant. Access Grants enable you to grant a user identity access to spaces, entrances, and devices through one or more access methods, such as mobile keys, plastic cards, and PIN codes. You can create an Access Grant for an existing user identity, or you can create a new user identity *while* creating the new Access Grant. @@ -24,19 +24,19 @@ class Batch: :ivar acs_access_groups: Group that defines the entrances to which a set of users has access and, in some cases, the access schedule for these entrances and users. - Some access control systems use `access group `_, which are sets of users, combined with sets of permissions. These permissions include both the set of areas or assets that the users can access and the schedule during which the users can access these areas or assets. Instead of assigning access rights individually to each access control system user, which can be time-consuming and error-prone, administrators can assign users to an access group, thereby ensuring that the users inherit all the permissions associated with the access group. Using access groups streamlines the process of managing large numbers of access control system users, especially in bigger organizations or complexes. + Some access control systems use `access group `_, which are sets of users, combined with sets of permissions. These permissions include both the set of areas or assets that the users can access and the schedule during which the users can access these areas or assets. Instead of assigning access rights individually to each access control system user, which can be time-consuming and error-prone, administrators can assign users to an access group, thereby ensuring that the users inherit all the permissions associated with the access group. Using access groups streamlines the process of managing large numbers of access control system users, especially in bigger organizations or complexes. - To learn whether your access control system supports access groups, see the corresponding `system integration guide `_. + To learn whether your access control system supports access groups, see the corresponding `system integration guide `_. - :ivar acs_credentials: Means by which an `access control system user `_ gains access at an `entrance `_. The ``acs_credential`` object represents a `credential `_ that provides an ACS user access within an `access control system `_. + :ivar acs_credentials: Means by which an `access control system user `_ gains access at an `entrance `_. The ``acs_credential`` object represents a `credential `_ that provides an ACS user access within an `access control system `_. An access control system generally uses digital means of access to authorize a user trying to get through a specific entrance. Examples of credentials include plastic key cards, mobile keys, biometric identifiers, and PIN codes. The electronic nature of these credentials, as well as the fact that access is centralized, enables both the rapid provisioning and rescinding of access and the ability to compile access audit logs. For each ``acs_credential``, you define the access method. You can also specify additional properties, such as a PIN code, depending on the credential type. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach. Use the lower-level ACS credential API directly only when you specifically need to manage individual credentials. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach. Use the lower-level ACS credential API directly only when you specifically need to manage individual credentials. - :ivar acs_encoders: Represents a hardware device that encodes `credential `_ data onto physical cards within an `access control system `_. + :ivar acs_encoders: Represents a hardware device that encodes `credential `_ data onto physical cards within an `access control system `_. Some access control systems require credentials to be encoded onto plastic key cards using a card encoder. This process involves the following two key steps: @@ -47,33 +47,33 @@ class Batch: Separately, the Seam API also supports card scanning, which enables you to scan and read the encoded data on a card. You can use this action to confirm consistency with access control system records or diagnose discrepancies if needed. - See `Working with Card Encoders and Scanners `_. + See `Working with Card Encoders and Scanners `_. - To verify if your access control system requires a card encoder, see the corresponding `system integration guide `_. + To verify if your access control system requires a card encoder, see the corresponding `system integration guide `_. - :ivar acs_entrances: Represents an `entrance `_ within an `access control system `_. + :ivar acs_entrances: Represents an `entrance `_ within an `access control system `_. In an access control system, an entrance is a secured door, gate, zone, or other method of entry. You can list details for all the ``acs_entrance`` resources in your workspace or get these details for a specific ``acs_entrance``. You can also list all entrances associated with a specific credential, and you can list all credentials associated with a specific entrance. - :ivar acs_systems: Represents an `access control system `_. + :ivar acs_systems: Represents an `access control system `_. - Within an ``acs_system``, create ```acs_user``s `_ and ```acs_credential``s `_ to grant access to the ``acs_user``s. + Within an ``acs_system``, create ```acs_user``s `_ and ```acs_credential``s `_ to grant access to the ``acs_user``s. - For details about the resources associated with an access control system, see the `access control systems namespace `_. + For details about the resources associated with an access control system, see the `access control systems namespace `_. - :ivar acs_users: Represents a `user `_ in an `access system `_. + :ivar acs_users: Represents a `user `_ in an `access system `_. An access system user typically refers to an individual who requires access, like an employee or resident. Each user can possess multiple credentials that serve as their keys or identifiers for access. The type of credential can vary widely. For example, in the Salto system, a user can have a PIN code, a mobile app account, and a fob. In other platforms, it is not uncommon for a user to have more than one of the same credential type, such as multiple key cards. Additionally, these credentials can have a schedule or validity period. - For details about how to configure users in your access system, see the corresponding `system integration guide `_. + For details about how to configure users in your access system, see the corresponding `system integration guide `_. :ivar action_attempts: Represents an action attempt that enables you to keep track of the progress of your action that affects a physical device or system.actions against a device. Action attempts are useful because the physical world is intrinsically asynchronous. When you request for a device to perform an action, the Seam API immediately returns an action attempt object. In the background, the Seam API performs the action. - See also `Action Attempts `_. + See also `Action Attempts `_. - :ivar client_sessions: Represents a `client session `_. If you want to restrict your users' access to their own devices, use client sessions. + :ivar client_sessions: Represents a `client session `_. If you want to restrict your users' access to their own devices, use client sessions. You create each client session with a custom ``user_identifier_key``. Normally, the ``user_identifier_key`` is a user ID that your application provides. @@ -81,9 +81,9 @@ class Batch: A client session has a token that you can use with the Seam JavaScript SDK to make requests from the client (browser) directly to the Seam API. The token restricts the user's access to only the devices that they own. - See also `Get Started with React `_. + See also `Get Started with React `_. - :ivar connect_webviews: Represents a `Connect Webview `_. + :ivar connect_webviews: Represents a `Connect Webview `_. Connect Webviews are fully-embedded client-side components that you add to your app. Your users interact with your embedded Connect Webviews to link their IoT device or system accounts to Seam. That is, Connect Webviews walk your users through the process of logging in to their device or system accounts. Seam handles all the authentication steps, and—once your user has completed the authorization through your app—you can access and control their devices or systems using the Seam API. @@ -95,9 +95,9 @@ class Batch: To list all providers within a category, use ``/devices/list_device_providers`` with the desired ``provider_category`` filter. To list all provider keys, use ``/devices/list_device_providers`` with no filters. - :ivar connected_accounts: Represents a `connected account `_. A connected account is an external third-party account to which your user has authorized Seam to get access, for example, an August account with a list of door locks. + :ivar connected_accounts: Represents a `connected account `_. A connected account is an external third-party account to which your user has authorized Seam to get access, for example, an August account with a list of door locks. - :ivar devices: Represents a `device `_ that has been connected to Seam. + :ivar devices: Represents a `device `_ that has been connected to Seam. :ivar events: Represents an event. Events let you know when something interesting happens in your workspace. For example, when a lock is unlocked, Seam creates a ``lock.unlocked`` event. When a device's battery level is low, Seam creates a ``device.battery_low`` event. @@ -107,15 +107,15 @@ class Batch: There’s no app to install, nor account to create. Your user just taps a link and gets a lightweight, native-feeling experience using iOS App Clip or Instant Apps on Android. Further, Instant Keys work offline, so even in areas with poor cellular or Wi-Fi, like elevator banks or concrete-walled hallways, the Instant Keys still work. - :ivar noise_thresholds: Represents a `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. + :ivar noise_thresholds: Represents a `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. :ivar spaces: Represents a space that is a logical grouping of devices and entrances. You can assign access to an entire space, thereby making granting access more efficient. :ivar thermostat_daily_programs: Represents a thermostat daily program, consisting of a set of periods, each of which has a starting time and the key that identifies the climate preset to apply at the starting time. - :ivar thermostat_schedules: Represents a `thermostat schedule `_ that activates a configured `climate preset `_ on a `thermostat `_ at a specified starting time and deactivates the climate preset at a specified ending time. + :ivar thermostat_schedules: Represents a `thermostat schedule `_ that activates a configured `climate preset `_ on a `thermostat `_ at a specified starting time and deactivates the climate preset at a specified ending time. - :ivar unmanaged_access_codes: Represents an `unmanaged smart lock access code `_. + :ivar unmanaged_access_codes: Represents an `unmanaged smart lock access code `_. An access code is a code used for a keypad or pinpad device. Unlike physical keys, which can easily be lost or duplicated, PIN codes can be customized, tracked, and altered on the fly. @@ -125,13 +125,13 @@ class Batch: Not all providers support unmanaged access codes. The following providers do not support unmanaged access codes: - - `Kwikset `_ + - `Kwikset `_ - :ivar unmanaged_devices: Represents an `unmanaged device `_. An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + :ivar unmanaged_devices: Represents an `unmanaged device `_. An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. - :ivar user_identities: Represents a `user identity `_ associated with an application user account. + :ivar user_identities: Represents a `user identity `_ associated with an application user account. - :ivar workspaces: Represents a Seam `workspace `_. A workspace is a top-level entity that encompasses all other resources below it, such as devices, connected accounts, and Connect Webviews. Seam provides two types of workspaces. A `sandbox workspace `_ is a special type of workspace designed for testing code. Sandbox workspaces offer test device accounts and virtual devices that you can connect and control. This ability to work with virtual devices is quite handy because it removes the need to own physical devices from multiple brands. To connect real devices and systems to Seam, use a `production workspace `_. + :ivar workspaces: Represents a Seam `workspace `_. A workspace is a top-level entity that encompasses all other resources below it, such as devices, connected accounts, and Connect Webviews. Seam provides two types of workspaces. A `sandbox workspace `_ is a special type of workspace designed for testing code. Sandbox workspaces offer test device accounts and virtual devices that you can connect and control. This ability to work with virtual devices is quite handy because it removes the need to own physical devices from multiple brands. To connect real devices and systems to Seam, use a `production workspace `_. """ access_codes: Optional[List[Dict[str, Any]]] diff --git a/seam/resources/camera_live_view_answer.py b/seam/resources/camera_live_view_answer.py new file mode 100644 index 00000000..2d04b0aa --- /dev/null +++ b/seam/resources/camera_live_view_answer.py @@ -0,0 +1,20 @@ +from typing import Any, Dict, List, Literal, Optional, Union +from dataclasses import dataclass +from ..deep_attr_dict import DeepAttrDict +from ..resource_mapping import ResourceMapping + + +@dataclass +class CameraLiveViewAnswer: + """Represents the WebRTC SDP answer that starts streaming video from a camera for a live view session. + + :ivar sdp_answer: WebRTC SDP answer for the offer, limited to 64 KiB of UTF-8 data. + """ + + sdp_answer: str + + @classmethod + def from_dict(cls, d: Any): + return cls( + sdp_answer=d.get("sdp_answer", None), + ) diff --git a/seam/resources/camera_live_view_session.py b/seam/resources/camera_live_view_session.py new file mode 100644 index 00000000..bec0928a --- /dev/null +++ b/seam/resources/camera_live_view_session.py @@ -0,0 +1,31 @@ +from typing import Any, Dict, List, Literal, Optional, Union +from dataclasses import dataclass +from ..deep_attr_dict import DeepAttrDict +from ..resource_mapping import ResourceMapping + + +@dataclass +class CameraLiveViewSession: + """Represents a short-lived live view session for a single camera. Use the session ID and token to start a WebRTC stream and to stop the session. + + :ivar camera_live_view_session_id: ID of the camera live view session. + + :ivar device_id: ID of the camera. + + :ivar expires_at: Date and time at which the live view session expires. + + :ivar token: Token that authorizes the offer and stop requests for this session.""" + + camera_live_view_session_id: str + device_id: str + expires_at: str + token: str + + @classmethod + def from_dict(cls, d: Any): + return cls( + camera_live_view_session_id=d.get("camera_live_view_session_id", None), + device_id=d.get("device_id", None), + expires_at=d.get("expires_at", None), + token=d.get("token", None), + ) diff --git a/seam/resources/client_session.py b/seam/resources/client_session.py index 0c79303d..1d95477d 100644 --- a/seam/resources/client_session.py +++ b/seam/resources/client_session.py @@ -6,7 +6,7 @@ @dataclass class ClientSession: - """Represents a `client session `_. If you want to restrict your users' access to their own devices, use client sessions. + """Represents a `client session `_. If you want to restrict your users' access to their own devices, use client sessions. You create each client session with a custom ``user_identifier_key``. Normally, the ``user_identifier_key`` is a user ID that your application provides. @@ -14,29 +14,29 @@ class ClientSession: A client session has a token that you can use with the Seam JavaScript SDK to make requests from the client (browser) directly to the Seam API. The token restricts the user's access to only the devices that they own. - See also `Get Started with React `_. + See also `Get Started with React `_. :ivar client_session_id: ID of the client session. - :ivar connect_webview_ids: IDs of the `Connect Webviews `_ associated with the `client session `_. + :ivar connect_webview_ids: IDs of the `Connect Webviews `_ associated with the `client session `_. - :ivar connected_account_ids: IDs of the `connected accounts `_ associated with the `client session `_. + :ivar connected_account_ids: IDs of the `connected accounts `_ associated with the `client session `_. - :ivar created_at: Date and time at which the `client session `_ was created. + :ivar created_at: Date and time at which the `client session `_ was created. - :ivar customer_key: Customer key associated with the `client session `_. + :ivar customer_key: Customer key associated with the `client session `_. - :ivar device_count: Number of devices associated with the `client session `_. + :ivar device_count: Number of devices associated with the `client session `_. - :ivar expires_at: Date and time at which the `client session `_ expires. + :ivar expires_at: Date and time at which the `client session `_ expires. - :ivar token: Client session token associated with the `client session `_. + :ivar token: Client session token associated with the `client session `_. - :ivar user_identifier_key: Your user ID for the user associated with the `client session `_. + :ivar user_identifier_key: Your user ID for the user associated with the `client session `_. - :ivar user_identity_id: ID of the `user identity `_ associated with the client session. + :ivar user_identity_id: ID of the `user identity `_ associated with the client session. - :ivar user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ associated with the client session. + :ivar user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ associated with the client session. :ivar workspace_id: ID of the workspace associated with the client session.""" diff --git a/seam/resources/connect_webview.py b/seam/resources/connect_webview.py index eeec8d1b..8935449b 100644 --- a/seam/resources/connect_webview.py +++ b/seam/resources/connect_webview.py @@ -6,7 +6,7 @@ @dataclass class ConnectWebview: - """Represents a `Connect Webview `_. + """Represents a `Connect Webview `_. Connect Webviews are fully-embedded client-side components that you add to your app. Your users interact with your embedded Connect Webviews to link their IoT device or system accounts to Seam. That is, Connect Webviews walk your users through the process of logging in to their device or system accounts. Seam handles all the authentication steps, and—once your user has completed the authorization through your app—you can access and control their devices or systems using the Seam API. @@ -20,13 +20,13 @@ class ConnectWebview: :ivar accepted_capabilities: High-level device capabilities that the Connect Webview can accept. When creating a Connect Webview, you can specify the types of devices that it can connect to Seam. If you do not set custom ``accepted_capabilities``, Seam uses a default set of ``accepted_capabilities`` for each provider. For example, if you create a Connect Webview that accepts SmartThing devices, without specifying ``accepted_capabilities``, Seam accepts only SmartThings locks. To connect SmartThings thermostats and locks to Seam, create a Connect Webview and include both ``thermostat`` and ``lock`` in the ``accepted_capabilities``. - :ivar accepted_providers: List of accepted `provider keys `_. + :ivar accepted_providers: List of accepted `provider keys `_. :ivar any_provider_allowed: Indicates whether any provider is allowed. :ivar authorized_at: Date and time at which the user authorized (through the Connect Webview) the management of their devices. - :ivar automatically_manage_new_devices: Indicates whether Seam should `import all new devices `_ for the connected account to make these devices available for use and management by the Seam API. + :ivar automatically_manage_new_devices: Indicates whether Seam should `import all new devices `_ for the connected account to make these devices available for use and management by the Seam API. :ivar connect_webview_id: ID of the Connect Webview. @@ -34,7 +34,7 @@ class ConnectWebview: :ivar created_at: Date and time at which the Connect Webview was created. - :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. + :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. :ivar custom_redirect_failure_url: URL to which the Connect Webview should redirect when an unexpected error occurs. @@ -46,13 +46,13 @@ class ConnectWebview: :ivar login_successful: Indicates whether the user logged in successfully using the Connect Webview. - :ivar selected_provider: Selected provider of the Connect Webview, one of the `provider keys `_. + :ivar selected_provider: Selected provider of the Connect Webview, one of the `provider keys `_. :ivar status: Status of the Connect Webview. ``authorized`` indicates that the user has successfully logged into their device or system account, thereby completing the Connect Webview. :ivar url: URL for the Connect Webview. You use the URL to display the Connect Webview flow to your user. - :ivar wait_for_device_creation: Indicates whether Seam should `finish syncing all devices `_ in a newly-connected account before completing the associated Connect Webview. + :ivar wait_for_device_creation: Indicates whether Seam should `finish syncing all devices `_ in a newly-connected account before completing the associated Connect Webview. :ivar workspace_id: ID of the workspace that contains the Connect Webview.""" diff --git a/seam/resources/connected_account.py b/seam/resources/connected_account.py index 8e723b52..e7a5b531 100644 --- a/seam/resources/connected_account.py +++ b/seam/resources/connected_account.py @@ -13,7 +13,7 @@ def _from_discriminated_dict( @dataclass class ConnectedAccount: - """Represents a `connected account `_. A connected account is an external third-party account to which your user has authorized Seam to get access, for example, an August account with a list of door locks. + """Represents a `connected account `_. A connected account is an external third-party account to which your user has authorized Seam to get access, for example, an August account with a list of door locks. :ivar accepted_capabilities: List of capabilities that were accepted during the account connection process. @@ -21,13 +21,13 @@ class ConnectedAccount: :ivar account_type_display_name: Display name for the connected account type. - :ivar automatically_manage_new_devices: Indicates whether Seam should `import all new devices `_ for the connected account to make these devices available for management by the Seam API. + :ivar automatically_manage_new_devices: Indicates whether Seam should `import all new devices `_ for the connected account to make these devices available for management by the Seam API. :ivar connected_account_id: ID of the connected account. :ivar created_at: Date and time at which the connected account was created. - :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. + :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. :ivar customer_key: Your unique key for the customer associated with this connected account. @@ -59,7 +59,7 @@ class AccountDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -84,13 +84,13 @@ def from_dict(cls, d: Any): @dataclass class BridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -121,7 +121,7 @@ class SaltoKsSubscriptionLimitExceededError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -206,7 +206,7 @@ class DormakabaSitesDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. diff --git a/seam/resources/device.py b/seam/resources/device.py index d9ce544f..8bab72d3 100644 --- a/seam/resources/device.py +++ b/seam/resources/device.py @@ -13,7 +13,9 @@ def _from_discriminated_dict( @dataclass class Device: - """Represents a `device `_ that has been connected to Seam. + """Represents a `device `_ that has been connected to Seam. + + :ivar can_activate_weekly_program: Indicates whether the thermostat can be returned to its weekly program, the schedule that is configured on the device itself, releasing any hold that Seam has set. :ivar can_configure_auto_lock: Indicates whether the lock supports configuring automatic locking. @@ -51,17 +53,19 @@ class Device: :ivar can_simulate_removal: Indicates whether the device supports simulating removal in a sandbox. + :ivar can_stream_live_video: Indicates whether the camera supports streaming live video through a camera live view session. + :ivar can_turn_off_hvac: Indicates whether the thermostat can be turned off. :ivar can_unlock_with_code: Indicates whether the lock supports unlocking with an access code. - :ivar capabilities_supported: Collection of capabilities that the device supports when connected to Seam. Values are ``access_code``, which indicates that the device can manage and utilize digital PIN codes for secure access; ``lock``, which indicates that the device controls a door locking mechanism, enabling the remote opening and closing of doors and other entry points; ``noise_detection``, which indicates that the device supports monitoring and responding to ambient noise levels; ``thermostat``, which indicates that the device can regulate and adjust indoor temperatures; ``battery``, which indicates that the device can manage battery life and health; and ``phone``, which indicates that the device is a mobile device, such as a smartphone. **Important:** Superseded by `capability flags `_. + :ivar capabilities_supported: Collection of capabilities that the device supports when connected to Seam. Values are ``access_code``, which indicates that the device can manage and utilize digital PIN codes for secure access; ``lock``, which indicates that the device controls a door locking mechanism, enabling the remote opening and closing of doors and other entry points; ``noise_detection``, which indicates that the device supports monitoring and responding to ambient noise levels; ``thermostat``, which indicates that the device can regulate and adjust indoor temperatures; ``battery``, which indicates that the device can manage battery life and health; and ``phone``, which indicates that the device is a mobile device, such as a smartphone. **Important:** Superseded by `capability flags `_. :ivar connected_account_id: Unique identifier for the account associated with the device. :ivar created_at: Date and time at which the device object was created. - :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. + :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. :ivar device_id: ID of the device. @@ -75,7 +79,7 @@ class Device: :ivar errors: Array of errors associated with the device. Each error object within the array contains two fields: ``error_code`` and ``message``. ``error_code`` is a string that uniquely identifies the type of error, enabling quick recognition and categorization of the issue. ``message`` provides a more detailed description of the error, offering insights into the issue and potentially how to rectify it. - :ivar is_managed: Indicates whether Seam manages the device. See also `Managed and Unmanaged Devices `_. + :ivar is_managed: Indicates whether Seam manages the device. See also `Managed and Unmanaged Devices `_. :ivar location: Location information for the device. @@ -148,7 +152,7 @@ class AccountDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -179,7 +183,7 @@ class SaltoKsSubscriptionLimitExceededError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -204,13 +208,13 @@ def from_dict(cls, d: Any): @dataclass class InsufficientPermissionsError(ResourceMapping): - """Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + """Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -241,7 +245,7 @@ class DormakabaSitesDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -374,7 +378,7 @@ def from_dict(cls, d: Any): @dataclass class EmptyBackupAccessCodePoolError(ResourceMapping): - """Indicates that the `backup access code pool `_ is empty. + """Indicates that the `backup access code pool `_ is empty. :ivar created_at: Date and time at which Seam created the error. @@ -509,13 +513,13 @@ def from_dict(cls, d: Any): @dataclass class BridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -613,6 +617,8 @@ class Properties(ResourceMapping): :ivar aqara_metadata: Metadata for an Aqara device. + :ivar arlo_metadata: Metadata for an Arlo camera. + :ivar assa_abloy_vostio_metadata: Metadata for an ASSA ABLOY Vostio system. :ivar august_metadata: Metadata for an August device. @@ -623,6 +629,8 @@ class Properties(ResourceMapping): :ivar controlbyweb_metadata: Metadata for a ControlByWeb device. + :ivar dormakaba_oracode_iho_metadata: Metadata for a dormakaba Oracode Homeowner's Portal device. + :ivar dormakaba_oracode_metadata: Metadata for a dormakaba Oracode device. :ivar ecobee_metadata: Metadata for an ecobee device. @@ -657,6 +665,8 @@ class Properties(ResourceMapping): :ivar omnitec_metadata: Metadata for an Omnitec device. + :ivar reolink_metadata: Metadata for a Reolink camera. + :ivar ring_metadata: Metadata for a Ring device. :ivar salto_ks_metadata: Metadata for a Salto KS device. @@ -673,6 +683,8 @@ class Properties(ResourceMapping): :ivar tado_metadata: Metadata for a tado° device. + :ivar tapo_metadata: Metadata for a Tapo camera. + :ivar tedee_metadata: Metadata for a Tedee device. :ivar ttlock_metadata: Metadata for a TTLock device. @@ -691,7 +703,7 @@ class Properties(ResourceMapping): :ivar auto_lock_enabled: Indicates whether automatic locking is enabled. - :ivar backup_access_code_pool_enabled: Indicates whether the `backup access code pool `_ is currently enabled for the device. To disable it, set this to ``false`` using `/devices/update `_. + :ivar backup_access_code_pool_enabled: Indicates whether the `backup access code pool `_ is currently enabled for the device. To disable it, set this to ``false`` using `/devices/update `_. :ivar code_constraints: Constraints on access codes for the device. Seam represents each constraint as an object with a ``constraint_type`` property. Depending on the constraint type, there may also be additional properties. Note that some constraints are manufacturer- or device-specific. @@ -711,15 +723,15 @@ class Properties(ResourceMapping): :ivar supported_code_lengths: Supported code lengths for access codes. - :ivar supports_backup_access_code_pool: Indicates whether the device supports a `backup access code pool `_. + :ivar supports_backup_access_code_pool: Indicates whether the device supports a `backup access code pool `_. - :ivar active_thermostat_schedule: Deprecated: Use ``active_thermostat_schedule_id`` with ``/thermostats/schedules/get`` instead. Active `thermostat schedule `_. + :ivar active_thermostat_schedule: Deprecated: Use ``active_thermostat_schedule_id`` with ``/thermostats/schedules/get`` instead. Active `thermostat schedule `_. - :ivar active_thermostat_schedule_id: ID of the active `thermostat schedule `_. + :ivar active_thermostat_schedule_id: ID of the active `thermostat schedule `_. :ivar available_climate_preset_modes: Climate preset modes that the thermostat supports, such as "home", "away", "wake", "sleep", "occupied", and "unoccupied". - :ivar available_climate_presets: Available `climate presets `_ for the thermostat. + :ivar available_climate_presets: Available `climate presets `_ for the thermostat. :ivar available_fan_mode_settings: Fan mode settings that the thermostat supports. @@ -729,7 +741,7 @@ class Properties(ResourceMapping): :ivar default_climate_setting: Deprecated: use fallback_climate_preset_key to specify a fallback climate preset instead. - :ivar fallback_climate_preset_key: Key of the `fallback climate preset `_ for the thermostat. + :ivar fallback_climate_preset_key: Key of the `fallback climate preset `_ for the thermostat. :ivar fan_mode_setting: Deprecated: Use ``current_climate_setting.fan_mode_setting`` instead. @@ -741,29 +753,29 @@ class Properties(ResourceMapping): :ivar is_temporary_manual_override_active: Indicates whether the current thermostat settings differ from the most recent active program or schedule that Seam activated. For this condition to occur, ``current_climate_setting.manual_override_allowed`` must also be ``true``. - :ivar max_cooling_set_point_celsius: Maximum `cooling set point `_ in °C. + :ivar max_cooling_set_point_celsius: Maximum `cooling set point `_ in °C. - :ivar max_cooling_set_point_fahrenheit: Maximum `cooling set point `_ in °F. + :ivar max_cooling_set_point_fahrenheit: Maximum `cooling set point `_ in °F. - :ivar max_heating_set_point_celsius: Maximum `heating set point `_ in °C. + :ivar max_heating_set_point_celsius: Maximum `heating set point `_ in °C. - :ivar max_heating_set_point_fahrenheit: Maximum `heating set point `_ in °F. + :ivar max_heating_set_point_fahrenheit: Maximum `heating set point `_ in °F. :ivar max_thermostat_daily_program_periods_per_day: Maximum number of periods that the thermostat can support per day. For example, if the thermostat supports 4 periods per day, this value is 4. :ivar max_unique_climate_presets_per_thermostat_weekly_program: Maximum number of climate presets that the thermostat can support for weekly programming. - :ivar min_cooling_set_point_celsius: Minimum `cooling set point `_ in °C. + :ivar min_cooling_set_point_celsius: Minimum `cooling set point `_ in °C. - :ivar min_cooling_set_point_fahrenheit: Minimum `cooling set point `_ in °F. + :ivar min_cooling_set_point_fahrenheit: Minimum `cooling set point `_ in °F. - :ivar min_heating_cooling_delta_celsius: Minimum `temperature difference `_ in °C between the cooling and heating set points when in heat-cool (auto) mode. + :ivar min_heating_cooling_delta_celsius: Minimum `temperature difference `_ in °C between the cooling and heating set points when in heat-cool (auto) mode. - :ivar min_heating_cooling_delta_fahrenheit: Minimum `temperature difference `_ in °F between the cooling and heating set points when in heat-cool (auto) mode. + :ivar min_heating_cooling_delta_fahrenheit: Minimum `temperature difference `_ in °F between the cooling and heating set points when in heat-cool (auto) mode. - :ivar min_heating_set_point_celsius: Minimum `heating set point `_ in °C. + :ivar min_heating_set_point_celsius: Minimum `heating set point `_ in °C. - :ivar min_heating_set_point_fahrenheit: Minimum `heating set point `_ in °F. + :ivar min_heating_set_point_fahrenheit: Minimum `heating set point `_ in °F. :ivar relative_humidity: Reported relative humidity, as a value between 0 and 1, inclusive. @@ -771,13 +783,13 @@ class Properties(ResourceMapping): :ivar temperature_fahrenheit: Reported temperature in °F. - :ivar temperature_threshold: Current `temperature threshold `_ set for the thermostat. + :ivar temperature_threshold: Current `temperature threshold `_ set for the thermostat. :ivar thermostat_daily_program_period_precision_minutes: Precision of the thermostat's period in minutes. For example, if the thermostat supports 15-minute periods, this value is 15. All values are relative to the top of the hour, so for 15 minutes, the periods would be 0, 15, 30, and 45 minutes past the hour. - :ivar thermostat_daily_programs: Configured `daily programs `_ for the thermostat. + :ivar thermostat_daily_programs: Configured `daily programs `_ for the thermostat. - :ivar thermostat_weekly_program: Current `weekly program `_ for the thermostat. + :ivar thermostat_weekly_program: Current `weekly program `_ for the thermostat. """ @dataclass @@ -956,15 +968,12 @@ def from_dict(cls, d: Any): class AkilesMetadata(ResourceMapping): """Metadata for an Akiles device. - :ivar _member_group_id: Group ID to which to add users for an Akiles device. - :ivar gadget_id: Gadget ID for an Akiles device. :ivar gadget_name: Gadget name for an Akiles device. :ivar product_name: Product name for an Akiles device.""" - _member_group_id: Optional[str] gadget_id: Optional[str] gadget_name: Optional[str] product_name: Optional[str] @@ -972,7 +981,6 @@ class AkilesMetadata(ResourceMapping): @classmethod def from_dict(cls, d: Any): return cls( - _member_group_id=d.get("_member_group_id", None), gadget_id=d.get("gadget_id", None), gadget_name=d.get("gadget_name", None), product_name=d.get("product_name", None), @@ -1020,6 +1028,36 @@ def from_dict(cls, d: Any): time_zone=d.get("time_zone", None), ) + @dataclass + class ArloMetadata(ResourceMapping): + """Metadata for an Arlo camera. + + :ivar device_id: Device ID reported by Arlo. + + :ivar device_name: Device name reported by Arlo. + + :ivar firmware_version: Firmware version reported by Arlo. + + :ivar hardware_version: Hardware version reported by Arlo. + + :ivar model_id: Model ID reported by Arlo.""" + + device_id: Optional[str] + device_name: Optional[str] + firmware_version: Optional[str] + hardware_version: Optional[str] + model_id: Optional[str] + + @classmethod + def from_dict(cls, d: Any): + return cls( + device_id=d.get("device_id", None), + device_name=d.get("device_name", None), + firmware_version=d.get("firmware_version", None), + hardware_version=d.get("hardware_version", None), + model_id=d.get("model_id", None), + ) + @dataclass class AssaAbloyVostioMetadata(ResourceMapping): """Metadata for an ASSA ABLOY Vostio system. @@ -1150,6 +1188,69 @@ def from_dict(cls, d: Any): relay_name=d.get("relay_name", None), ) + @dataclass + class DormakabaOracodeIhoMetadata(ResourceMapping): + """Metadata for a dormakaba Oracode Homeowner's Portal device. + + :ivar door_id: Door ID for a dormakaba Oracode Homeowner's Portal device. + + :ivar door_name: Name of the door for a dormakaba Oracode Homeowner's Portal device. + + :ivar iana_timezone: IANA time zone for a dormakaba Oracode Homeowner's Portal device. + + :ivar user_levels: User levels for a dormakaba Oracode Homeowner's Portal device. + """ + + @dataclass + class UserLevels(ResourceMapping): + """User levels for a dormakaba Oracode Homeowner's Portal device. + + :ivar user_level: + + :ivar user_level_check_in_time: + + :ivar user_level_check_out_time: + + :ivar user_level_name: + + :ivar user_level_type:""" + + user_level: Optional[float] + user_level_check_in_time: Optional[str] + user_level_check_out_time: Optional[str] + user_level_name: Optional[str] + user_level_type: Optional[str] + + @classmethod + def from_dict(cls, d: Any): + return cls( + user_level=d.get("user_level", None), + user_level_check_in_time=d.get( + "user_level_check_in_time", None + ), + user_level_check_out_time=d.get( + "user_level_check_out_time", None + ), + user_level_name=d.get("user_level_name", None), + user_level_type=d.get("user_level_type", None), + ) + + door_id: Optional[float] + door_name: Optional[str] + iana_timezone: Optional[str] + user_levels: Optional[List[UserLevels]] + + @classmethod + def from_dict(cls, d: Any): + return cls( + door_id=d.get("door_id", None), + door_name=d.get("door_name", None), + iana_timezone=d.get("iana_timezone", None), + user_levels=[ + cls.UserLevels.from_dict(i) for i in d.get("user_levels") or [] + ], + ) + @dataclass class DormakabaOracodeMetadata(ResourceMapping): """Metadata for a dormakaba Oracode device. @@ -1766,7 +1867,7 @@ class NestMetadata(ResourceMapping): :ivar device_name: Device name for a Google Nest device. Google sets this value. - :ivar display_name: Display name for a Google Nest device. + :ivar display_name: Name of the Google Home room containing the device. The device owner sets this value. :ivar nest_device_id: Device ID for a Google Nest device. @@ -1894,6 +1995,28 @@ def from_dict(cls, d: Any): timezone_raw_offset_ms=d.get("timezone_raw_offset_ms", None), ) + @dataclass + class ReolinkMetadata(ResourceMapping): + """Metadata for a Reolink camera. + + :ivar firmware_version: Firmware version reported by the camera. + + :ivar hardware_version: Hardware version reported by the camera. + + :ivar model: Model reported by the Reolink camera.""" + + firmware_version: Optional[str] + hardware_version: Optional[str] + model: Optional[str] + + @classmethod + def from_dict(cls, d: Any): + return cls( + firmware_version=d.get("firmware_version", None), + hardware_version=d.get("hardware_version", None), + model=d.get("model", None), + ) + @dataclass class RingMetadata(ResourceMapping): """Metadata for a Ring device. @@ -2120,6 +2243,28 @@ def from_dict(cls, d: Any): serial_no=d.get("serial_no", None), ) + @dataclass + class TapoMetadata(ResourceMapping): + """Metadata for a Tapo camera. + + :ivar firmware_version: Firmware version reported by the camera. + + :ivar hardware_version: Hardware version reported by the camera. + + :ivar model: Model reported by the Tapo camera.""" + + firmware_version: Optional[str] + hardware_version: Optional[str] + model: Optional[str] + + @classmethod + def from_dict(cls, d: Any): + return cls( + firmware_version=d.get("firmware_version", None), + hardware_version=d.get("hardware_version", None), + model=d.get("model", None), + ) + @dataclass class TedeeMetadata(ResourceMapping): """Metadata for a Tedee device. @@ -2581,34 +2726,34 @@ def from_dict(cls, d: Any): @dataclass class ActiveThermostatSchedule(ResourceMapping): - """Active `thermostat schedule `_. + """Active `thermostat schedule `_. - :ivar climate_preset_key: Key of the `climate preset `_ to use for the `thermostat schedule `_. + :ivar climate_preset_key: Key of the `climate preset `_ to use for the `thermostat schedule `_. - :ivar created_at: Date and time at which the `thermostat schedule `_ was created. + :ivar created_at: Date and time at which the `thermostat schedule `_ was created. - :ivar device_id: ID of the desired `thermostat `_ device. + :ivar device_id: ID of the desired `thermostat `_ device. - :ivar ends_at: Date and time at which the `thermostat schedule `_ ends, in `ISO 8601 `_ format. + :ivar ends_at: Date and time at which the `thermostat schedule `_ ends, in `ISO 8601 `_ format. - :ivar errors: Errors associated with the `thermostat schedule `_. + :ivar errors: Errors associated with the `thermostat schedule `_. - :ivar is_override_allowed: Indicates whether a person at the thermostat can change the thermostat's settings after the `thermostat schedule `_ starts. + :ivar is_override_allowed: Indicates whether a person at the thermostat can change the thermostat's settings after the `thermostat schedule `_ starts. - :ivar max_override_period_minutes: Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled `climate preset `_. See also `Specifying Manual Override Permissions `_. + :ivar max_override_period_minutes: Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled `climate preset `_. See also `Specifying Manual Override Permissions `_. - :ivar name: User-friendly name to identify the `thermostat schedule `_. + :ivar name: User-friendly name to identify the `thermostat schedule `_. - :ivar starts_at: Date and time at which the `thermostat schedule `_ starts, in `ISO 8601 `_ format. + :ivar starts_at: Date and time at which the `thermostat schedule `_ starts, in `ISO 8601 `_ format. - :ivar thermostat_schedule_id: ID of the `thermostat schedule `_. + :ivar thermostat_schedule_id: ID of the `thermostat schedule `_. :ivar workspace_id: ID of the workspace that contains the thermostat schedule. """ @dataclass class Errors(ResourceMapping): - """Errors associated with the `thermostat schedule `_. + """Errors associated with the `thermostat schedule `_. :ivar created_at: Date and time at which Seam created the error. @@ -2661,37 +2806,37 @@ def from_dict(cls, d: Any): @dataclass class AvailableClimatePresets(ResourceMapping): - """Available `climate presets `_ for the thermostat. + """Available `climate presets `_ for the thermostat. - :ivar can_delete: Indicates whether the `climate preset `_ key can be deleted. + :ivar can_delete: Indicates whether the `climate preset `_ key can be deleted. - :ivar can_edit: Indicates whether the `climate preset `_ key can be edited. + :ivar can_edit: Indicates whether the `climate preset `_ key can be edited. - :ivar can_use_with_thermostat_daily_programs: Indicates whether the `climate preset `_ key can be programmed in a thermostat daily program. + :ivar can_use_with_thermostat_daily_programs: Indicates whether the `climate preset `_ key can be programmed in a thermostat daily program. - :ivar climate_preset_key: Unique key to identify the `climate preset `_. + :ivar climate_preset_key: Unique key to identify the `climate preset `_. :ivar climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. - :ivar display_name: Display name for the `climate preset `_. + :ivar display_name: Display name for the `climate preset `_. :ivar ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :ivar manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :ivar manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :ivar name: User-friendly name to identify the `climate preset `_. + :ivar name: User-friendly name to identify the `climate preset `_. """ @dataclass @@ -2771,35 +2916,35 @@ def from_dict(cls, d: Any): class CurrentClimateSetting(ResourceMapping): """Current climate setting. - :ivar can_delete: Indicates whether the `climate preset `_ key can be deleted. + :ivar can_delete: Indicates whether the `climate preset `_ key can be deleted. - :ivar can_edit: Indicates whether the `climate preset `_ key can be edited. + :ivar can_edit: Indicates whether the `climate preset `_ key can be edited. - :ivar can_use_with_thermostat_daily_programs: Indicates whether the `climate preset `_ key can be programmed in a thermostat daily program. + :ivar can_use_with_thermostat_daily_programs: Indicates whether the `climate preset `_ key can be programmed in a thermostat daily program. - :ivar climate_preset_key: Unique key to identify the `climate preset `_. + :ivar climate_preset_key: Unique key to identify the `climate preset `_. :ivar climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. - :ivar display_name: Display name for the `climate preset `_. + :ivar display_name: Display name for the `climate preset `_. :ivar ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :ivar manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :ivar manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :ivar name: User-friendly name to identify the `climate preset `_. + :ivar name: User-friendly name to identify the `climate preset `_. """ @dataclass @@ -2879,35 +3024,35 @@ def from_dict(cls, d: Any): class DefaultClimateSetting(ResourceMapping): """ - :ivar can_delete: Indicates whether the `climate preset `_ key can be deleted. + :ivar can_delete: Indicates whether the `climate preset `_ key can be deleted. - :ivar can_edit: Indicates whether the `climate preset `_ key can be edited. + :ivar can_edit: Indicates whether the `climate preset `_ key can be edited. - :ivar can_use_with_thermostat_daily_programs: Indicates whether the `climate preset `_ key can be programmed in a thermostat daily program. + :ivar can_use_with_thermostat_daily_programs: Indicates whether the `climate preset `_ key can be programmed in a thermostat daily program. - :ivar climate_preset_key: Unique key to identify the `climate preset `_. + :ivar climate_preset_key: Unique key to identify the `climate preset `_. :ivar climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. - :ivar display_name: Display name for the `climate preset `_. + :ivar display_name: Display name for the `climate preset `_. :ivar ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :ivar manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :ivar manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :ivar name: User-friendly name to identify the `climate preset `_. + :ivar name: User-friendly name to identify the `climate preset `_. """ @dataclass @@ -2985,15 +3130,15 @@ def from_dict(cls, d: Any): @dataclass class TemperatureThreshold(ResourceMapping): - """Current `temperature threshold `_ set for the thermostat. + """Current `temperature threshold `_ set for the thermostat. - :ivar lower_limit_celsius: Lower limit in °C within the current `temperature threshold `_ set for the thermostat. + :ivar lower_limit_celsius: Lower limit in °C within the current `temperature threshold `_ set for the thermostat. - :ivar lower_limit_fahrenheit: Lower limit in °F within the current `temperature threshold `_ set for the thermostat. + :ivar lower_limit_fahrenheit: Lower limit in °F within the current `temperature threshold `_ set for the thermostat. - :ivar upper_limit_celsius: Upper limit in °C within the current `temperature threshold `_ set for the thermostat. + :ivar upper_limit_celsius: Upper limit in °C within the current `temperature threshold `_ set for the thermostat. - :ivar upper_limit_fahrenheit: Upper limit in °F within the current `temperature threshold `_ set for the thermostat. + :ivar upper_limit_fahrenheit: Upper limit in °F within the current `temperature threshold `_ set for the thermostat. """ lower_limit_celsius: Optional[float] @@ -3012,7 +3157,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatDailyPrograms(ResourceMapping): - """Configured `daily programs `_ for the thermostat. + """Configured `daily programs `_ for the thermostat. :ivar created_at: Date and time at which the thermostat daily program was created. @@ -3031,7 +3176,7 @@ class ThermostatDailyPrograms(ResourceMapping): class Periods(ResourceMapping): """Array of thermostat daily program periods. - :ivar climate_preset_key: Key of the `climate preset `_ to activate at the ``starts_at_time``. + :ivar climate_preset_key: Key of the `climate preset `_ to activate at the ``starts_at_time``. :ivar starts_at_time: Time at which the thermostat daily program period starts, in `ISO 8601 `_ format. """ @@ -3068,7 +3213,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatWeeklyProgram(ResourceMapping): - """Current `weekly program `_ for the thermostat. + """Current `weekly program `_ for the thermostat. :ivar created_at: Date and time at which the thermostat weekly program was created. @@ -3135,11 +3280,13 @@ def from_dict(cls, d: Any): ] akiles_metadata: Optional[AkilesMetadata] aqara_metadata: Optional[AqaraMetadata] + arlo_metadata: Optional[ArloMetadata] assa_abloy_vostio_metadata: Optional[AssaAbloyVostioMetadata] august_metadata: Optional[AugustMetadata] avigilon_alta_metadata: Optional[AvigilonAltaMetadata] brivo_metadata: Optional[BrivoMetadata] controlbyweb_metadata: Optional[ControlbywebMetadata] + dormakaba_oracode_iho_metadata: Optional[DormakabaOracodeIhoMetadata] dormakaba_oracode_metadata: Optional[DormakabaOracodeMetadata] ecobee_metadata: Optional[EcobeeMetadata] four_suites_metadata: Optional[FourSuitesMetadata] @@ -3157,6 +3304,7 @@ def from_dict(cls, d: Any): noiseaware_metadata: Optional[NoiseawareMetadata] nuki_metadata: Optional[NukiMetadata] omnitec_metadata: Optional[OmnitecMetadata] + reolink_metadata: Optional[ReolinkMetadata] ring_metadata: Optional[RingMetadata] salto_ks_metadata: Optional[SaltoKsMetadata] salto_metadata: Optional[SaltoMetadata] @@ -3165,6 +3313,7 @@ def from_dict(cls, d: Any): sensi_metadata: Optional[SensiMetadata] smartthings_metadata: Optional[SmartthingsMetadata] tado_metadata: Optional[TadoMetadata] + tapo_metadata: Optional[TapoMetadata] tedee_metadata: Optional[TedeeMetadata] ttlock_metadata: Optional[TtlockMetadata] two_n_metadata: Optional[TwoNMetadata] @@ -3290,6 +3439,11 @@ def from_dict(cls, d: Any): if d.get("aqara_metadata") is not None else None ), + arlo_metadata=( + cls.ArloMetadata.from_dict(d.get("arlo_metadata")) + if d.get("arlo_metadata") is not None + else None + ), assa_abloy_vostio_metadata=( cls.AssaAbloyVostioMetadata.from_dict( d.get("assa_abloy_vostio_metadata") @@ -3317,6 +3471,13 @@ def from_dict(cls, d: Any): if d.get("controlbyweb_metadata") is not None else None ), + dormakaba_oracode_iho_metadata=( + cls.DormakabaOracodeIhoMetadata.from_dict( + d.get("dormakaba_oracode_iho_metadata") + ) + if d.get("dormakaba_oracode_iho_metadata") is not None + else None + ), dormakaba_oracode_metadata=( cls.DormakabaOracodeMetadata.from_dict( d.get("dormakaba_oracode_metadata") @@ -3406,6 +3567,11 @@ def from_dict(cls, d: Any): if d.get("omnitec_metadata") is not None else None ), + reolink_metadata=( + cls.ReolinkMetadata.from_dict(d.get("reolink_metadata")) + if d.get("reolink_metadata") is not None + else None + ), ring_metadata=( cls.RingMetadata.from_dict(d.get("ring_metadata")) if d.get("ring_metadata") is not None @@ -3446,6 +3612,11 @@ def from_dict(cls, d: Any): if d.get("tado_metadata") is not None else None ), + tapo_metadata=( + cls.TapoMetadata.from_dict(d.get("tapo_metadata")) + if d.get("tapo_metadata") is not None + else None + ), tedee_metadata=( cls.TedeeMetadata.from_dict(d.get("tedee_metadata")) if d.get("tedee_metadata") is not None @@ -4362,6 +4533,7 @@ def from_dict(cls, d: Any): "max_access_codes_reached": MaxAccessCodesReachedWarning, } + can_activate_weekly_program: Optional[bool] can_configure_auto_lock: Optional[bool] can_hvac_cool: Optional[bool] can_hvac_heat: Optional[bool] @@ -4380,6 +4552,7 @@ def from_dict(cls, d: Any): can_simulate_hub_disconnection: Optional[bool] can_simulate_paid_subscription: Optional[bool] can_simulate_removal: Optional[bool] + can_stream_live_video: Optional[bool] can_turn_off_hvac: Optional[bool] can_unlock_with_code: Optional[bool] capabilities_supported: List[ @@ -4437,6 +4610,9 @@ def from_dict(cls, d: Any): "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] display_name: str errors: List[Errors] @@ -4451,6 +4627,7 @@ def from_dict(cls, d: Any): @classmethod def from_dict(cls, d: Any): return cls( + can_activate_weekly_program=d.get("can_activate_weekly_program", None), 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), @@ -4483,6 +4660,7 @@ def from_dict(cls, d: Any): "can_simulate_paid_subscription", None ), can_simulate_removal=d.get("can_simulate_removal", None), + can_stream_live_video=d.get("can_stream_live_video", None), can_turn_off_hvac=d.get("can_turn_off_hvac", None), can_unlock_with_code=d.get("can_unlock_with_code", None), capabilities_supported=d.get("capabilities_supported", None), diff --git a/seam/resources/device_provider.py b/seam/resources/device_provider.py index b4276458..627fca9f 100644 --- a/seam/resources/device_provider.py +++ b/seam/resources/device_provider.py @@ -8,6 +8,8 @@ class DeviceProvider: """ + :ivar can_activate_weekly_program: Indicates whether the thermostat can be returned to its weekly program, the schedule that is configured on the device itself, releasing any hold that Seam has set. + :ivar can_configure_auto_lock: Indicates whether the lock supports configuring automatic locking. :ivar can_hvac_cool: Indicates whether the thermostat supports cooling. @@ -44,6 +46,8 @@ class DeviceProvider: :ivar can_simulate_removal: Indicates whether the device supports simulating removal in a sandbox. + :ivar can_stream_live_video: Indicates whether the camera supports streaming live video through a camera live view session. + :ivar can_turn_off_hvac: Indicates whether the thermostat can be turned off. :ivar can_unlock_with_code: Indicates whether the lock supports unlocking with an access code. @@ -57,6 +61,7 @@ class DeviceProvider: :ivar provider_categories: List of provider categories to which the device provider belongs, such as ``stable``, ``consumer_smartlocks``, ``thermostats``, and so on. """ + can_activate_weekly_program: Optional[bool] can_configure_auto_lock: Optional[bool] can_hvac_cool: Optional[bool] can_hvac_heat: Optional[bool] @@ -75,6 +80,7 @@ class DeviceProvider: can_simulate_hub_disconnection: Optional[bool] can_simulate_paid_subscription: Optional[bool] can_simulate_removal: Optional[bool] + can_stream_live_video: Optional[bool] can_turn_off_hvac: Optional[bool] can_unlock_with_code: Optional[bool] device_provider_name: Literal[ @@ -109,6 +115,7 @@ class DeviceProvider: "ecobee", "four_suites", "dormakaba_oracode", + "dormakaba_oracode_iho", "pti", "wyze", "seam_passport", @@ -134,6 +141,9 @@ class DeviceProvider: "sifely", "thirty_three_lock", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -161,6 +171,7 @@ class DeviceProvider: @classmethod def from_dict(cls, d: Any): return cls( + can_activate_weekly_program=d.get("can_activate_weekly_program", None), 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), @@ -193,6 +204,7 @@ def from_dict(cls, d: Any): "can_simulate_paid_subscription", None ), can_simulate_removal=d.get("can_simulate_removal", None), + can_stream_live_video=d.get("can_stream_live_video", None), can_turn_off_hvac=d.get("can_turn_off_hvac", None), can_unlock_with_code=d.get("can_unlock_with_code", None), device_provider_name=d.get("device_provider_name", None), diff --git a/seam/resources/media.py b/seam/resources/media.py new file mode 100644 index 00000000..fe813ca1 --- /dev/null +++ b/seam/resources/media.py @@ -0,0 +1,59 @@ +from typing import Any, Dict, List, Literal, Optional, Union +from dataclasses import dataclass +from ..deep_attr_dict import DeepAttrDict +from ..resource_mapping import ResourceMapping + + +@dataclass +class Media: + """Represents a piece of media, such as a video clip or a thumbnail image, that a device captured for an event. Media is in beta. + + :ivar content_type: MIME type of the media, such as ``video/mp4`` or ``image/jpeg``. + + :ivar created_at: Date and time at which the media was created. + + :ivar device_id: ID of the device that captured the media. + + :ivar event_id: ID of the event that the media belongs to. + + :ivar expires_at: Date and time at which the media stops being available. Null when Seam does not know when the media expires. + + :ivar media_id: ID of the media. + + :ivar media_type: Type of the media: a video clip or a still image. + + :ivar status: Status of the media. ``pending`` means that Seam is still retrieving the media. ``available`` means that ``url`` can be used to download it. ``unavailable`` means that no media exists for the event, and ``failed`` means that Seam could not retrieve it. + + :ivar url: Short-lived URL from which you can download the media. Null unless ``status`` is ``available``. The URL expires after about five minutes. Call ``/media/get`` again for a new URL. + + :ivar video_codec: Video codec used to encode the media. Only present for video media. ``hevc`` (H.265) playback support varies by browser and device, so check compatibility before assuming a clip plays inline. + + :ivar workspace_id: ID of the workspace that contains the media.""" + + content_type: Optional[str] + created_at: str + device_id: Optional[str] + event_id: Optional[str] + expires_at: Optional[str] + media_id: str + media_type: Literal["video", "image"] + status: Literal["pending", "available", "unavailable", "failed"] + url: Optional[str] + video_codec: Optional[Literal["h264", "hevc"]] + workspace_id: str + + @classmethod + def from_dict(cls, d: Any): + return cls( + content_type=d.get("content_type", None), + created_at=d.get("created_at", None), + device_id=d.get("device_id", None), + event_id=d.get("event_id", None), + expires_at=d.get("expires_at", None), + media_id=d.get("media_id", None), + media_type=d.get("media_type", None), + status=d.get("status", None), + url=d.get("url", None), + video_codec=d.get("video_codec", None), + workspace_id=d.get("workspace_id", None), + ) diff --git a/seam/resources/noise_threshold.py b/seam/resources/noise_threshold.py index 5ffb202c..ed3a5be3 100644 --- a/seam/resources/noise_threshold.py +++ b/seam/resources/noise_threshold.py @@ -6,7 +6,7 @@ @dataclass class NoiseThreshold: - """Represents a `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. + """Represents a `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. :ivar device_id: Unique identifier for the device that contains the noise threshold. @@ -18,7 +18,7 @@ class NoiseThreshold: :ivar noise_threshold_id: Unique identifier for the noise threshold. - :ivar noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :ivar noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :ivar starts_daily_at: Time at which the noise threshold should become active daily. """ diff --git a/seam/resources/phone.py b/seam/resources/phone.py index ac5aa27f..acc3a18d 100644 --- a/seam/resources/phone.py +++ b/seam/resources/phone.py @@ -10,7 +10,7 @@ class Phone: :ivar created_at: Date and time at which the phone was created. - :ivar custom_metadata: Optional `custom metadata `_ for the phone. + :ivar custom_metadata: Optional `custom metadata `_ for the phone. :ivar device_id: ID of the phone. diff --git a/seam/resources/seam_event.py b/seam/resources/seam_event.py index d843dd82..2fcc17ec 100644 --- a/seam/resources/seam_event.py +++ b/seam/resources/seam_event.py @@ -6,7 +6,7 @@ @dataclass class AccessCodeCreatedEvent: - """An `access code `_ was created. + """An `access code `_ was created. :ivar access_code_id: ID of the affected access code. @@ -63,7 +63,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeChangedEvent: - """An `access code `_ was changed. + """An `access code `_ was changed. :ivar access_code_id: ID of the affected access code. @@ -153,7 +153,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeNameChangedEvent: - """The name of an `access code `_ was changed on the device. + """The name of an `access code `_ was changed on the device. :ivar access_code_id: ID of the affected access code. @@ -252,7 +252,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeCodeChangedEvent: - """The pin code of an `access code `_ was changed on the device. + """The pin code of an `access code `_ was changed on the device. :ivar access_code_id: ID of the affected access code. @@ -351,7 +351,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeTimeFrameChangedEvent: - """The time frame of an `access code `_ was changed on the device. + """The time frame of an `access code `_ was changed on the device. :ivar access_code_id: ID of the affected access code. @@ -458,7 +458,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeMutationsRequestedEvent: - """Mutations were requested on an `access code `_. This event fires at request time, before the change is confirmed on the device. + """Mutations were requested on an `access code `_. This event fires at request time, before the change is confirmed on the device. :ivar access_code_id: ID of the affected access code. @@ -552,7 +552,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeScheduledOnDeviceEvent: - """An `access code `_ was `scheduled natively `_ on a device. + """An `access code `_ was `scheduled natively `_ on a device. :ivar access_code_id: ID of the affected access code. @@ -613,7 +613,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeSetOnDeviceEvent: - """An `access code `_ was set on a device. + """An `access code `_ was set on a device. :ivar access_code_id: ID of the affected access code. @@ -674,7 +674,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeRemovedFromDeviceEvent: - """An `access code `_ was removed from a device. + """An `access code `_ was removed from a device. :ivar access_code_id: ID of the affected access code. @@ -731,7 +731,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeDelayInSettingOnDeviceEvent: - """There was an unusually long delay in setting an `access code `_ on a device. + """There was an unusually long delay in setting an `access code `_ on a device. :ivar access_code_errors: Errors associated with the access code. @@ -966,7 +966,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeFailedToSetOnDeviceEvent: - """An `access code `_ failed to be set on a device. + """An `access code `_ failed to be set on a device. :ivar access_code_errors: Errors associated with the access code. @@ -1201,7 +1201,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeDeletedEvent: - """An `access code `_ was deleted. + """An `access code `_ was deleted. :ivar access_code_id: ID of the affected access code. @@ -1262,7 +1262,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeDelayInRemovingFromDeviceEvent: - """There was an unusually long delay in removing an `access code `_ from a device. + """There was an unusually long delay in removing an `access code `_ from a device. :ivar access_code_errors: Errors associated with the access code. @@ -1501,7 +1501,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeFailedToRemoveFromDeviceEvent: - """An `access code `_ failed to be removed from a device. + """An `access code `_ failed to be removed from a device. :ivar access_code_errors: Errors associated with the access code. @@ -1736,7 +1736,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeModifiedExternalToSeamEvent: - """An `access code `_ was modified outside of Seam. + """An `access code `_ was modified outside of Seam. :ivar access_code_id: ID of the affected access code. @@ -1793,7 +1793,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeDeletedExternalToSeamEvent: - """An `access code `_ was deleted outside of Seam. + """An `access code `_ was deleted outside of Seam. :ivar access_code_id: ID of the affected access code. @@ -1850,7 +1850,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeBackupAccessCodePulledEvent: - """A `backup access code `_ was pulled from the backup access code pool and set on a device. + """A `backup access code `_ was pulled from the backup access code pool and set on a device. :ivar access_code_id: ID of the affected access code. @@ -1911,7 +1911,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeUnmanagedConvertedToManagedEvent: - """An `unmanaged access code `_ was converted successfully to a managed access code. + """An `unmanaged access code `_ was converted successfully to a managed access code. :ivar access_code_id: ID of the affected access code. @@ -1968,7 +1968,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeUnmanagedFailedToConvertToManagedEvent: - """An `unmanaged access code `_ failed to be converted to a managed access code. + """An `unmanaged access code `_ failed to be converted to a managed access code. :ivar access_code_errors: Errors associated with the access code. @@ -2203,7 +2203,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeUnmanagedCreatedEvent: - """An `unmanaged access code `_ was created on a device. + """An `unmanaged access code `_ was created on a device. :ivar access_code_id: ID of the affected access code. @@ -2260,7 +2260,7 @@ def from_dict(cls, d: Any): @dataclass class AccessCodeUnmanagedRemovedEvent: - """An `unmanaged access code `_ was removed from a device. + """An `unmanaged access code `_ was removed from a device. :ivar access_code_id: ID of the affected access code. @@ -2438,7 +2438,7 @@ class AccessGrantAccessGrantedToDoorEvent: :ivar access_grant_id: ID of the affected Access Grant. - :ivar acs_entrance_id: ID of the affected `entrance `_. + :ivar acs_entrance_id: ID of the affected `entrance `_. :ivar created_at: Date and time at which the event was created. @@ -2481,7 +2481,7 @@ class AccessGrantAccessToDoorLostEvent: :ivar access_grant_id: ID of the affected Access Grant. - :ivar acs_entrance_id: ID of the affected `entrance `_. + :ivar acs_entrance_id: ID of the affected `entrance `_. :ivar created_at: Date and time at which the event was created. @@ -3010,7 +3010,7 @@ def from_dict(cls, d: Any): @dataclass class AcsSystemConnectedEvent: - """An `access system `_ was connected. + """An `access system `_ was connected. :ivar acs_system_id: ID of the access system. @@ -3053,7 +3053,7 @@ def from_dict(cls, d: Any): @dataclass class AcsSystemAddedEvent: - """An `access system `_ was added. + """An `access system `_ was added. :ivar acs_system_id: ID of the access system. @@ -3096,7 +3096,7 @@ def from_dict(cls, d: Any): @dataclass class AcsSystemDisconnectedEvent: - """An `access system `_ was disconnected. + """An `access system `_ was disconnected. :ivar acs_system_errors: Errors associated with the access control system. @@ -3259,7 +3259,7 @@ def from_dict(cls, d: Any): @dataclass class AcsCredentialDeletedEvent: - """An `access system credential `_ was deleted. + """An `access system credential `_ was deleted. :ivar acs_credential_id: ID of the affected credential. @@ -3306,7 +3306,7 @@ def from_dict(cls, d: Any): @dataclass class AcsCredentialIssuedEvent: - """An `access system credential `_ was issued. + """An `access system credential `_ was issued. :ivar acs_credential_id: ID of the affected credential. @@ -3353,7 +3353,7 @@ def from_dict(cls, d: Any): @dataclass class AcsCredentialReissuedEvent: - """An `access system credential `_ was reissued. + """An `access system credential `_ was reissued. :ivar acs_credential_id: ID of the affected credential. @@ -3400,7 +3400,7 @@ def from_dict(cls, d: Any): @dataclass class AcsCredentialInvalidatedEvent: - """An `access system credential `_ was invalidated. That is, the credential cannot be used anymore. + """An `access system credential `_ was invalidated. That is, the credential cannot be used anymore. :ivar acs_credential_id: ID of the affected credential. @@ -3447,7 +3447,7 @@ def from_dict(cls, d: Any): @dataclass class AcsUserCreatedEvent: - """An `access system user `_ was created. + """An `access system user `_ was created. :ivar acs_system_id: ID of the access system. @@ -3494,7 +3494,7 @@ def from_dict(cls, d: Any): @dataclass class AcsUserDeletedEvent: - """An `access system user `_ was deleted. + """An `access system user `_ was deleted. :ivar acs_system_id: ID of the access system. @@ -3541,7 +3541,7 @@ def from_dict(cls, d: Any): @dataclass class AcsEncoderAddedEvent: - """An `access system encoder `_ was added. + """An `access system encoder `_ was added. :ivar acs_encoder_id: ID of the affected encoder. @@ -3588,7 +3588,7 @@ def from_dict(cls, d: Any): @dataclass class AcsEncoderRemovedEvent: - """An `access system encoder `_ was removed. + """An `access system encoder `_ was removed. :ivar acs_encoder_id: ID of the affected encoder. @@ -3682,7 +3682,7 @@ def from_dict(cls, d: Any): @dataclass class AcsEntranceAddedEvent: - """An `access system entrance `_ was added. + """An `access system entrance `_ was added. :ivar acs_entrance_id: ID of the affected entrance. @@ -3729,7 +3729,7 @@ def from_dict(cls, d: Any): @dataclass class AcsEntranceRemovedEvent: - """An `access system entrance `_ was removed. + """An `access system entrance `_ was removed. :ivar acs_entrance_id: ID of the affected entrance. @@ -4964,7 +4964,7 @@ def from_dict(cls, d: Any): @dataclass class DeviceConvertedToUnmanagedEvent: - """A managed device was successfully converted to an `unmanaged device `_. + """A managed device was successfully converted to an `unmanaged device `_. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -5021,7 +5021,7 @@ def from_dict(cls, d: Any): @dataclass class DeviceUnmanagedConvertedToManagedEvent: - """An `unmanaged device `_ was successfully converted to a managed device. + """An `unmanaged device `_ was successfully converted to a managed device. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -5078,7 +5078,7 @@ def from_dict(cls, d: Any): @dataclass class DeviceUnmanagedConnectedEvent: - """The status of an `unmanaged device `_ changed from offline to online. That is, the ``device.properties.online`` property changed from ``false`` to ``true``. + """The status of an `unmanaged device `_ changed from offline to online. That is, the ``device.properties.online`` property changed from ``false`` to ``true``. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -5316,7 +5316,7 @@ def from_dict(cls, d: Any): @dataclass class DeviceUnmanagedDisconnectedEvent: - """The status of an `unmanaged device `_ changed from online to offline. That is, the ``device.properties.online`` property changed from ``true`` to ``false``. + """The status of an `unmanaged device `_ changed from online to offline. That is, the ``device.properties.online`` property changed from ``true`` to ``false``. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -5922,7 +5922,7 @@ def from_dict(cls, d: Any): @dataclass class DeviceSaltoPrivacyModeActivatedEvent: - """A `Salto device `_ activated privacy mode. + """A `Salto device `_ activated privacy mode. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -5979,7 +5979,7 @@ def from_dict(cls, d: Any): @dataclass class DeviceSaltoPrivacyModeDeactivatedEvent: - """A `Salto device `_ deactivated privacy mode. + """A `Salto device `_ deactivated privacy mode. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -6732,7 +6732,7 @@ def from_dict(cls, d: Any): @dataclass class NoiseSensorNoiseThresholdTriggeredEvent: - """Extended periods of noise or noise exceeding a `threshold `_ were detected. + """Extended periods of noise or noise exceeding a `threshold `_ were detected. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -6813,7 +6813,7 @@ def from_dict(cls, d: Any): @dataclass class LockLockedEvent: - """A `lock `_ was locked. + """A `lock `_ was locked. :ivar access_code_id: ID of the access code that was used to lock the device. @@ -6866,7 +6866,9 @@ class LockLockedEvent: event_type: Literal["lock.locked"] is_via_bluetooth: Optional[bool] is_via_nfc: Optional[bool] - method: Literal["keycode", "manual", "automatic", "unknown", "remote", "card"] + method: Literal[ + "keycode", "manual", "automatic", "unknown", "remote", "card", "mobile_key" + ] occurred_at: str workspace_id: str @@ -6898,7 +6900,7 @@ def from_dict(cls, d: Any): @dataclass class LockUnlockedEvent: - """A `lock `_ was unlocked. + """A `lock `_ was unlocked. :ivar access_code_id: ID of the access code that was used to unlock the affected device. @@ -6930,7 +6932,7 @@ class LockUnlockedEvent: :ivar is_via_nfc: Whether the unlock action was performed by an NFC credential tap (such as an Apple Home Key or an NFC key fob) presented to the lock, rather than a direct physical interaction or a Seam-initiated remote action. - :ivar method: Method by which the lock was unlocked. ``keycode``: an `access code `_ was used (see ``access_code_id``). ``manual``: a physical action such as a thumbturn or handle press. ``remote``: a remote action via an app, Bluetooth, or the Seam API (see ``action_attempt_id`` if Seam-initiated; see ``is_via_bluetooth`` or ``is_via_nfc`` for the transport). ``automatic``: triggered automatically, for example by a time-based schedule. ``unknown``: could not be determined. + :ivar method: Method by which the lock was unlocked. ``keycode``: an `access code `_ was used (see ``access_code_id``). ``manual``: a physical action such as a thumbturn or handle press. ``remote``: a remote action via an app, Bluetooth, or the Seam API (see ``action_attempt_id`` if Seam-initiated; see ``is_via_bluetooth`` or ``is_via_nfc`` for the transport). ``automatic``: triggered automatically, for example by a time-based schedule. ``unknown``: could not be determined. :ivar occurred_at: Date and time at which the event occurred. @@ -6951,7 +6953,9 @@ class LockUnlockedEvent: event_type: Literal["lock.unlocked"] is_via_bluetooth: Optional[bool] is_via_nfc: Optional[bool] - method: Literal["keycode", "manual", "automatic", "unknown", "remote", "card"] + method: Literal[ + "keycode", "manual", "automatic", "unknown", "remote", "card", "mobile_key" + ] occurred_at: str workspace_id: str @@ -6983,7 +6987,7 @@ def from_dict(cls, d: Any): @dataclass class LockAccessDeniedEvent: - """The `lock `_ denied access to a user after one or more consecutive invalid attempts to unlock the device. + """The `lock `_ denied access to a user after one or more consecutive invalid attempts to unlock the device. :ivar access_code_id: ID of the access code that was used in the unlock attempts. @@ -7078,7 +7082,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatClimatePresetActivatedEvent: - """A thermostat `climate preset `_ was activated. + """A thermostat `climate preset `_ was activated. :ivar climate_preset_key: Key of the climate preset that was activated. @@ -7147,15 +7151,15 @@ def from_dict(cls, d: Any): @dataclass class ThermostatManuallyAdjustedEvent: - """A `thermostat `_ was adjusted manually. + """A `thermostat `_ was adjusted manually. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. :ivar connected_account_id: ID of the connected account associated with the event. - :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :ivar cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :ivar cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :ivar created_at: Date and time at which the event was created. @@ -7171,13 +7175,13 @@ class ThermostatManuallyAdjustedEvent: :ivar event_type: - :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :ivar fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :ivar heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :ivar heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :ivar hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. :ivar method: Method used to adjust the affected thermostat manually. ``seam`` indicates that the Seam API, Seam CLI, or Seam Console was used to adjust the thermostat. @@ -7232,7 +7236,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatTemperatureThresholdExceededEvent: - """A `thermostat's `_ temperature reading exceeded the set `threshold `_. + """A `thermostat's `_ temperature reading exceeded the set `threshold `_. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -7313,7 +7317,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatTemperatureThresholdNoLongerExceededEvent: - """A `thermostat's `_ temperature reading no longer exceeds the set `threshold `_. + """A `thermostat's `_ temperature reading no longer exceeds the set `threshold `_. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -7394,7 +7398,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatTemperatureReachedSetPointEvent: - """A `thermostat's `_ temperature reading is within 1 °C of the configured cooling or heating `set point `_. + """A `thermostat's `_ temperature reading is within 1 °C of the configured cooling or heating `set point `_. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -7469,7 +7473,7 @@ def from_dict(cls, d: Any): @dataclass class ThermostatTemperatureChangedEvent: - """A `thermostat's `_ reported temperature changed by at least 1 °C. + """A `thermostat's `_ reported temperature changed by at least 1 °C. :ivar connected_account_custom_metadata: Custom metadata of the connected account, present when connected_account_id is provided. @@ -7619,6 +7623,8 @@ class CameraActivatedEvent: :ivar image_url: URL to a thumbnail image captured at the time of activation. + :ivar media_ids: IDs of the media, such as a video clip and a thumbnail image, captured for this activation. Use ``/media/get`` to retrieve each one. + :ivar motion_sub_type: Sub-type of motion detected, if available. :ivar occurred_at: Date and time at which the event occurred. @@ -7638,6 +7644,7 @@ class CameraActivatedEvent: event_id: str event_type: Literal["camera.activated"] image_url: Optional[str] + media_ids: Optional[List[str]] motion_sub_type: Optional[Literal["human", "vehicle", "package", "other"]] occurred_at: str video_url: Optional[str] @@ -7659,6 +7666,7 @@ def from_dict(cls, d: Any): event_id=d.get("event_id", None), event_type=d.get("event_type", None), image_url=d.get("image_url", None), + media_ids=d.get("media_ids", None), motion_sub_type=d.get("motion_sub_type", None), occurred_at=d.get("occurred_at", None), video_url=d.get("video_url", None), @@ -7690,6 +7698,8 @@ class DeviceDoorbellRangEvent: :ivar image_url: URL to a thumbnail image captured at the time the doorbell was pressed. + :ivar media_ids: IDs of the media, such as a video clip and a thumbnail image, captured when the doorbell was pressed. Use ``/media/get`` to retrieve each one. + :ivar occurred_at: Date and time at which the event occurred. :ivar video_url: URL to a short video clip captured at the time the doorbell was pressed. @@ -7706,6 +7716,7 @@ class DeviceDoorbellRangEvent: event_id: str event_type: Literal["device.doorbell_rang"] image_url: Optional[str] + media_ids: Optional[List[str]] occurred_at: str video_url: Optional[str] workspace_id: str @@ -7725,6 +7736,7 @@ def from_dict(cls, d: Any): event_id=d.get("event_id", None), event_type=d.get("event_type", None), image_url=d.get("image_url", None), + media_ids=d.get("media_ids", None), occurred_at=d.get("occurred_at", None), video_url=d.get("video_url", None), workspace_id=d.get("workspace_id", None), diff --git a/seam/resources/thermostat_daily_program.py b/seam/resources/thermostat_daily_program.py index 9fbcc162..8b42f08b 100644 --- a/seam/resources/thermostat_daily_program.py +++ b/seam/resources/thermostat_daily_program.py @@ -25,7 +25,7 @@ class ThermostatDailyProgram: class Periods(ResourceMapping): """Array of thermostat daily program periods. - :ivar climate_preset_key: Key of the `climate preset `_ to activate at the ``starts_at_time``. + :ivar climate_preset_key: Key of the `climate preset `_ to activate at the ``starts_at_time``. :ivar starts_at_time: Time at which the thermostat daily program period starts, in `ISO 8601 `_ format. """ diff --git a/seam/resources/thermostat_schedule.py b/seam/resources/thermostat_schedule.py index acd574a0..cf4a54ec 100644 --- a/seam/resources/thermostat_schedule.py +++ b/seam/resources/thermostat_schedule.py @@ -6,33 +6,33 @@ @dataclass class ThermostatSchedule: - """Represents a `thermostat schedule `_ that activates a configured `climate preset `_ on a `thermostat `_ at a specified starting time and deactivates the climate preset at a specified ending time. + """Represents a `thermostat schedule `_ that activates a configured `climate preset `_ on a `thermostat `_ at a specified starting time and deactivates the climate preset at a specified ending time. - :ivar climate_preset_key: Key of the `climate preset `_ to use for the `thermostat schedule `_. + :ivar climate_preset_key: Key of the `climate preset `_ to use for the `thermostat schedule `_. - :ivar created_at: Date and time at which the `thermostat schedule `_ was created. + :ivar created_at: Date and time at which the `thermostat schedule `_ was created. - :ivar device_id: ID of the desired `thermostat `_ device. + :ivar device_id: ID of the desired `thermostat `_ device. - :ivar ends_at: Date and time at which the `thermostat schedule `_ ends, in `ISO 8601 `_ format. + :ivar ends_at: Date and time at which the `thermostat schedule `_ ends, in `ISO 8601 `_ format. - :ivar errors: Errors associated with the `thermostat schedule `_. + :ivar errors: Errors associated with the `thermostat schedule `_. - :ivar is_override_allowed: Indicates whether a person at the thermostat can change the thermostat's settings after the `thermostat schedule `_ starts. + :ivar is_override_allowed: Indicates whether a person at the thermostat can change the thermostat's settings after the `thermostat schedule `_ starts. - :ivar max_override_period_minutes: Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled `climate preset `_. See also `Specifying Manual Override Permissions `_. + :ivar max_override_period_minutes: Number of minutes for which a person at the thermostat can change the thermostat's settings after the activation of the scheduled `climate preset `_. See also `Specifying Manual Override Permissions `_. - :ivar name: User-friendly name to identify the `thermostat schedule `_. + :ivar name: User-friendly name to identify the `thermostat schedule `_. - :ivar starts_at: Date and time at which the `thermostat schedule `_ starts, in `ISO 8601 `_ format. + :ivar starts_at: Date and time at which the `thermostat schedule `_ starts, in `ISO 8601 `_ format. - :ivar thermostat_schedule_id: ID of the `thermostat schedule `_. + :ivar thermostat_schedule_id: ID of the `thermostat schedule `_. :ivar workspace_id: ID of the workspace that contains the thermostat schedule.""" @dataclass class Errors(ResourceMapping): - """Errors associated with the `thermostat schedule `_. + """Errors associated with the `thermostat schedule `_. :ivar created_at: Date and time at which Seam created the error. diff --git a/seam/resources/unmanaged_access_code.py b/seam/resources/unmanaged_access_code.py index bf88e62f..84fcc942 100644 --- a/seam/resources/unmanaged_access_code.py +++ b/seam/resources/unmanaged_access_code.py @@ -13,7 +13,7 @@ def _from_discriminated_dict( @dataclass class UnmanagedAccessCode: - """Represents an `unmanaged smart lock access code `_. + """Represents an `unmanaged smart lock access code `_. An access code is a code used for a keypad or pinpad device. Unlike physical keys, which can easily be lost or duplicated, PIN codes can be customized, tracked, and altered on the fly. @@ -23,7 +23,7 @@ class UnmanagedAccessCode: Not all providers support unmanaged access codes. The following providers do not support unmanaged access codes: - - `Kwikset `_ + - `Kwikset `_ :ivar access_code_id: Unique identifier for the access code. @@ -37,11 +37,13 @@ class UnmanagedAccessCode: :ivar device_id: Unique identifier for the device associated with the access code. + :ivar display_status: Human-readable label for the code's state: ``Active`` or ``Not active``, based on whether the code is set on the device. For display only. The wording is not stable and is not an enumeration — never compare against or branch on it. + :ivar dormakaba_oracode_metadata: Metadata for a dormakaba Oracode unmanaged access code. Only present for unmanaged access codes from dormakaba Oracode devices. :ivar ends_at: Date and time after which the time-bound access code becomes inactive. - :ivar errors: Errors associated with the `access code `_. + :ivar errors: Errors associated with the `access code `_. :ivar is_managed: Indicates that Seam does not manage the access code. @@ -49,11 +51,11 @@ class UnmanagedAccessCode: :ivar starts_at: Date and time at which the time-bound access code becomes active. - :ivar status: Current status of the access code within the operational lifecycle. ``set`` indicates that the code is active and operational. ``unset`` indicates that the code exists on the provider but is not usable on the device. + :ivar status: Deprecated: Use ``display_status`` to show a person the code's state. Current status of the access code within the operational lifecycle. ``set`` indicates that the code is active and operational. ``unset`` indicates that the code exists on the provider but is not usable on the device. :ivar type: Type of the access code. ``ongoing`` access codes are active continuously until deactivated manually. ``time_bound`` access codes have a specific duration. - :ivar warnings: Warnings associated with the `access code `_. + :ivar warnings: Warnings associated with the `access code `_. :ivar workspace_id: Unique identifier for the Seam workspace associated with the access code. """ @@ -413,8 +415,8 @@ def from_dict(cls, d: Any): ) @dataclass - class FailedToExpireError(ResourceMapping): - """This access code is still active on the device even though its ``ends_at`` has passed, so the recipient may still be able to unlock the device after their access window ended. Seam is attempting to remove it, and this error clears automatically once the access code is no longer active. + class FailedToDeleteError(ResourceMapping): + """This access code is still active on the device even though its ``ends_at`` has passed, so the recipient may still be able to unlock the device after their access window ended. Seam is attempting to delete it, and this error clears automatically once the access code is no longer active. :ivar created_at: Date and time at which Seam created the error. @@ -426,7 +428,7 @@ class FailedToExpireError(ResourceMapping): """ created_at: Optional[str] - error_code: Literal["failed_to_expire"] + error_code: Literal["failed_to_delete"] is_access_code_error: Literal[True] message: str @@ -447,7 +449,7 @@ class AccountDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -478,7 +480,7 @@ class SaltoKsSubscriptionLimitExceededError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -503,13 +505,13 @@ def from_dict(cls, d: Any): @dataclass class InsufficientPermissionsError(ResourceMapping): - """Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + """Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -540,7 +542,7 @@ class DormakabaSitesDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -673,7 +675,7 @@ def from_dict(cls, d: Any): @dataclass class EmptyBackupAccessCodePoolError(ResourceMapping): - """Indicates that the `backup access code pool `_ is empty. + """Indicates that the `backup access code pool `_ is empty. :ivar created_at: Date and time at which Seam created the error. @@ -808,13 +810,13 @@ def from_dict(cls, d: Any): @dataclass class BridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -1157,7 +1159,7 @@ def from_dict(cls, d: Any): CodeConstraintsViolatedError, FailedToIssueError, FailedToUpdateError, - FailedToExpireError, + FailedToDeleteError, AccountDisconnectedError, SaltoKsSubscriptionLimitExceededError, InsufficientPermissionsError, @@ -1184,7 +1186,7 @@ def from_dict(cls, d: Any): "code_constraints_violated": CodeConstraintsViolatedError, "failed_to_issue": FailedToIssueError, "failed_to_update": FailedToUpdateError, - "failed_to_expire": FailedToExpireError, + "failed_to_delete": FailedToDeleteError, "account_disconnected": AccountDisconnectedError, "salto_ks_subscription_limit_exceeded": SaltoKsSubscriptionLimitExceededError, "insufficient_permissions": InsufficientPermissionsError, @@ -1236,6 +1238,7 @@ def from_dict(cls, d: Any): code: Optional[str] created_at: str device_id: str + display_status: str dormakaba_oracode_metadata: Optional[DormakabaOracodeMetadata] ends_at: Optional[str] errors: List[Errors] @@ -1258,6 +1261,7 @@ def from_dict(cls, d: Any): code=d.get("code", None), created_at=d.get("created_at", None), device_id=d.get("device_id", None), + display_status=d.get("display_status", None), dormakaba_oracode_metadata=( cls.DormakabaOracodeMetadata.from_dict( d.get("dormakaba_oracode_metadata") diff --git a/seam/resources/unmanaged_access_grant.py b/seam/resources/unmanaged_access_grant.py index 6dfb161c..52fb3d68 100644 --- a/seam/resources/unmanaged_access_grant.py +++ b/seam/resources/unmanaged_access_grant.py @@ -25,7 +25,7 @@ class UnmanagedAccessGrant: :ivar ends_at: Date and time at which the Access Grant ends. - :ivar errors: Errors associated with the `access grant `_. + :ivar errors: Errors associated with the `access grant `_. :ivar location_ids: Deprecated: Use ``space_ids``. @@ -43,7 +43,7 @@ class UnmanagedAccessGrant: :ivar user_identity_id: ID of user identity to which the Access Grant gives access. - :ivar warnings: Warnings associated with the `access grant `_. + :ivar warnings: Warnings associated with the `access grant `_. :ivar workspace_id: ID of the Seam workspace associated with the Access Grant.""" @@ -251,7 +251,7 @@ def from_dict(cls, d: Any): @dataclass class BeingDeletedWarning(ResourceMapping): - """Indicates that the `access grant `_ is being deleted. + """Indicates that the `access grant `_ is being deleted. :ivar created_at: Date and time at which Seam created the warning. @@ -349,7 +349,7 @@ def from_dict(cls, d: Any): @dataclass class UpdatingAccessTimesWarning(ResourceMapping): - """Indicates that the access times for this `access grant `_ are being updated. + """Indicates that the access times for this `access grant `_ are being updated. :ivar access_method_ids: IDs of the access methods being updated. diff --git a/seam/resources/unmanaged_access_method.py b/seam/resources/unmanaged_access_method.py index a05e28f4..fdc0d18a 100644 --- a/seam/resources/unmanaged_access_method.py +++ b/seam/resources/unmanaged_access_method.py @@ -25,7 +25,7 @@ class UnmanagedAccessMethod: :ivar display_status: Human-readable sentence describing where the access method sits in its relationship with the device or access system, for example ``Awaiting encoding``. For display only. The wording is not stable and is not an enumeration — it may change at any time, so never compare against or branch on it. To make decisions, read ``is_issued``, ``errors``, and ``pending_mutations``. - :ivar errors: Errors associated with the `access method `_. + :ivar errors: Errors associated with the `access method `_. :ivar is_assignment_required: Indicates whether an existing card credential must be assigned to this access method before it can be issued. Only applies to card-mode access methods on systems that support credential assignment. @@ -41,15 +41,15 @@ class UnmanagedAccessMethod: :ivar mode: Access method mode. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. - :ivar pending_mutations: Pending mutations for the `access method `_. Indicates operations that are in progress. + :ivar pending_mutations: Pending mutations for the `access method `_. Indicates operations that are in progress. - :ivar warnings: Warnings associated with the `access method `_. + :ivar warnings: Warnings associated with the `access method `_. :ivar workspace_id: ID of the Seam workspace associated with the access method.""" @dataclass class FailedToIssueError(ResourceMapping): - """Indicates that Seam was unable to issue this `access method `_ before its access grant started, so the recipient may be unable to access the space. This usually points to a problem that needs attention, such as an offline or disconnected device. Seam keeps retrying, and this error clears automatically if the access method is eventually issued. + """Indicates that Seam was unable to issue this `access method `_ before its access grant started, so the recipient may be unable to access the space. This usually points to a problem that needs attention, such as an offline or disconnected device. Seam keeps retrying, and this error clears automatically if the access method is eventually issued. :ivar created_at: Date and time at which Seam created the error. @@ -266,7 +266,7 @@ def from_dict(cls, d: Any): @dataclass class BeingDeletedWarning(ResourceMapping): - """Indicates that the `access method `_ is being deleted. + """Indicates that the `access method `_ is being deleted. :ivar created_at: Date and time at which Seam created the warning. @@ -289,7 +289,7 @@ def from_dict(cls, d: Any): @dataclass class UpdatingAccessTimesWarning(ResourceMapping): - """Indicates that the access times for this `access method `_ are being updated. + """Indicates that the access times for this `access method `_ are being updated. :ivar created_at: Date and time at which Seam created the warning. @@ -339,7 +339,7 @@ def from_dict(cls, d: Any): @dataclass class DelayInIssuingWarning(ResourceMapping): - """Indicates that Seam has not yet issued this `access method `_, even though its access grant is about to begin, so access may not be ready when the recipient arrives. Seam is still attempting to issue it, and this warning clears automatically once issuance succeeds. + """Indicates that Seam has not yet issued this `access method `_, even though its access grant is about to begin, so access may not be ready when the recipient arrives. Seam is still attempting to issue it, and this warning clears automatically once issuance succeeds. :ivar created_at: Date and time at which Seam created the warning. @@ -360,6 +360,52 @@ def from_dict(cls, d: Any): warning_code=d.get("warning_code", None), ) + @dataclass + class UserIdentityMissingEmailAddressWarning(ResourceMapping): + """Indicates that the access system delivers this mobile key through an app invitation sent to the recipient's email address, but the `user identity `_ for this `access grant `_ has no email address, so the mobile key cannot be delivered. Set an email address on the user identity when you create the access grant. + + :ivar created_at: Date and time at which Seam created the warning. + + :ivar message: Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + :ivar warning_code: Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + """ + + created_at: str + message: str + warning_code: Literal["user_identity_missing_email_address"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + created_at=d.get("created_at", None), + message=d.get("message", None), + warning_code=d.get("warning_code", None), + ) + + @dataclass + class UserIdentityMissingPhoneNumberWarning(ResourceMapping): + """Indicates that the access system delivers this mobile key to the recipient's phone number, but the `user identity `_ for this `access grant `_ has no phone number, so the mobile key cannot be delivered. Set a phone number on the user identity when you create the access grant. + + :ivar created_at: Date and time at which Seam created the warning. + + :ivar message: Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + :ivar warning_code: Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + """ + + created_at: str + message: str + warning_code: Literal["user_identity_missing_phone_number"] + + @classmethod + def from_dict(cls, d: Any): + return cls( + created_at=d.get("created_at", None), + message=d.get("message", None), + warning_code=d.get("warning_code", None), + ) + Errors = Union[FailedToIssueError] _ErrorsVariants = { "failed_to_issue": FailedToIssueError, @@ -381,12 +427,16 @@ def from_dict(cls, d: Any): UpdatingAccessTimesWarning, PulledBackupAccessCodeWarning, DelayInIssuingWarning, + UserIdentityMissingEmailAddressWarning, + UserIdentityMissingPhoneNumberWarning, ] _WarningsVariants = { "being_deleted": BeingDeletedWarning, "updating_access_times": UpdatingAccessTimesWarning, "pulled_backup_access_code": PulledBackupAccessCodeWarning, "delay_in_issuing": DelayInIssuingWarning, + "user_identity_missing_email_address": UserIdentityMissingEmailAddressWarning, + "user_identity_missing_phone_number": UserIdentityMissingPhoneNumberWarning, } access_method_id: str diff --git a/seam/resources/unmanaged_device.py b/seam/resources/unmanaged_device.py index 4faf6621..f41933f9 100644 --- a/seam/resources/unmanaged_device.py +++ b/seam/resources/unmanaged_device.py @@ -13,7 +13,9 @@ def _from_discriminated_dict( @dataclass class UnmanagedDevice: - """Represents an `unmanaged device `_. An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + """Represents an `unmanaged device `_. An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + + :ivar can_activate_weekly_program: Indicates whether the thermostat can be returned to its weekly program, the schedule that is configured on the device itself, releasing any hold that Seam has set. :ivar can_configure_auto_lock: Indicates whether the lock supports configuring automatic locking. @@ -51,17 +53,19 @@ class UnmanagedDevice: :ivar can_simulate_removal: Indicates whether the device supports simulating removal in a sandbox. + :ivar can_stream_live_video: Indicates whether the camera supports streaming live video through a camera live view session. + :ivar can_turn_off_hvac: Indicates whether the thermostat can be turned off. :ivar can_unlock_with_code: Indicates whether the lock supports unlocking with an access code. - :ivar capabilities_supported: Collection of capabilities that the device supports when connected to Seam. Values are ``access_code``, which indicates that the device can manage and utilize digital PIN codes for secure access; ``lock``, which indicates that the device controls a door locking mechanism, enabling the remote opening and closing of doors and other entry points; ``noise_detection``, which indicates that the device supports monitoring and responding to ambient noise levels; ``thermostat``, which indicates that the device can regulate and adjust indoor temperatures; ``battery``, which indicates that the device can manage battery life and health; and ``phone``, which indicates that the device is a mobile device, such as a smartphone. **Important:** Superseded by `capability flags `_. + :ivar capabilities_supported: Collection of capabilities that the device supports when connected to Seam. Values are ``access_code``, which indicates that the device can manage and utilize digital PIN codes for secure access; ``lock``, which indicates that the device controls a door locking mechanism, enabling the remote opening and closing of doors and other entry points; ``noise_detection``, which indicates that the device supports monitoring and responding to ambient noise levels; ``thermostat``, which indicates that the device can regulate and adjust indoor temperatures; ``battery``, which indicates that the device can manage battery life and health; and ``phone``, which indicates that the device is a mobile device, such as a smartphone. **Important:** Superseded by `capability flags `_. :ivar connected_account_id: Unique identifier for the account associated with the device. :ivar created_at: Date and time at which the device object was created. - :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. + :ivar custom_metadata: Set of key:value pairs. Adding custom metadata to a resource, such as a `Connect Webview `_, `connected account `_, or `device `_, enables you to store custom information, like customer details or internal IDs from your application. Keys set to ``null`` or to an empty string are omitted. :ivar device_id: ID of the device. @@ -90,7 +94,7 @@ class AccountDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -121,7 +125,7 @@ class SaltoKsSubscriptionLimitExceededError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -146,13 +150,13 @@ def from_dict(cls, d: Any): @dataclass class InsufficientPermissionsError(ResourceMapping): - """Indicates that Seam's integration user does not have sufficient permissions on the provider's system to which this device belongs, so Seam cannot manage access codes or unlock the device. See the error message for specifics, then either reauthorize the connected account in Seam or grant the integration user the required permissions in the provider's system. + """Indicates that the provider's system to which this device belongs is not letting Seam act on it, so Seam cannot manage access codes or unlock the device. The error message says which of three causes applies. Seam's integration user may not have sufficient permissions on the provider's system, or may have been suspended there: grant the integration user the required permissions in the provider's system, or reauthorize the connected account in Seam. The provider account or site may not have a valid subscription with the provider: set up or renew that subscription with the provider. Or the provider may have rejected the credential Seam uses to operate the device's hub: contact Seam support to re-activate it. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -183,7 +187,7 @@ class DormakabaSitesDisconnectedError(ResourceMapping): :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. + :ivar is_connected_account_error: Indicates that the error is a `connected account `_ error. :ivar is_device_error: Indicates that the error is not a device error. @@ -316,7 +320,7 @@ def from_dict(cls, d: Any): @dataclass class EmptyBackupAccessCodePoolError(ResourceMapping): - """Indicates that the `backup access code pool `_ is empty. + """Indicates that the `backup access code pool `_ is empty. :ivar created_at: Date and time at which Seam created the error. @@ -451,13 +455,13 @@ def from_dict(cls, d: Any): @dataclass class BridgeDisconnectedError(ResourceMapping): - """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. + """Indicates that the Seam API cannot communicate with `Seam Bridge `_, for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also `Troubleshooting Your Access Control System `_. :ivar created_at: Date and time at which Seam created the error. :ivar error_code: Unique identifier of the type of error. Enables quick recognition and categorization of the issue. - :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. + :ivar is_bridge_error: Indicates whether the error is related to `Seam Bridge `_. :ivar is_connected_account_error: Indicates whether the error is related specifically to the connected account. @@ -1427,6 +1431,7 @@ def from_dict(cls, d: Any): "max_access_codes_reached": MaxAccessCodesReachedWarning, } + can_activate_weekly_program: Optional[bool] can_configure_auto_lock: Optional[bool] can_hvac_cool: Optional[bool] can_hvac_heat: Optional[bool] @@ -1445,6 +1450,7 @@ def from_dict(cls, d: Any): can_simulate_hub_disconnection: Optional[bool] can_simulate_paid_subscription: Optional[bool] can_simulate_removal: Optional[bool] + can_stream_live_video: Optional[bool] can_turn_off_hvac: Optional[bool] can_unlock_with_code: Optional[bool] capabilities_supported: List[ @@ -1500,6 +1506,9 @@ def from_dict(cls, d: Any): "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] display_name: str errors: List[Errors] @@ -1512,6 +1521,7 @@ def from_dict(cls, d: Any): @classmethod def from_dict(cls, d: Any): return cls( + can_activate_weekly_program=d.get("can_activate_weekly_program", None), 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), @@ -1544,6 +1554,7 @@ def from_dict(cls, d: Any): "can_simulate_paid_subscription", None ), can_simulate_removal=d.get("can_simulate_removal", None), + can_stream_live_video=d.get("can_stream_live_video", None), can_turn_off_hvac=d.get("can_turn_off_hvac", None), can_unlock_with_code=d.get("can_unlock_with_code", None), capabilities_supported=d.get("capabilities_supported", None), diff --git a/seam/resources/user_identity.py b/seam/resources/user_identity.py index 88641dd6..a2d8b0f0 100644 --- a/seam/resources/user_identity.py +++ b/seam/resources/user_identity.py @@ -13,7 +13,7 @@ def _from_discriminated_dict( @dataclass class UserIdentity: - """Represents a `user identity `_ associated with an application user account. + """Represents a `user identity `_ associated with an application user account. :ivar acs_user_ids: Array of access system user IDs associated with the user identity. diff --git a/seam/resources/webhook.py b/seam/resources/webhook.py index 663accd2..df6c25f7 100644 --- a/seam/resources/webhook.py +++ b/seam/resources/webhook.py @@ -6,13 +6,13 @@ @dataclass class Webhook: - """Represents a `webhook `_ that enables you to receive notifications of events. When you create a webhook, specify the endpoint URL at which you want to receive events and the set of event types that you want to receive. + """Represents a `webhook `_ that enables you to receive notifications of events. When you create a webhook, specify the endpoint URL at which you want to receive events and the set of event types that you want to receive. - :ivar event_types: Types of events that the `webhook `_ should receive. + :ivar event_types: Types of events that the `webhook `_ should receive. - :ivar secret: Secret associated with the `webhook `_. + :ivar secret: Secret associated with the `webhook `_. - :ivar url: URL for the `webhook `_. + :ivar url: URL for the `webhook `_. :ivar webhook_id: ID of the webhook.""" diff --git a/seam/resources/workspace.py b/seam/resources/workspace.py index 42478f86..c09f2079 100644 --- a/seam/resources/workspace.py +++ b/seam/resources/workspace.py @@ -6,25 +6,25 @@ @dataclass class Workspace: - """Represents a Seam `workspace `_. A workspace is a top-level entity that encompasses all other resources below it, such as devices, connected accounts, and Connect Webviews. Seam provides two types of workspaces. A `sandbox workspace `_ is a special type of workspace designed for testing code. Sandbox workspaces offer test device accounts and virtual devices that you can connect and control. This ability to work with virtual devices is quite handy because it removes the need to own physical devices from multiple brands. To connect real devices and systems to Seam, use a `production workspace `_. + """Represents a Seam `workspace `_. A workspace is a top-level entity that encompasses all other resources below it, such as devices, connected accounts, and Connect Webviews. Seam provides two types of workspaces. A `sandbox workspace `_ is a special type of workspace designed for testing code. Sandbox workspaces offer test device accounts and virtual devices that you can connect and control. This ability to work with virtual devices is quite handy because it removes the need to own physical devices from multiple brands. To connect real devices and systems to Seam, use a `production workspace `_. - :ivar company_name: Deprecated: Use ``connect_partner_name`` instead. Company name associated with the `workspace `_. + :ivar company_name: Deprecated: Use ``connect_partner_name`` instead. Company name associated with the `workspace `_. - :ivar connect_partner_name: Seam Connect partner name associated with the `workspace `_. + :ivar connect_partner_name: Seam Connect partner name associated with the `workspace `_. :ivar connect_webview_customization: :ivar is_publishable_key_auth_enabled: Indicates whether publishable key authentication is enabled for this workspace. - :ivar is_sandbox: Indicates whether the workspace is a `sandbox workspace `_. + :ivar is_sandbox: Indicates whether the workspace is a `sandbox workspace `_. - :ivar is_suspended: Indicates whether the `sandbox workspace `_ is suspended. Seam suspends sandbox workspaces that have not been accessed in 14 days. + :ivar is_suspended: Indicates whether the `sandbox workspace `_ is suspended. Seam suspends sandbox workspaces that have not been accessed in 14 days. - :ivar name: Name of the `workspace `_. + :ivar name: Name of the `workspace `_. :ivar organization_id: ID of the organization to which the workspace belongs, or ``null`` if the workspace is not assigned to an organization. - :ivar publishable_key: Publishable key for the `workspace `_. This key is used to identify the workspace in client-side applications. + :ivar publishable_key: Publishable key for the `workspace `_. This key is used to identify the workspace in client-side applications. :ivar workspace_id: ID of the workspace.""" @@ -32,15 +32,15 @@ class Workspace: class ConnectWebviewCustomization(ResourceMapping): """ - :ivar inviter_logo_url: URL of the inviter logo for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :ivar inviter_logo_url: URL of the inviter logo for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :ivar logo_shape: Logo shape for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :ivar logo_shape: Logo shape for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :ivar primary_button_color: Primary button color for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :ivar primary_button_color: Primary button color for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :ivar primary_button_text_color: Primary button text color for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :ivar primary_button_text_color: Primary button text color for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :ivar success_message: Success message for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :ivar success_message: Success message for `Connect Webviews `_ in the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. """ inviter_logo_url: Optional[str] diff --git a/seam/routes/__init__.py b/seam/routes/__init__.py index 2ad703bb..324ba374 100644 --- a/seam/routes/__init__.py +++ b/seam/routes/__init__.py @@ -27,6 +27,7 @@ AbstractAsyncActionAttempts, AsyncActionAttempts, ) +from .cameras import AbstractCameras, Cameras, AbstractAsyncCameras, AsyncCameras from .client_sessions import ( AbstractClientSessions, ClientSessions, @@ -60,6 +61,7 @@ AsyncInstantKeys, ) from .locks import AbstractLocks, Locks, AbstractAsyncLocks, AsyncLocks +from .media import AbstractMedia, Media, AbstractAsyncMedia, AsyncMedia from .noise_sensors import ( AbstractNoiseSensors, NoiseSensors, @@ -96,6 +98,7 @@ class AbstractRoutes(abc.ABC): access_methods: AbstractAccessMethods acs: AbstractAcs action_attempts: AbstractActionAttempts + cameras: AbstractCameras client_sessions: AbstractClientSessions connect_webviews: AbstractConnectWebviews connected_accounts: AbstractConnectedAccounts @@ -104,6 +107,7 @@ class AbstractRoutes(abc.ABC): events: AbstractEvents instant_keys: AbstractInstantKeys locks: AbstractLocks + media: AbstractMedia noise_sensors: AbstractNoiseSensors phones: AbstractPhones spaces: AbstractSpaces @@ -120,6 +124,7 @@ class AbstractAsyncRoutes(abc.ABC): access_methods: AbstractAsyncAccessMethods acs: AbstractAsyncAcs action_attempts: AbstractAsyncActionAttempts + cameras: AbstractAsyncCameras client_sessions: AbstractAsyncClientSessions connect_webviews: AbstractAsyncConnectWebviews connected_accounts: AbstractAsyncConnectedAccounts @@ -128,6 +133,7 @@ class AbstractAsyncRoutes(abc.ABC): events: AbstractAsyncEvents instant_keys: AbstractAsyncInstantKeys locks: AbstractAsyncLocks + media: AbstractAsyncMedia noise_sensors: AbstractAsyncNoiseSensors phones: AbstractAsyncPhones spaces: AbstractAsyncSpaces @@ -144,6 +150,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.access_methods = AccessMethods(client=client, defaults=defaults) self.acs = Acs(client=client, defaults=defaults) self.action_attempts = ActionAttempts(client=client, defaults=defaults) + self.cameras = Cameras(client=client, defaults=defaults) self.client_sessions = ClientSessions(client=client, defaults=defaults) self.connect_webviews = ConnectWebviews(client=client, defaults=defaults) self.connected_accounts = ConnectedAccounts(client=client, defaults=defaults) @@ -152,6 +159,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): self.events = Events(client=client, defaults=defaults) self.instant_keys = InstantKeys(client=client, defaults=defaults) self.locks = Locks(client=client, defaults=defaults) + self.media = Media(client=client, defaults=defaults) self.noise_sensors = NoiseSensors(client=client, defaults=defaults) self.phones = Phones(client=client, defaults=defaults) self.spaces = Spaces(client=client, defaults=defaults) @@ -168,6 +176,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): self.access_methods = AsyncAccessMethods(client=client, defaults=defaults) self.acs = AsyncAcs(client=client, defaults=defaults) self.action_attempts = AsyncActionAttempts(client=client, defaults=defaults) + self.cameras = AsyncCameras(client=client, defaults=defaults) self.client_sessions = AsyncClientSessions(client=client, defaults=defaults) self.connect_webviews = AsyncConnectWebviews(client=client, defaults=defaults) self.connected_accounts = AsyncConnectedAccounts( @@ -178,6 +187,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): self.events = AsyncEvents(client=client, defaults=defaults) self.instant_keys = AsyncInstantKeys(client=client, defaults=defaults) self.locks = AsyncLocks(client=client, defaults=defaults) + self.media = AsyncMedia(client=client, defaults=defaults) self.noise_sensors = AsyncNoiseSensors(client=client, defaults=defaults) self.phones = AsyncPhones(client=client, defaults=defaults) self.spaces = AsyncSpaces(client=client, defaults=defaults) diff --git a/seam/routes/access_codes.py b/seam/routes/access_codes.py index 499db93f..a63d8f57 100644 --- a/seam/routes/access_codes.py +++ b/seam/routes/access_codes.py @@ -54,27 +54,27 @@ def create( use_backup_access_code_pool: Optional[bool] = None, use_offline_access_code: Optional[bool] = None, ) -> AccessCode: - """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. + """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. :param device_id: ID of the device for which you want to create the new access code. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: :param code: Code to be used for access. - :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. + :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. - :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. + :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. - :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. + :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. - :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. + :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -84,13 +84,13 @@ def create( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. Only applicable if you do not specify a ``code``. If the affected device does not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :param use_offline_access_code: Deprecated: Use ``is_offline_access_code`` instead. @@ -116,7 +116,7 @@ def create_multiple( starts_at: Optional[str] = None, use_backup_access_code_pool: Optional[bool] = None, ) -> List[AccessCode]: - """Creates new `access codes `_ that share a common code across multiple devices. + """Creates new `access codes `_ that share a common code across multiple devices. Users with more than one door lock in a property may want to create groups of linked access codes, all of which have the same code (PIN). For example, a short-term rental host may want to provide guests the same PIN for both a front door lock and a back door lock. @@ -124,13 +124,13 @@ def create_multiple( If you want to change these access codes that are not linked by a ``common_code_key``, you cannot use ``/access_codes/update_multiple``. However, you can update each of these access codes individually, using ``/access_codes/update``. - See also `Creating and Updating Multiple Linked Access Codes `_. + See also `Creating and Updating Multiple Linked Access Codes `_. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. :param device_ids: IDs of the devices for which you want to create the new access codes. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -140,7 +140,7 @@ def create_multiple( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -150,20 +150,20 @@ def create_multiple( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. If the affected devices do not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod def delete(self, *, access_code_id: str, device_id: Optional[str] = None) -> None: - """Deletes an `access code `_. + """Deletes an `access code `_. :param access_code_id: ID of the access code that you want to delete. @@ -173,7 +173,7 @@ def delete(self, *, access_code_id: str, device_id: Optional[str] = None) -> Non @abc.abstractmethod def generate_code(self, *, device_id: str) -> AccessCode: - """Generates a code for an `access code `_, given a device ID. + """Generates a code for an `access code `_, given a device ID. :param device_id: ID of the device for which you want to generate a code. @@ -188,7 +188,7 @@ def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> AccessCode: - """Returns a specified `access code `_. + """Returns a specified `access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -218,7 +218,7 @@ def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[AccessCode]: - """Returns a list of all `access codes `_. + """Returns a list of all `access codes `_. Specify ``device_id``, ``access_code_ids``, ``access_method_id``, ``access_grant_id``, or ``access_grant_key``. @@ -249,7 +249,7 @@ def list( @abc.abstractmethod def pull_backup_access_code(self, *, access_code_id: str) -> AccessCode: - """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. + """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. A backup access code pool is a collection of pre-programmed access codes stored on a device, ready for use. These codes are programmed in addition to the regular access codes on Seam, serving as a safety net for any issues with the primary codes. If there's ever a complication with a primary access code—be it due to intermittent connectivity, manual removal from a device, or provider outages—a backup code can be retrieved. Its end time can then be adjusted to align with the original code, facilitating seamless and uninterrupted access. @@ -303,13 +303,13 @@ def update( starts_at: Optional[str] = None, type: Optional[Literal["ongoing", "time_bound"]] = None, ) -> None: - """Updates a specified active or upcoming `access code `_. + """Updates a specified active or upcoming `access code `_. - See also `Modifying Access Codes `_. + See also `Modifying Access Codes `_. :param access_code_id: ID of the access code that you want to update. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -319,7 +319,7 @@ def update( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param is_managed: Indicates whether the access code is managed through Seam. Note that to convert an unmanaged access code into a managed access code, use ``/access_codes/unmanaged/convert_to_managed``. @@ -333,7 +333,7 @@ def update( :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. + :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. """ raise NotImplementedError() @@ -346,11 +346,11 @@ def update_multiple( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates `access codes `_ that share a common code across multiple devices. + """Updates `access codes `_ that share a common code across multiple devices. Specify the ``common_code_key`` to identify the set of access codes that you want to update. - See also `Update Linked Access Codes `_. + See also `Update Linked Access Codes `_. :param common_code_key: Key that links the group of access codes, assigned on creation by ``/access_codes/create_multiple``. @@ -402,27 +402,27 @@ async def create( use_backup_access_code_pool: Optional[bool] = None, use_offline_access_code: Optional[bool] = None, ) -> AccessCode: - """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. + """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. :param device_id: ID of the device for which you want to create the new access code. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: :param code: Code to be used for access. - :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. + :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. - :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. + :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. - :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. + :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. - :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. + :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -432,13 +432,13 @@ async def create( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. Only applicable if you do not specify a ``code``. If the affected device does not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :param use_offline_access_code: Deprecated: Use ``is_offline_access_code`` instead. @@ -464,7 +464,7 @@ async def create_multiple( starts_at: Optional[str] = None, use_backup_access_code_pool: Optional[bool] = None, ) -> List[AccessCode]: - """Creates new `access codes `_ that share a common code across multiple devices. + """Creates new `access codes `_ that share a common code across multiple devices. Users with more than one door lock in a property may want to create groups of linked access codes, all of which have the same code (PIN). For example, a short-term rental host may want to provide guests the same PIN for both a front door lock and a back door lock. @@ -472,13 +472,13 @@ async def create_multiple( If you want to change these access codes that are not linked by a ``common_code_key``, you cannot use ``/access_codes/update_multiple``. However, you can update each of these access codes individually, using ``/access_codes/update``. - See also `Creating and Updating Multiple Linked Access Codes `_. + See also `Creating and Updating Multiple Linked Access Codes `_. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. :param device_ids: IDs of the devices for which you want to create the new access codes. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -488,7 +488,7 @@ async def create_multiple( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -498,13 +498,13 @@ async def create_multiple( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. If the affected devices do not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :returns: OK""" raise NotImplementedError() @@ -513,7 +513,7 @@ async def create_multiple( async def delete( self, *, access_code_id: str, device_id: Optional[str] = None ) -> None: - """Deletes an `access code `_. + """Deletes an `access code `_. :param access_code_id: ID of the access code that you want to delete. @@ -523,7 +523,7 @@ async def delete( @abc.abstractmethod async def generate_code(self, *, device_id: str) -> AccessCode: - """Generates a code for an `access code `_, given a device ID. + """Generates a code for an `access code `_, given a device ID. :param device_id: ID of the device for which you want to generate a code. @@ -538,7 +538,7 @@ async def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> AccessCode: - """Returns a specified `access code `_. + """Returns a specified `access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -568,7 +568,7 @@ async def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[AccessCode]: - """Returns a list of all `access codes `_. + """Returns a list of all `access codes `_. Specify ``device_id``, ``access_code_ids``, ``access_method_id``, ``access_grant_id``, or ``access_grant_key``. @@ -599,7 +599,7 @@ async def list( @abc.abstractmethod async def pull_backup_access_code(self, *, access_code_id: str) -> AccessCode: - """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. + """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. A backup access code pool is a collection of pre-programmed access codes stored on a device, ready for use. These codes are programmed in addition to the regular access codes on Seam, serving as a safety net for any issues with the primary codes. If there's ever a complication with a primary access code—be it due to intermittent connectivity, manual removal from a device, or provider outages—a backup code can be retrieved. Its end time can then be adjusted to align with the original code, facilitating seamless and uninterrupted access. @@ -653,13 +653,13 @@ async def update( starts_at: Optional[str] = None, type: Optional[Literal["ongoing", "time_bound"]] = None, ) -> None: - """Updates a specified active or upcoming `access code `_. + """Updates a specified active or upcoming `access code `_. - See also `Modifying Access Codes `_. + See also `Modifying Access Codes `_. :param access_code_id: ID of the access code that you want to update. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -669,7 +669,7 @@ async def update( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param is_managed: Indicates whether the access code is managed through Seam. Note that to convert an unmanaged access code into a managed access code, use ``/access_codes/unmanaged/convert_to_managed``. @@ -683,7 +683,7 @@ async def update( :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. + :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. """ raise NotImplementedError() @@ -696,11 +696,11 @@ async def update_multiple( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates `access codes `_ that share a common code across multiple devices. + """Updates `access codes `_ that share a common code across multiple devices. Specify the ``common_code_key`` to identify the set of access codes that you want to update. - See also `Update Linked Access Codes `_. + See also `Update Linked Access Codes `_. :param common_code_key: Key that links the group of access codes, assigned on creation by ``/access_codes/create_multiple``. @@ -759,27 +759,27 @@ def create( use_backup_access_code_pool: Optional[bool] = None, use_offline_access_code: Optional[bool] = None, ) -> AccessCode: - """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. + """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. :param device_id: ID of the device for which you want to create the new access code. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: :param code: Code to be used for access. - :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. + :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. - :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. + :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. - :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. + :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. - :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. + :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -789,13 +789,13 @@ def create( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. Only applicable if you do not specify a ``code``. If the affected device does not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :param use_offline_access_code: Deprecated: Use ``is_offline_access_code`` instead. @@ -864,7 +864,7 @@ def create_multiple( starts_at: Optional[str] = None, use_backup_access_code_pool: Optional[bool] = None, ) -> List[AccessCode]: - """Creates new `access codes `_ that share a common code across multiple devices. + """Creates new `access codes `_ that share a common code across multiple devices. Users with more than one door lock in a property may want to create groups of linked access codes, all of which have the same code (PIN). For example, a short-term rental host may want to provide guests the same PIN for both a front door lock and a back door lock. @@ -872,13 +872,13 @@ def create_multiple( If you want to change these access codes that are not linked by a ``common_code_key``, you cannot use ``/access_codes/update_multiple``. However, you can update each of these access codes individually, using ``/access_codes/update``. - See also `Creating and Updating Multiple Linked Access Codes `_. + See also `Creating and Updating Multiple Linked Access Codes `_. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. :param device_ids: IDs of the devices for which you want to create the new access codes. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -888,7 +888,7 @@ def create_multiple( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -898,13 +898,13 @@ def create_multiple( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. If the affected devices do not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -953,7 +953,7 @@ def create_multiple( has_pagination=False, ) def delete(self, *, access_code_id: str, device_id: Optional[str] = None) -> None: - """Deletes an `access code `_. + """Deletes an `access code `_. :param access_code_id: ID of the access code that you want to delete. @@ -976,7 +976,7 @@ def delete(self, *, access_code_id: str, device_id: Optional[str] = None) -> Non has_pagination=False, ) def generate_code(self, *, device_id: str) -> AccessCode: - """Generates a code for an `access code `_, given a device ID. + """Generates a code for an `access code `_, given a device ID. :param device_id: ID of the device for which you want to generate a code. @@ -1008,7 +1008,7 @@ def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> AccessCode: - """Returns a specified `access code `_. + """Returns a specified `access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -1072,7 +1072,7 @@ def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[AccessCode]: - """Returns a list of all `access codes `_. + """Returns a list of all `access codes `_. Specify ``device_id``, ``access_code_ids``, ``access_method_id``, ``access_grant_id``, or ``access_grant_key``. @@ -1155,7 +1155,7 @@ def list( has_pagination=False, ) def pull_backup_access_code(self, *, access_code_id: str) -> AccessCode: - """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. + """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. A backup access code pool is a collection of pre-programmed access codes stored on a device, ready for use. These codes are programmed in addition to the regular access codes on Seam, serving as a safety net for any issues with the primary codes. If there's ever a complication with a primary access code—be it due to intermittent connectivity, manual removal from a device, or provider outages—a backup code can be retrieved. Its end time can then be adjusted to align with the original code, facilitating seamless and uninterrupted access. @@ -1241,13 +1241,13 @@ def update( starts_at: Optional[str] = None, type: Optional[Literal["ongoing", "time_bound"]] = None, ) -> None: - """Updates a specified active or upcoming `access code `_. + """Updates a specified active or upcoming `access code `_. - See also `Modifying Access Codes `_. + See also `Modifying Access Codes `_. :param access_code_id: ID of the access code that you want to update. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -1257,7 +1257,7 @@ def update( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param is_managed: Indicates whether the access code is managed through Seam. Note that to convert an unmanaged access code into a managed access code, use ``/access_codes/unmanaged/convert_to_managed``. @@ -1271,7 +1271,7 @@ def update( :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. + :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. """ json_payload: Dict[str, Any] = {} @@ -1317,11 +1317,11 @@ def update_multiple( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates `access codes `_ that share a common code across multiple devices. + """Updates `access codes `_ that share a common code across multiple devices. Specify the ``common_code_key`` to identify the set of access codes that you want to update. - See also `Update Linked Access Codes `_. + See also `Update Linked Access Codes `_. :param common_code_key: Key that links the group of access codes, assigned on creation by ``/access_codes/create_multiple``. @@ -1393,27 +1393,27 @@ async def create( use_backup_access_code_pool: Optional[bool] = None, use_offline_access_code: Optional[bool] = None, ) -> AccessCode: - """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. + """Creates a new `access code `_. For granting access, we recommend `Access Grants `_ instead: they work across both standalone smart locks and access control systems and manage the underlying codes for you. Use this low-level endpoint only when you need direct control over a code on a single device, such as setting a custom PIN value. :param device_id: ID of the device for which you want to create the new access code. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: :param code: Code to be used for access. - :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. + :param common_code_key: Key to identify access codes that should have the same code. Any two access codes with the same ``common_code_key`` are guaranteed to have the same ``code``. See also `Creating and Updating Multiple Linked Access Codes `_. :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. - :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. + :param is_offline_access_code: Indicates whether the access code is an `offline access code `_. - :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. + :param is_one_time_use: Indicates whether the `offline access code `_ is a single-use access code. - :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. + :param max_time_rounding: Maximum rounding adjustment. To create a daily-bound `offline access code `_ for devices that support this feature, set this parameter to ``1d``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -1423,13 +1423,13 @@ async def create( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. Only applicable if you do not specify a ``code``. If the affected device does not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :param use_offline_access_code: Deprecated: Use ``is_offline_access_code`` instead. @@ -1498,7 +1498,7 @@ async def create_multiple( starts_at: Optional[str] = None, use_backup_access_code_pool: Optional[bool] = None, ) -> List[AccessCode]: - """Creates new `access codes `_ that share a common code across multiple devices. + """Creates new `access codes `_ that share a common code across multiple devices. Users with more than one door lock in a property may want to create groups of linked access codes, all of which have the same code (PIN). For example, a short-term rental host may want to provide guests the same PIN for both a front door lock and a back door lock. @@ -1506,13 +1506,13 @@ async def create_multiple( If you want to change these access codes that are not linked by a ``common_code_key``, you cannot use ``/access_codes/update_multiple``. However, you can update each of these access codes individually, using ``/access_codes/update``. - See also `Creating and Updating Multiple Linked Access Codes `_. + See also `Creating and Updating Multiple Linked Access Codes `_. - For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. + For granting a person access to a space, `Access Grants `_ are the default and recommended approach and work across both standalone smart locks and access systems. Use the lower-level Access Codes API directly only when you specifically need to manage individual PIN codes. :param device_ids: IDs of the devices for which you want to create the new access codes. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -1522,7 +1522,7 @@ async def create_multiple( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param name: Name of the new access code. Enables administrators and users to identify the access code easily, especially when there are numerous access codes. @@ -1532,13 +1532,13 @@ async def create_multiple( To help your users identify codes set by Seam, Seam provides the name exactly as it appears on the lock provider's app or on the device as a separate property called ``appearance``. This is an object with a ``name`` property and, optionally, ``first_name`` and ``last_name`` properties (for providers that break down a name into components). - :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. + :param prefer_native_scheduling: Indicates whether `native scheduling `_ should be used for time-bound codes when supported by the provider. Default: ``true``. :param preferred_code_length: Preferred code length. If the affected devices do not support the preferred code length, Seam reverts to using the shortest supported code length. :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. + :param use_backup_access_code_pool: Indicates whether to use a `backup access code pool `_ provided by Seam. If ``true``, you can use ```/access_codes/pull_backup_access_code`` `_. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -1589,7 +1589,7 @@ async def create_multiple( async def delete( self, *, access_code_id: str, device_id: Optional[str] = None ) -> None: - """Deletes an `access code `_. + """Deletes an `access code `_. :param access_code_id: ID of the access code that you want to delete. @@ -1612,7 +1612,7 @@ async def delete( has_pagination=False, ) async def generate_code(self, *, device_id: str) -> AccessCode: - """Generates a code for an `access code `_, given a device ID. + """Generates a code for an `access code `_, given a device ID. :param device_id: ID of the device for which you want to generate a code. @@ -1644,7 +1644,7 @@ async def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> AccessCode: - """Returns a specified `access code `_. + """Returns a specified `access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -1708,7 +1708,7 @@ async def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[AccessCode]: - """Returns a list of all `access codes `_. + """Returns a list of all `access codes `_. Specify ``device_id``, ``access_code_ids``, ``access_method_id``, ``access_grant_id``, or ``access_grant_key``. @@ -1791,7 +1791,7 @@ async def list( has_pagination=False, ) async def pull_backup_access_code(self, *, access_code_id: str) -> AccessCode: - """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. + """Retrieves a backup access code for an `access code `_. See also `Managing Backup Access Codes `_. A backup access code pool is a collection of pre-programmed access codes stored on a device, ready for use. These codes are programmed in addition to the regular access codes on Seam, serving as a safety net for any issues with the primary codes. If there's ever a complication with a primary access code—be it due to intermittent connectivity, manual removal from a device, or provider outages—a backup code can be retrieved. Its end time can then be adjusted to align with the original code, facilitating seamless and uninterrupted access. @@ -1879,13 +1879,13 @@ async def update( starts_at: Optional[str] = None, type: Optional[Literal["ongoing", "time_bound"]] = None, ) -> None: - """Updates a specified active or upcoming `access code `_. + """Updates a specified active or upcoming `access code `_. - See also `Modifying Access Codes `_. + See also `Modifying Access Codes `_. :param access_code_id: ID of the access code that you want to update. - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param attempt_for_offline_device: @@ -1895,7 +1895,7 @@ async def update( :param ends_at: Date and time at which the validity of the new access code ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. Default: ``false``. :param is_managed: Indicates whether the access code is managed through Seam. Note that to convert an unmanaged access code into a managed access code, use ``/access_codes/unmanaged/convert_to_managed``. @@ -1909,7 +1909,7 @@ async def update( :param starts_at: Date and time at which the validity of the new access code starts, in `ISO 8601 `_ format. - :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. + :param type: Type to which you want to convert the access code. To convert a time-bound access code to an ongoing access code, set ``type`` to ``ongoing``. See also `Changing a time-bound access code to permanent access `_. """ json_payload: Dict[str, Any] = {} @@ -1955,11 +1955,11 @@ async def update_multiple( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates `access codes `_ that share a common code across multiple devices. + """Updates `access codes `_ that share a common code across multiple devices. Specify the ``common_code_key`` to identify the set of access codes that you want to update. - See also `Update Linked Access Codes `_. + See also `Update Linked Access Codes `_. :param common_code_key: Key that links the group of access codes, assigned on creation by ``/access_codes/create_multiple``. diff --git a/seam/routes/access_codes_simulate.py b/seam/routes/access_codes_simulate.py index c883584c..8bfd2eff 100644 --- a/seam/routes/access_codes_simulate.py +++ b/seam/routes/access_codes_simulate.py @@ -12,7 +12,7 @@ class AbstractAccessCodesSimulate(abc.ABC): def create_unmanaged_access_code( self, *, code: str, device_id: str, name: str ) -> UnmanagedAccessCode: - """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. + """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. :param code: Code of the simulated unmanaged access code. @@ -30,7 +30,7 @@ class AbstractAsyncAccessCodesSimulate(abc.ABC): async def create_unmanaged_access_code( self, *, code: str, device_id: str, name: str ) -> UnmanagedAccessCode: - """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. + """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. :param code: Code of the simulated unmanaged access code. @@ -55,7 +55,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): def create_unmanaged_access_code( self, *, code: str, device_id: str, name: str ) -> UnmanagedAccessCode: - """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. + """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. :param code: Code of the simulated unmanaged access code. @@ -99,7 +99,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): async def create_unmanaged_access_code( self, *, code: str, device_id: str, name: str ) -> UnmanagedAccessCode: - """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. + """Simulates the creation of an `unmanaged access code `_ in a `sandbox workspace `_. :param code: Code of the simulated unmanaged access code. diff --git a/seam/routes/access_codes_unmanaged.py b/seam/routes/access_codes_unmanaged.py index e556383a..c1349a6b 100644 --- a/seam/routes/access_codes_unmanaged.py +++ b/seam/routes/access_codes_unmanaged.py @@ -20,7 +20,7 @@ def convert_to_managed( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. + """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. An unmanaged access code has a limited set of operations that you can perform on it. Once you convert an unmanaged access code to a managed access code, the full set of access code operations and lifecycle events becomes available for it. @@ -28,17 +28,17 @@ def convert_to_managed( :param access_code_id: ID of the unmanaged access code that you want to convert to a managed access code. - :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. :param force: Indicates whether to force the access code conversion. To switch management of an access code from one Seam workspace to another, set ``force`` to ``true``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. """ raise NotImplementedError() @abc.abstractmethod def delete(self, *, access_code_id: str) -> None: - """Deletes an `unmanaged access code `_. + """Deletes an `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to delete. """ @@ -52,7 +52,7 @@ def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> UnmanagedAccessCode: - """Returns a specified `unmanaged access code `_. + """Returns a specified `unmanaged access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -77,7 +77,7 @@ def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[UnmanagedAccessCode]: - """Returns a list of all `unmanaged access codes `_. + """Returns a list of all `unmanaged access codes `_. :param device_id: ID of the device for which you want to list unmanaged access codes. @@ -102,17 +102,17 @@ def update( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Updates a specified `unmanaged access code `_. + """Updates a specified `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to update. :param is_managed: - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. :param force: Indicates whether to force the unmanaged access code update. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. """ raise NotImplementedError() @@ -128,7 +128,7 @@ async def convert_to_managed( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. + """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. An unmanaged access code has a limited set of operations that you can perform on it. Once you convert an unmanaged access code to a managed access code, the full set of access code operations and lifecycle events becomes available for it. @@ -136,17 +136,17 @@ async def convert_to_managed( :param access_code_id: ID of the unmanaged access code that you want to convert to a managed access code. - :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. :param force: Indicates whether to force the access code conversion. To switch management of an access code from one Seam workspace to another, set ``force`` to ``true``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. """ raise NotImplementedError() @abc.abstractmethod async def delete(self, *, access_code_id: str) -> None: - """Deletes an `unmanaged access code `_. + """Deletes an `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to delete. """ @@ -160,7 +160,7 @@ async def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> UnmanagedAccessCode: - """Returns a specified `unmanaged access code `_. + """Returns a specified `unmanaged access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -185,7 +185,7 @@ async def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[UnmanagedAccessCode]: - """Returns a list of all `unmanaged access codes `_. + """Returns a list of all `unmanaged access codes `_. :param device_id: ID of the device for which you want to list unmanaged access codes. @@ -210,17 +210,17 @@ async def update( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Updates a specified `unmanaged access code `_. + """Updates a specified `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to update. :param is_managed: - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. :param force: Indicates whether to force the unmanaged access code update. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. """ raise NotImplementedError() @@ -243,7 +243,7 @@ def convert_to_managed( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. + """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. An unmanaged access code has a limited set of operations that you can perform on it. Once you convert an unmanaged access code to a managed access code, the full set of access code operations and lifecycle events becomes available for it. @@ -251,11 +251,11 @@ def convert_to_managed( :param access_code_id: ID of the unmanaged access code that you want to convert to a managed access code. - :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. :param force: Indicates whether to force the access code conversion. To switch management of an access code from one Seam workspace to another, set ``force`` to ``true``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. """ json_payload: Dict[str, Any] = {} @@ -282,7 +282,7 @@ def convert_to_managed( has_pagination=False, ) def delete(self, *, access_code_id: str) -> None: - """Deletes an `unmanaged access code `_. + """Deletes an `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to delete. """ @@ -311,7 +311,7 @@ def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> UnmanagedAccessCode: - """Returns a specified `unmanaged access code `_. + """Returns a specified `unmanaged access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -365,7 +365,7 @@ def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[UnmanagedAccessCode]: - """Returns a list of all `unmanaged access codes `_. + """Returns a list of all `unmanaged access codes `_. :param device_id: ID of the device for which you want to list unmanaged access codes. @@ -417,17 +417,17 @@ def update( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Updates a specified `unmanaged access code `_. + """Updates a specified `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to update. :param is_managed: - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. :param force: Indicates whether to force the unmanaged access code update. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. """ json_payload: Dict[str, Any] = {} @@ -467,7 +467,7 @@ async def convert_to_managed( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. + """Converts an `unmanaged access code `_ to an `access code managed through Seam `_. An unmanaged access code has a limited set of operations that you can perform on it. Once you convert an unmanaged access code to a managed access code, the full set of access code operations and lifecycle events becomes available for it. @@ -475,11 +475,11 @@ async def convert_to_managed( :param access_code_id: ID of the unmanaged access code that you want to convert to a managed access code. - :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the access code is allowed. :param force: Indicates whether to force the access code conversion. To switch management of an access code from one Seam workspace to another, set ``force`` to ``true``. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the access code is allowed. """ json_payload: Dict[str, Any] = {} @@ -506,7 +506,7 @@ async def convert_to_managed( has_pagination=False, ) async def delete(self, *, access_code_id: str) -> None: - """Deletes an `unmanaged access code `_. + """Deletes an `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to delete. """ @@ -535,7 +535,7 @@ async def get( code: Optional[str] = None, device_id: Optional[str] = None, ) -> UnmanagedAccessCode: - """Returns a specified `unmanaged access code `_. + """Returns a specified `unmanaged access code `_. You must specify either ``access_code_id`` or both ``device_id`` and ``code``. @@ -589,7 +589,7 @@ async def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[UnmanagedAccessCode]: - """Returns a list of all `unmanaged access codes `_. + """Returns a list of all `unmanaged access codes `_. :param device_id: ID of the device for which you want to list unmanaged access codes. @@ -641,17 +641,17 @@ async def update( force: Optional[bool] = None, is_external_modification_allowed: Optional[bool] = None, ) -> None: - """Updates a specified `unmanaged access code `_. + """Updates a specified `unmanaged access code `_. :param access_code_id: ID of the unmanaged access code that you want to update. :param is_managed: - :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. + :param allow_external_modification: Indicates whether `external modification `_ of the code is allowed. :param force: Indicates whether to force the unmanaged access code update. - :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. + :param is_external_modification_allowed: Indicates whether `external modification `_ of the code is allowed. """ json_payload: Dict[str, Any] = {} diff --git a/seam/routes/access_grants.py b/seam/routes/access_grants.py index 07216ff2..c35e9af0 100644 --- a/seam/routes/access_grants.py +++ b/seam/routes/access_grants.py @@ -42,17 +42,17 @@ def create( user_identity: Optional[Dict[str, Any]] = None, user_identity_id: Optional[str] = None, ) -> AccessGrant: - """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. + """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. :param requested_access_methods: :param access_grant_key: Unique key for the access grant within the workspace. - :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. + :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. :param customization_profile_id: ID of the customization profile to apply to the Access Grant and its access methods. - :param device_ids: Set of IDs of the `devices `_ to which access is being granted. + :param device_ids: Set of IDs of the `devices `_ to which access is being granted. :param ends_at: Date and time at which the validity of the new grant ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. @@ -167,6 +167,7 @@ def list( location_id: Optional[str] = None, page_cursor: Optional[Union[str, Null]] = None, reservation_key: Optional[str] = None, + search: Optional[str] = None, space_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AccessGrant]: @@ -194,6 +195,8 @@ def list( :param reservation_key: Filter Access Grants by reservation_key. + :param search: String for which to search. Filters returned Access Grants to include all records that satisfy a partial match using ``name``, ``access_grant_key``, ``reservation_key``, ``access_grant_id``, ``user_identity_id``, ``user_identity_full_name``, ``user_identity_email_address`` or ``user_identity_phone_number``. + :param space_id: ID of the space by which you want to filter the list of Access Grants. :param user_identity_id: ID of user identity by which you want to filter the list of Access Grants. @@ -267,17 +270,17 @@ async def create( user_identity: Optional[Dict[str, Any]] = None, user_identity_id: Optional[str] = None, ) -> AccessGrant: - """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. + """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. :param requested_access_methods: :param access_grant_key: Unique key for the access grant within the workspace. - :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. + :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. :param customization_profile_id: ID of the customization profile to apply to the Access Grant and its access methods. - :param device_ids: Set of IDs of the `devices `_ to which access is being granted. + :param device_ids: Set of IDs of the `devices `_ to which access is being granted. :param ends_at: Date and time at which the validity of the new grant ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. @@ -392,6 +395,7 @@ async def list( location_id: Optional[str] = None, page_cursor: Optional[Union[str, Null]] = None, reservation_key: Optional[str] = None, + search: Optional[str] = None, space_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AccessGrant]: @@ -419,6 +423,8 @@ async def list( :param reservation_key: Filter Access Grants by reservation_key. + :param search: String for which to search. Filters returned Access Grants to include all records that satisfy a partial match using ``name``, ``access_grant_key``, ``reservation_key``, ``access_grant_id``, ``user_identity_id``, ``user_identity_full_name``, ``user_identity_email_address`` or ``user_identity_phone_number``. + :param space_id: ID of the space by which you want to filter the list of Access Grants. :param user_identity_id: ID of user identity by which you want to filter the list of Access Grants. @@ -499,17 +505,17 @@ def create( user_identity: Optional[Dict[str, Any]] = None, user_identity_id: Optional[str] = None, ) -> AccessGrant: - """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. + """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. :param requested_access_methods: :param access_grant_key: Unique key for the access grant within the workspace. - :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. + :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. :param customization_profile_id: ID of the customization profile to apply to the Access Grant and its access methods. - :param device_ids: Set of IDs of the `devices `_ to which access is being granted. + :param device_ids: Set of IDs of the `devices `_ to which access is being granted. :param ends_at: Date and time at which the validity of the new grant ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. @@ -736,6 +742,7 @@ def list( location_id: Optional[str] = None, page_cursor: Optional[Union[str, Null]] = None, reservation_key: Optional[str] = None, + search: Optional[str] = None, space_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AccessGrant]: @@ -763,6 +770,8 @@ def list( :param reservation_key: Filter Access Grants by reservation_key. + :param search: String for which to search. Filters returned Access Grants to include all records that satisfy a partial match using ``name``, ``access_grant_key``, ``reservation_key``, ``access_grant_id``, ``user_identity_id``, ``user_identity_full_name``, ``user_identity_email_address`` or ``user_identity_phone_number``. + :param space_id: ID of the space by which you want to filter the list of Access Grants. :param user_identity_id: ID of user identity by which you want to filter the list of Access Grants. @@ -792,6 +801,8 @@ def list( params["page_cursor"] = page_cursor if reservation_key is not None: params["reservation_key"] = reservation_key + if search is not None: + params["search"] = search if space_id is not None: params["space_id"] = space_id if user_identity_id is not None: @@ -936,17 +947,17 @@ async def create( user_identity: Optional[Dict[str, Any]] = None, user_identity_id: Optional[str] = None, ) -> AccessGrant: - """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. + """Creates a new `Access Grant `_. Access Grants are the default and recommended way to grant a user access to any physical space, irrespective of the locking hardware. They work with both standalone smart locks (using ``device_ids``) and access control systems (using ``acs_entrance_ids`` or ``space_ids``), and can issue PIN codes, key cards, and mobile keys through a single request. :param requested_access_methods: :param access_grant_key: Unique key for the access grant within the workspace. - :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. + :param acs_entrance_ids: Set of IDs of the `entrances `_ to which access is being granted. :param customization_profile_id: ID of the customization profile to apply to the Access Grant and its access methods. - :param device_ids: Set of IDs of the `devices `_ to which access is being granted. + :param device_ids: Set of IDs of the `devices `_ to which access is being granted. :param ends_at: Date and time at which the validity of the new grant ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. @@ -1173,6 +1184,7 @@ async def list( location_id: Optional[str] = None, page_cursor: Optional[Union[str, Null]] = None, reservation_key: Optional[str] = None, + search: Optional[str] = None, space_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AccessGrant]: @@ -1200,6 +1212,8 @@ async def list( :param reservation_key: Filter Access Grants by reservation_key. + :param search: String for which to search. Filters returned Access Grants to include all records that satisfy a partial match using ``name``, ``access_grant_key``, ``reservation_key``, ``access_grant_id``, ``user_identity_id``, ``user_identity_full_name``, ``user_identity_email_address`` or ``user_identity_phone_number``. + :param space_id: ID of the space by which you want to filter the list of Access Grants. :param user_identity_id: ID of user identity by which you want to filter the list of Access Grants. @@ -1229,6 +1243,8 @@ async def list( params["page_cursor"] = page_cursor if reservation_key is not None: params["reservation_key"] = reservation_key + if search is not None: + params["search"] = search if space_id is not None: params["space_id"] = space_id if user_identity_id is not None: diff --git a/seam/routes/access_methods.py b/seam/routes/access_methods.py index 8e7576ae..addbf098 100644 --- a/seam/routes/access_methods.py +++ b/seam/routes/access_methods.py @@ -72,7 +72,7 @@ def encode( acs_encoder_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. + """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. :param access_method_id: ID of the ``access_method`` to encode onto a card. @@ -181,7 +181,7 @@ def unlock_door( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. :param access_method_id: ID of the cloud_key ``access_method`` to use for the unlock operation. @@ -246,7 +246,7 @@ async def encode( acs_encoder_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. + """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. :param access_method_id: ID of the ``access_method`` to encode onto a card. @@ -355,7 +355,7 @@ async def unlock_door( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. :param access_method_id: ID of the cloud_key ``access_method`` to use for the unlock operation. @@ -483,7 +483,7 @@ def encode( acs_encoder_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. + """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. :param access_method_id: ID of the ``access_method`` to encode onto a card. @@ -698,7 +698,7 @@ def unlock_door( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. :param access_method_id: ID of the cloud_key ``access_method`` to use for the unlock operation. @@ -847,7 +847,7 @@ async def encode( acs_encoder_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. + """Encodes an existing access method onto a plastic card placed on the specified `encoder `_. :param access_method_id: ID of the ``access_method`` to encode onto a card. @@ -1062,7 +1062,7 @@ async def unlock_door( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using the cloud key credential associated with an access method. Returns an action attempt that tracks the progress of the unlock operation. :param access_method_id: ID of the cloud_key ``access_method`` to use for the unlock operation. diff --git a/seam/routes/acs_access_groups.py b/seam/routes/acs_access_groups.py index 7cae400b..736e5b91 100644 --- a/seam/routes/acs_access_groups.py +++ b/seam/routes/acs_access_groups.py @@ -17,7 +17,7 @@ def add_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -29,14 +29,14 @@ def add_user( @abc.abstractmethod def delete(self, *, acs_access_group_id: str) -> None: - """Deletes a specified `access group `_. + """Deletes a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to delete.""" raise NotImplementedError() @abc.abstractmethod def get(self, *, acs_access_group_id: str) -> AcsAccessGroup: - """Returns a specified `access group `_. + """Returns a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to get. @@ -52,7 +52,7 @@ def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsAccessGroup]: - """Returns a list of all `access groups `_. + """Returns a list of all `access groups `_. :param acs_system_id: ID of the access system for which you want to retrieve all access groups. @@ -69,7 +69,7 @@ def list( def list_accessible_entrances( self, *, acs_access_group_id: str ) -> List[AcsEntrance]: - """Returns a list of all accessible entrances for a specified `access group `_. + """Returns a list of all accessible entrances for a specified `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all accessible entrances. @@ -78,7 +78,7 @@ def list_accessible_entrances( @abc.abstractmethod def list_users(self, *, acs_access_group_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ in an `access group `_. + """Returns a list of all `access system users `_ in an `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all access system users. @@ -93,7 +93,7 @@ def remove_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -114,7 +114,7 @@ async def add_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -126,14 +126,14 @@ async def add_user( @abc.abstractmethod async def delete(self, *, acs_access_group_id: str) -> None: - """Deletes a specified `access group `_. + """Deletes a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to delete.""" raise NotImplementedError() @abc.abstractmethod async def get(self, *, acs_access_group_id: str) -> AcsAccessGroup: - """Returns a specified `access group `_. + """Returns a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to get. @@ -149,7 +149,7 @@ async def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsAccessGroup]: - """Returns a list of all `access groups `_. + """Returns a list of all `access groups `_. :param acs_system_id: ID of the access system for which you want to retrieve all access groups. @@ -166,7 +166,7 @@ async def list( async def list_accessible_entrances( self, *, acs_access_group_id: str ) -> List[AcsEntrance]: - """Returns a list of all accessible entrances for a specified `access group `_. + """Returns a list of all accessible entrances for a specified `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all accessible entrances. @@ -175,7 +175,7 @@ async def list_accessible_entrances( @abc.abstractmethod async def list_users(self, *, acs_access_group_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ in an `access group `_. + """Returns a list of all `access system users `_ in an `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all access system users. @@ -190,7 +190,7 @@ async def remove_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -218,7 +218,7 @@ def add_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -245,7 +245,7 @@ def add_user( has_pagination=False, ) def delete(self, *, acs_access_group_id: str) -> None: - """Deletes a specified `access group `_. + """Deletes a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to delete.""" params: Dict[str, Any] = {} @@ -263,7 +263,7 @@ def delete(self, *, acs_access_group_id: str) -> None: has_pagination=False, ) def get(self, *, acs_access_group_id: str) -> AcsAccessGroup: - """Returns a specified `access group `_. + """Returns a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to get. @@ -292,7 +292,7 @@ def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsAccessGroup]: - """Returns a list of all `access groups `_. + """Returns a list of all `access groups `_. :param acs_system_id: ID of the access system for which you want to retrieve all access groups. @@ -329,7 +329,7 @@ def list( def list_accessible_entrances( self, *, acs_access_group_id: str ) -> List[AcsEntrance]: - """Returns a list of all accessible entrances for a specified `access group `_. + """Returns a list of all accessible entrances for a specified `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all accessible entrances. @@ -356,7 +356,7 @@ def list_accessible_entrances( has_pagination=False, ) def list_users(self, *, acs_access_group_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ in an `access group `_. + """Returns a list of all `access system users `_ in an `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all access system users. @@ -385,7 +385,7 @@ def remove_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -424,7 +424,7 @@ async def add_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -451,7 +451,7 @@ async def add_user( has_pagination=False, ) async def delete(self, *, acs_access_group_id: str) -> None: - """Deletes a specified `access group `_. + """Deletes a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to delete.""" params: Dict[str, Any] = {} @@ -469,7 +469,7 @@ async def delete(self, *, acs_access_group_id: str) -> None: has_pagination=False, ) async def get(self, *, acs_access_group_id: str) -> AcsAccessGroup: - """Returns a specified `access group `_. + """Returns a specified `access group `_. :param acs_access_group_id: ID of the access group that you want to get. @@ -498,7 +498,7 @@ async def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsAccessGroup]: - """Returns a list of all `access groups `_. + """Returns a list of all `access groups `_. :param acs_system_id: ID of the access system for which you want to retrieve all access groups. @@ -535,7 +535,7 @@ async def list( async def list_accessible_entrances( self, *, acs_access_group_id: str ) -> List[AcsEntrance]: - """Returns a list of all accessible entrances for a specified `access group `_. + """Returns a list of all accessible entrances for a specified `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all accessible entrances. @@ -562,7 +562,7 @@ async def list_accessible_entrances( has_pagination=False, ) async def list_users(self, *, acs_access_group_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ in an `access group `_. + """Returns a list of all `access system users `_ in an `access group `_. :param acs_access_group_id: ID of the access group for which you want to retrieve all access system users. @@ -591,7 +591,7 @@ async def remove_user( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. diff --git a/seam/routes/acs_credentials.py b/seam/routes/acs_credentials.py index 741d48b9..99aa5860 100644 --- a/seam/routes/acs_credentials.py +++ b/seam/routes/acs_credentials.py @@ -19,7 +19,7 @@ def assign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Assigns a specified `credential `_ to a specified `access system user `_. + """Assigns a specified `credential `_ to a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to assign to an access system user. @@ -47,7 +47,7 @@ def create( user_identity_id: Optional[str] = None, visionline_metadata: Optional[Dict[str, Any]] = None, ) -> AcsCredential: - """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. + """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. :param access_method: Access method for the new credential. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. @@ -55,17 +55,17 @@ def create( :param acs_user_id: ID of the access system user to whom the new credential belongs. You must provide either ``acs_user_id`` or the combination of ``user_identity_id`` and ``acs_system_id``. - :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. + :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. :param assa_abloy_vostio_metadata: Vostio-specific metadata for the new credential. - :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. + :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. :param credential_manager_acs_system_id: ACS system ID of the credential manager for the new credential. :param ends_at: Date and time at which the validity of the new credential ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. + :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. :param salto_space_metadata: Salto Space-specific metadata for the new credential. @@ -80,14 +80,14 @@ def create( @abc.abstractmethod def delete(self, *, acs_credential_id: str) -> None: - """Deletes a specified `credential `_. + """Deletes a specified `credential `_. :param acs_credential_id: ID of the credential that you want to delete.""" raise NotImplementedError() @abc.abstractmethod def get(self, *, acs_credential_id: str) -> AcsCredential: - """Returns a specified `credential `_. + """Returns a specified `credential `_. :param acs_credential_id: ID of the credential that you want to get. @@ -107,7 +107,7 @@ def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_. + """Returns a list of all `credentials `_. :param acs_system_id: ID of the access system for which you want to retrieve all credentials. @@ -130,7 +130,7 @@ def list( @abc.abstractmethod def list_accessible_entrances(self, *, acs_credential_id: str) -> List[AcsEntrance]: - """Returns a list of all `entrances `_ to which a `credential `_ grants access. + """Returns a list of all `entrances `_ to which a `credential `_ grants access. :param acs_credential_id: ID of the credential for which you want to retrieve all entrances to which the credential grants access. @@ -145,7 +145,7 @@ def unassign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Unassigns a specified `credential `_ from a specified `access system user `_. + """Unassigns a specified `credential `_ from a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to unassign from an access system user. @@ -163,7 +163,7 @@ def update( code: Optional[str] = None, ends_at: Optional[str] = None, ) -> None: - """Updates the code and ends at date and time for a specified `credential `_. + """Updates the code and ends at date and time for a specified `credential `_. :param acs_credential_id: ID of the credential that you want to update. @@ -184,7 +184,7 @@ async def assign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Assigns a specified `credential `_ to a specified `access system user `_. + """Assigns a specified `credential `_ to a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to assign to an access system user. @@ -212,7 +212,7 @@ async def create( user_identity_id: Optional[str] = None, visionline_metadata: Optional[Dict[str, Any]] = None, ) -> AcsCredential: - """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. + """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. :param access_method: Access method for the new credential. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. @@ -220,17 +220,17 @@ async def create( :param acs_user_id: ID of the access system user to whom the new credential belongs. You must provide either ``acs_user_id`` or the combination of ``user_identity_id`` and ``acs_system_id``. - :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. + :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. :param assa_abloy_vostio_metadata: Vostio-specific metadata for the new credential. - :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. + :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. :param credential_manager_acs_system_id: ACS system ID of the credential manager for the new credential. :param ends_at: Date and time at which the validity of the new credential ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. + :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. :param salto_space_metadata: Salto Space-specific metadata for the new credential. @@ -245,14 +245,14 @@ async def create( @abc.abstractmethod async def delete(self, *, acs_credential_id: str) -> None: - """Deletes a specified `credential `_. + """Deletes a specified `credential `_. :param acs_credential_id: ID of the credential that you want to delete.""" raise NotImplementedError() @abc.abstractmethod async def get(self, *, acs_credential_id: str) -> AcsCredential: - """Returns a specified `credential `_. + """Returns a specified `credential `_. :param acs_credential_id: ID of the credential that you want to get. @@ -272,7 +272,7 @@ async def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_. + """Returns a list of all `credentials `_. :param acs_system_id: ID of the access system for which you want to retrieve all credentials. @@ -297,7 +297,7 @@ async def list( async def list_accessible_entrances( self, *, acs_credential_id: str ) -> List[AcsEntrance]: - """Returns a list of all `entrances `_ to which a `credential `_ grants access. + """Returns a list of all `entrances `_ to which a `credential `_ grants access. :param acs_credential_id: ID of the credential for which you want to retrieve all entrances to which the credential grants access. @@ -312,7 +312,7 @@ async def unassign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Unassigns a specified `credential `_ from a specified `access system user `_. + """Unassigns a specified `credential `_ from a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to unassign from an access system user. @@ -330,7 +330,7 @@ async def update( code: Optional[str] = None, ends_at: Optional[str] = None, ) -> None: - """Updates the code and ends at date and time for a specified `credential `_. + """Updates the code and ends at date and time for a specified `credential `_. :param acs_credential_id: ID of the credential that you want to update. @@ -358,7 +358,7 @@ def assign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Assigns a specified `credential `_ to a specified `access system user `_. + """Assigns a specified `credential `_ to a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to assign to an access system user. @@ -401,7 +401,7 @@ def create( user_identity_id: Optional[str] = None, visionline_metadata: Optional[Dict[str, Any]] = None, ) -> AcsCredential: - """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. + """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. :param access_method: Access method for the new credential. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. @@ -409,17 +409,17 @@ def create( :param acs_user_id: ID of the access system user to whom the new credential belongs. You must provide either ``acs_user_id`` or the combination of ``user_identity_id`` and ``acs_system_id``. - :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. + :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. :param assa_abloy_vostio_metadata: Vostio-specific metadata for the new credential. - :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. + :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. :param credential_manager_acs_system_id: ACS system ID of the credential manager for the new credential. :param ends_at: Date and time at which the validity of the new credential ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. + :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. :param salto_space_metadata: Salto Space-specific metadata for the new credential. @@ -475,7 +475,7 @@ def create( has_pagination=False, ) def delete(self, *, acs_credential_id: str) -> None: - """Deletes a specified `credential `_. + """Deletes a specified `credential `_. :param acs_credential_id: ID of the credential that you want to delete.""" params: Dict[str, Any] = {} @@ -493,7 +493,7 @@ def delete(self, *, acs_credential_id: str) -> None: has_pagination=False, ) def get(self, *, acs_credential_id: str) -> AcsCredential: - """Returns a specified `credential `_. + """Returns a specified `credential `_. :param acs_credential_id: ID of the credential that you want to get. @@ -526,7 +526,7 @@ def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_. + """Returns a list of all `credentials `_. :param acs_system_id: ID of the access system for which you want to retrieve all credentials. @@ -580,7 +580,7 @@ def list( has_pagination=False, ) def list_accessible_entrances(self, *, acs_credential_id: str) -> List[AcsEntrance]: - """Returns a list of all `entrances `_ to which a `credential `_ grants access. + """Returns a list of all `entrances `_ to which a `credential `_ grants access. :param acs_credential_id: ID of the credential for which you want to retrieve all entrances to which the credential grants access. @@ -613,7 +613,7 @@ def unassign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Unassigns a specified `credential `_ from a specified `access system user `_. + """Unassigns a specified `credential `_ from a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to unassign from an access system user. @@ -646,7 +646,7 @@ def update( code: Optional[str] = None, ends_at: Optional[str] = None, ) -> None: - """Updates the code and ends at date and time for a specified `credential `_. + """Updates the code and ends at date and time for a specified `credential `_. :param acs_credential_id: ID of the credential that you want to update. @@ -685,7 +685,7 @@ async def assign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Assigns a specified `credential `_ to a specified `access system user `_. + """Assigns a specified `credential `_ to a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to assign to an access system user. @@ -728,7 +728,7 @@ async def create( user_identity_id: Optional[str] = None, visionline_metadata: Optional[Dict[str, Any]] = None, ) -> AcsCredential: - """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. + """Creates a new `credential `_ for a specified `ACS user `_. For granting access, we recommend `Access Grants `_ instead: they create and manage the underlying credentials for you, across access systems and standalone smart locks alike. Use this low-level endpoint only when you need direct control over an individual ACS credential. :param access_method: Access method for the new credential. Supported values: ``code``, ``card``, ``mobile_key``, ``cloud_key``. @@ -736,17 +736,17 @@ async def create( :param acs_user_id: ID of the access system user to whom the new credential belongs. You must provide either ``acs_user_id`` or the combination of ``user_identity_id`` and ``acs_system_id``. - :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. + :param allowed_acs_entrance_ids: Set of IDs of the `entrances `_ for which the new credential grants access. :param assa_abloy_vostio_metadata: Vostio-specific metadata for the new credential. - :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. + :param code: Access (PIN) code for the new credential. There may be manufacturer-specific code restrictions. For details, see the applicable `device or system integration guide `_. :param credential_manager_acs_system_id: ACS system ID of the credential manager for the new credential. :param ends_at: Date and time at which the validity of the new credential ends, in `ISO 8601 `_ format. Must be a time in the future and after ``starts_at``. - :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. + :param is_multi_phone_sync_credential: Indicates whether the new credential is a `multi-phone sync credential `_. :param salto_space_metadata: Salto Space-specific metadata for the new credential. @@ -802,7 +802,7 @@ async def create( has_pagination=False, ) async def delete(self, *, acs_credential_id: str) -> None: - """Deletes a specified `credential `_. + """Deletes a specified `credential `_. :param acs_credential_id: ID of the credential that you want to delete.""" params: Dict[str, Any] = {} @@ -820,7 +820,7 @@ async def delete(self, *, acs_credential_id: str) -> None: has_pagination=False, ) async def get(self, *, acs_credential_id: str) -> AcsCredential: - """Returns a specified `credential `_. + """Returns a specified `credential `_. :param acs_credential_id: ID of the credential that you want to get. @@ -853,7 +853,7 @@ async def list( search: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_. + """Returns a list of all `credentials `_. :param acs_system_id: ID of the access system for which you want to retrieve all credentials. @@ -909,7 +909,7 @@ async def list( async def list_accessible_entrances( self, *, acs_credential_id: str ) -> List[AcsEntrance]: - """Returns a list of all `entrances `_ to which a `credential `_ grants access. + """Returns a list of all `entrances `_ to which a `credential `_ grants access. :param acs_credential_id: ID of the credential for which you want to retrieve all entrances to which the credential grants access. @@ -942,7 +942,7 @@ async def unassign( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Unassigns a specified `credential `_ from a specified `access system user `_. + """Unassigns a specified `credential `_ from a specified `access system user `_. :param acs_credential_id: ID of the credential that you want to unassign from an access system user. @@ -975,7 +975,7 @@ async def update( code: Optional[str] = None, ends_at: Optional[str] = None, ) -> None: - """Updates the code and ends at date and time for a specified `credential `_. + """Updates the code and ends at date and time for a specified `credential `_. :param acs_credential_id: ID of the credential that you want to update. diff --git a/seam/routes/acs_encoders.py b/seam/routes/acs_encoders.py index bb61675b..55ab0e37 100644 --- a/seam/routes/acs_encoders.py +++ b/seam/routes/acs_encoders.py @@ -35,7 +35,7 @@ def encode_credential( acs_credential_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` + """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` :param acs_encoder_id: ID of the ``acs_encoder`` to use to encode the ``acs_credential``. @@ -50,7 +50,7 @@ def encode_credential( @abc.abstractmethod def get(self, *, acs_encoder_id: str) -> AcsEncoder: - """Returns a specified `encoder `_. + """Returns a specified `encoder `_. :param acs_encoder_id: ID of the encoder that you want to get. @@ -67,7 +67,7 @@ def list( limit: Optional[float] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[AcsEncoder]: - """Returns a list of all `encoders `_. + """Returns a list of all `encoders `_. :param acs_encoder_ids: IDs of the encoders that you want to retrieve. @@ -90,7 +90,7 @@ def scan_credential( salto_ks_metadata: Optional[Dict[str, Any]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. + """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. :param acs_encoder_id: ID of the encoder to use for the scan. @@ -111,7 +111,7 @@ def scan_to_assign_credential( user_identity_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. + """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. :param acs_encoder_id: ID of the ``acs_encoder`` to use to scan the credential. @@ -143,7 +143,7 @@ async def encode_credential( acs_credential_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` + """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` :param acs_encoder_id: ID of the ``acs_encoder`` to use to encode the ``acs_credential``. @@ -158,7 +158,7 @@ async def encode_credential( @abc.abstractmethod async def get(self, *, acs_encoder_id: str) -> AcsEncoder: - """Returns a specified `encoder `_. + """Returns a specified `encoder `_. :param acs_encoder_id: ID of the encoder that you want to get. @@ -175,7 +175,7 @@ async def list( limit: Optional[float] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[AcsEncoder]: - """Returns a list of all `encoders `_. + """Returns a list of all `encoders `_. :param acs_encoder_ids: IDs of the encoders that you want to retrieve. @@ -198,7 +198,7 @@ async def scan_credential( salto_ks_metadata: Optional[Dict[str, Any]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. + """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. :param acs_encoder_id: ID of the encoder to use for the scan. @@ -219,7 +219,7 @@ async def scan_to_assign_credential( user_identity_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. + """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. :param acs_encoder_id: ID of the ``acs_encoder`` to use to scan the credential. @@ -258,7 +258,7 @@ def encode_credential( acs_credential_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` + """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` :param acs_encoder_id: ID of the ``acs_encoder`` to use to encode the ``acs_credential``. @@ -298,7 +298,7 @@ def encode_credential( path="/acs/encoders/get", at_least_one_parameter_names=(), has_pagination=False ) def get(self, *, acs_encoder_id: str) -> AcsEncoder: - """Returns a specified `encoder `_. + """Returns a specified `encoder `_. :param acs_encoder_id: ID of the encoder that you want to get. @@ -324,7 +324,7 @@ def list( limit: Optional[float] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[AcsEncoder]: - """Returns a list of all `encoders `_. + """Returns a list of all `encoders `_. :param acs_encoder_ids: IDs of the encoders that you want to retrieve. @@ -372,7 +372,7 @@ def scan_credential( salto_ks_metadata: Optional[Dict[str, Any]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. + """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. :param acs_encoder_id: ID of the encoder to use for the scan. @@ -418,7 +418,7 @@ def scan_to_assign_credential( user_identity_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. + """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. :param acs_encoder_id: ID of the ``acs_encoder`` to use to scan the credential. @@ -484,7 +484,7 @@ async def encode_credential( acs_credential_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` + """Encodes an existing `credential `_ onto a plastic card placed on the specified `encoder `_. Either provide an ``acs_credential_id`` or an ``access_method_id`` :param acs_encoder_id: ID of the ``acs_encoder`` to use to encode the ``acs_credential``. @@ -526,7 +526,7 @@ async def encode_credential( path="/acs/encoders/get", at_least_one_parameter_names=(), has_pagination=False ) async def get(self, *, acs_encoder_id: str) -> AcsEncoder: - """Returns a specified `encoder `_. + """Returns a specified `encoder `_. :param acs_encoder_id: ID of the encoder that you want to get. @@ -552,7 +552,7 @@ async def list( limit: Optional[float] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[AcsEncoder]: - """Returns a list of all `encoders `_. + """Returns a list of all `encoders `_. :param acs_encoder_ids: IDs of the encoders that you want to retrieve. @@ -600,7 +600,7 @@ async def scan_credential( salto_ks_metadata: Optional[Dict[str, Any]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. + """Scans an encoded `acs_credential `_ from a plastic card placed on the specified `encoder `_. :param acs_encoder_id: ID of the encoder to use for the scan. @@ -646,7 +646,7 @@ async def scan_to_assign_credential( user_identity_id: Optional[str] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. + """Scans a physical card placed on the specified `encoder `_ and assigns the scanned credential to an ACS user. Provide either an ``acs_user_id`` or a ``user_identity_id``. :param acs_encoder_id: ID of the ``acs_encoder`` to use to scan the credential. diff --git a/seam/routes/acs_encoders_simulate.py b/seam/routes/acs_encoders_simulate.py index 3be585cc..a82613d6 100644 --- a/seam/routes/acs_encoders_simulate.py +++ b/seam/routes/acs_encoders_simulate.py @@ -21,7 +21,7 @@ def next_credential_encode_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -37,7 +37,7 @@ def next_credential_encode_will_succeed( acs_encoder_id: str, scenario: Optional[Literal["credential_is_issued"]] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -58,7 +58,7 @@ def next_credential_scan_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will fail to scan the ``acs_credential`` in the next request. @@ -82,7 +82,7 @@ def next_credential_scan_will_succeed( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to scan the ``acs_credential``. @@ -109,7 +109,7 @@ async def next_credential_encode_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -125,7 +125,7 @@ async def next_credential_encode_will_succeed( acs_encoder_id: str, scenario: Optional[Literal["credential_is_issued"]] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -146,7 +146,7 @@ async def next_credential_scan_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will fail to scan the ``acs_credential`` in the next request. @@ -170,7 +170,7 @@ async def next_credential_scan_will_succeed( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to scan the ``acs_credential``. @@ -204,7 +204,7 @@ def next_credential_encode_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -237,7 +237,7 @@ def next_credential_encode_will_succeed( acs_encoder_id: str, scenario: Optional[Literal["credential_is_issued"]] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -274,7 +274,7 @@ def next_credential_scan_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will fail to scan the ``acs_credential`` in the next request. @@ -315,7 +315,7 @@ def next_credential_scan_will_succeed( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to scan the ``acs_credential``. @@ -363,7 +363,7 @@ async def next_credential_encode_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -396,7 +396,7 @@ async def next_credential_encode_will_succeed( acs_encoder_id: str, scenario: Optional[Literal["credential_is_issued"]] = None, ) -> None: - """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to encode a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to encode the ``acs_credential``. @@ -433,7 +433,7 @@ async def next_credential_scan_will_fail( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will fail. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will fail to scan the ``acs_credential`` in the next request. @@ -474,7 +474,7 @@ async def next_credential_scan_will_succeed( ] ] = None, ) -> None: - """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. + """Simulates that the next attempt to scan a `credential `_ using the specified `encoder `_ will succeed. You can only perform this action within a `sandbox workspace `_. :param acs_encoder_id: ID of the ``acs_encoder`` that will be used in the next request to scan the ``acs_credential``. diff --git a/seam/routes/acs_entrances.py b/seam/routes/acs_entrances.py index e462504f..65ea4209 100644 --- a/seam/routes/acs_entrances.py +++ b/seam/routes/acs_entrances.py @@ -22,7 +22,7 @@ class AbstractAcsEntrances(abc.ABC): @abc.abstractmethod def get(self, *, acs_entrance_id: str) -> AcsEntrance: - """Returns a specified `access system entrance `_. + """Returns a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance that you want to get. @@ -37,7 +37,7 @@ def grant_access( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Grants a specified `access system user `_ access to a specified `access system entrance `_. + """Grants a specified `access system user `_ access to a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance to which you want to grant an access system user access. @@ -63,7 +63,7 @@ def list( search: Optional[str] = None, space_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Returns a list of all `access system entrances `_. + """Returns a list of all `access system entrances `_. :param access_method_id: ID of the access method for which you want to retrieve all entrances to which it grants access. @@ -97,7 +97,7 @@ def list_credentials_with_access( acs_entrance_id: str, include_if: Optional[List[Literal["visionline_metadata.is_valid"]]] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_ with access to a specified `entrance `_. + """Returns a list of all `credentials `_ with access to a specified `entrance `_. :param acs_entrance_id: ID of the entrance for which you want to list all credentials that grant access. @@ -114,7 +114,7 @@ def unlock( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. :param acs_credential_id: ID of the cloud_key credential to use for the unlock operation. @@ -130,7 +130,7 @@ class AbstractAsyncAcsEntrances(abc.ABC): @abc.abstractmethod async def get(self, *, acs_entrance_id: str) -> AcsEntrance: - """Returns a specified `access system entrance `_. + """Returns a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance that you want to get. @@ -145,7 +145,7 @@ async def grant_access( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Grants a specified `access system user `_ access to a specified `access system entrance `_. + """Grants a specified `access system user `_ access to a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance to which you want to grant an access system user access. @@ -171,7 +171,7 @@ async def list( search: Optional[str] = None, space_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Returns a list of all `access system entrances `_. + """Returns a list of all `access system entrances `_. :param access_method_id: ID of the access method for which you want to retrieve all entrances to which it grants access. @@ -205,7 +205,7 @@ async def list_credentials_with_access( acs_entrance_id: str, include_if: Optional[List[Literal["visionline_metadata.is_valid"]]] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_ with access to a specified `entrance `_. + """Returns a list of all `credentials `_ with access to a specified `entrance `_. :param acs_entrance_id: ID of the entrance for which you want to list all credentials that grant access. @@ -222,7 +222,7 @@ async def unlock( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. :param acs_credential_id: ID of the cloud_key credential to use for the unlock operation. @@ -243,7 +243,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): path="/acs/entrances/get", at_least_one_parameter_names=(), has_pagination=False ) def get(self, *, acs_entrance_id: str) -> AcsEntrance: - """Returns a specified `access system entrance `_. + """Returns a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance that you want to get. @@ -269,7 +269,7 @@ def grant_access( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Grants a specified `access system user `_ access to a specified `access system entrance `_. + """Grants a specified `access system user `_ access to a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance to which you want to grant an access system user access. @@ -308,7 +308,7 @@ def list( search: Optional[str] = None, space_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Returns a list of all `access system entrances `_. + """Returns a list of all `access system entrances `_. :param access_method_id: ID of the access method for which you want to retrieve all entrances to which it grants access. @@ -379,7 +379,7 @@ def list_credentials_with_access( acs_entrance_id: str, include_if: Optional[List[Literal["visionline_metadata.is_valid"]]] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_ with access to a specified `entrance `_. + """Returns a list of all `credentials `_ with access to a specified `entrance `_. :param acs_entrance_id: ID of the entrance for which you want to list all credentials that grant access. @@ -416,7 +416,7 @@ def unlock( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. :param acs_credential_id: ID of the cloud_key credential to use for the unlock operation. @@ -458,7 +458,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): path="/acs/entrances/get", at_least_one_parameter_names=(), has_pagination=False ) async def get(self, *, acs_entrance_id: str) -> AcsEntrance: - """Returns a specified `access system entrance `_. + """Returns a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance that you want to get. @@ -484,7 +484,7 @@ async def grant_access( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Grants a specified `access system user `_ access to a specified `access system entrance `_. + """Grants a specified `access system user `_ access to a specified `access system entrance `_. :param acs_entrance_id: ID of the entrance to which you want to grant an access system user access. @@ -523,7 +523,7 @@ async def list( search: Optional[str] = None, space_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Returns a list of all `access system entrances `_. + """Returns a list of all `access system entrances `_. :param access_method_id: ID of the access method for which you want to retrieve all entrances to which it grants access. @@ -594,7 +594,7 @@ async def list_credentials_with_access( acs_entrance_id: str, include_if: Optional[List[Literal["visionline_metadata.is_valid"]]] = None, ) -> List[AcsCredential]: - """Returns a list of all `credentials `_ with access to a specified `entrance `_. + """Returns a list of all `credentials `_ with access to a specified `entrance `_. :param acs_entrance_id: ID of the entrance for which you want to list all credentials that grant access. @@ -631,7 +631,7 @@ async def unlock( acs_entrance_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. + """Remotely unlocks a specified `entrance `_ using a cloud_key credential. Returns an action attempt that tracks the progress of the unlock operation. :param acs_credential_id: ID of the cloud_key credential to use for the unlock operation. diff --git a/seam/routes/acs_systems.py b/seam/routes/acs_systems.py index 19bcb9ef..bf5f0d8d 100644 --- a/seam/routes/acs_systems.py +++ b/seam/routes/acs_systems.py @@ -11,7 +11,7 @@ class AbstractAcsSystems(abc.ABC): @abc.abstractmethod def get(self, *, acs_system_id: str) -> AcsSystem: - """Returns a specified `access system `_. + """Returns a specified `access system `_. :param acs_system_id: ID of the access system that you want to get. @@ -26,7 +26,7 @@ def list( customer_key: Optional[str] = None, search: Optional[str] = None, ) -> List[AcsSystem]: - """Returns a list of all `access systems `_. + """Returns a list of all `access systems `_. To filter the list of returned access systems by a specific connected account ID, include the ``connected_account_id`` in the request body. If you omit the ``connected_account_id`` parameter, the response includes all access systems connected to your workspace. @@ -43,7 +43,7 @@ def list( def list_compatible_credential_manager_acs_systems( self, *, acs_system_id: str ) -> List[AcsSystem]: - """Returns a list of all credential manager systems that are compatible with a specified `access system `_. + """Returns a list of all credential manager systems that are compatible with a specified `access system `_. Specify the access system for which you want to retrieve all compatible credential manager systems by including the corresponding ``acs_system_id`` in the request body. @@ -74,7 +74,7 @@ class AbstractAsyncAcsSystems(abc.ABC): @abc.abstractmethod async def get(self, *, acs_system_id: str) -> AcsSystem: - """Returns a specified `access system `_. + """Returns a specified `access system `_. :param acs_system_id: ID of the access system that you want to get. @@ -89,7 +89,7 @@ async def list( customer_key: Optional[str] = None, search: Optional[str] = None, ) -> List[AcsSystem]: - """Returns a list of all `access systems `_. + """Returns a list of all `access systems `_. To filter the list of returned access systems by a specific connected account ID, include the ``connected_account_id`` in the request body. If you omit the ``connected_account_id`` parameter, the response includes all access systems connected to your workspace. @@ -106,7 +106,7 @@ async def list( async def list_compatible_credential_manager_acs_systems( self, *, acs_system_id: str ) -> List[AcsSystem]: - """Returns a list of all credential manager systems that are compatible with a specified `access system `_. + """Returns a list of all credential manager systems that are compatible with a specified `access system `_. Specify the access system for which you want to retrieve all compatible credential manager systems by including the corresponding ``acs_system_id`` in the request body. @@ -142,7 +142,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): path="/acs/systems/get", at_least_one_parameter_names=(), has_pagination=False ) def get(self, *, acs_system_id: str) -> AcsSystem: - """Returns a specified `access system `_. + """Returns a specified `access system `_. :param acs_system_id: ID of the access system that you want to get. @@ -166,7 +166,7 @@ def list( customer_key: Optional[str] = None, search: Optional[str] = None, ) -> List[AcsSystem]: - """Returns a list of all `access systems `_. + """Returns a list of all `access systems `_. To filter the list of returned access systems by a specific connected account ID, include the ``connected_account_id`` in the request body. If you omit the ``connected_account_id`` parameter, the response includes all access systems connected to your workspace. @@ -201,7 +201,7 @@ def list( def list_compatible_credential_manager_acs_systems( self, *, acs_system_id: str ) -> List[AcsSystem]: - """Returns a list of all credential manager systems that are compatible with a specified `access system `_. + """Returns a list of all credential manager systems that are compatible with a specified `access system `_. Specify the access system for which you want to retrieve all compatible credential manager systems by including the corresponding ``acs_system_id`` in the request body. @@ -268,7 +268,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): path="/acs/systems/get", at_least_one_parameter_names=(), has_pagination=False ) async def get(self, *, acs_system_id: str) -> AcsSystem: - """Returns a specified `access system `_. + """Returns a specified `access system `_. :param acs_system_id: ID of the access system that you want to get. @@ -292,7 +292,7 @@ async def list( customer_key: Optional[str] = None, search: Optional[str] = None, ) -> List[AcsSystem]: - """Returns a list of all `access systems `_. + """Returns a list of all `access systems `_. To filter the list of returned access systems by a specific connected account ID, include the ``connected_account_id`` in the request body. If you omit the ``connected_account_id`` parameter, the response includes all access systems connected to your workspace. @@ -327,7 +327,7 @@ async def list( async def list_compatible_credential_manager_acs_systems( self, *, acs_system_id: str ) -> List[AcsSystem]: - """Returns a list of all credential manager systems that are compatible with a specified `access system `_. + """Returns a list of all credential manager systems that are compatible with a specified `access system `_. Specify the access system for which you want to retrieve all compatible credential manager systems by including the corresponding ``acs_system_id`` in the request body. diff --git a/seam/routes/acs_users.py b/seam/routes/acs_users.py index ca7535aa..5f05ca0e 100644 --- a/seam/routes/acs_users.py +++ b/seam/routes/acs_users.py @@ -15,7 +15,7 @@ class AbstractAcsUsers(abc.ABC): def add_to_access_group( self, *, acs_access_group_id: str, acs_user_id: str ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -36,7 +36,7 @@ def create( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Creates a new `access system user `_. + """Creates a new `access system user `_. :param acs_system_id: ID of the access system to which you want to add the new access system user. @@ -48,9 +48,9 @@ def create( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity with which you want to associate the new access system user. @@ -65,7 +65,7 @@ def delete( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. + """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. :param acs_system_id: ID of the access system that you want to delete. You must provide acs_system_id with user_identity_id. @@ -84,7 +84,7 @@ def get( acs_system_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Returns a specified `access system user `_. + """Returns a specified `access system user `_. :param acs_user_id: ID of the access system user that you want to get. You can only provide acs_user_id or user_identity_id. @@ -110,7 +110,7 @@ def list( user_identity_id: Optional[str] = None, user_identity_phone_number: Optional[Union[str, Null]] = None, ) -> List[AcsUser]: - """Returns a list of all `access system users `_. + """Returns a list of all `access system users `_. :param acs_system_id: ID of the ``acs_system`` for which you want to retrieve all access system users. @@ -139,7 +139,7 @@ def list_accessible_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Lists the `entrances `_ to which a specified `access system user `_ has access. + """Lists the `entrances `_ to which a specified `access system user `_ has access. :param acs_system_id: ID of the access system for which you want to list accessible entrances. You can only provide acs_system_id with user_identity_id. @@ -160,7 +160,7 @@ def remove_from_access_group( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -178,7 +178,7 @@ def revoke_access_to_all_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Revokes access to all `entrances `_ for a specified `access system user `_. + """Revokes access to all `entrances `_ for a specified `access system user `_. :param acs_system_id: ID of the access system for which you want to revoke access. You can only provide acs_system_id with user_identity_id. @@ -197,7 +197,7 @@ def suspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. + """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. :param acs_system_id: ID of the access system that you want to suspend. You can only provide acs_user_id or the combination of acs_system_id and user_identity_id. @@ -216,7 +216,7 @@ def unsuspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. + """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. :param acs_system_id: ID of the access system of the user that you want to unsuspend. You can only provide acs_system_id with user_identity_id. @@ -241,7 +241,7 @@ def update( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Updates the properties of a specified `access system user `_. + """Updates the properties of a specified `access system user `_. :param access_schedule: ``starts_at`` and ``ends_at`` timestamps for the access system user's access. If you specify an ``access_schedule``, you may include both ``starts_at`` and ``ends_at``. If you omit ``starts_at``, it defaults to the current time. ``ends_at`` is optional and must be a time in the future and after ``starts_at``. @@ -251,13 +251,13 @@ def update( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param full_name: Full name of the `access system user `_. + :param full_name: Full name of the `access system user `_. :param hid_acs_system_id: ID of the HID access control system associated with the user. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity that you want to update. You can only provide acs_user_id or user_identity_id. If you provide user_identity_id, you must also provide acs_system_id. @@ -271,7 +271,7 @@ class AbstractAsyncAcsUsers(abc.ABC): async def add_to_access_group( self, *, acs_access_group_id: str, acs_user_id: str ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -292,7 +292,7 @@ async def create( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Creates a new `access system user `_. + """Creates a new `access system user `_. :param acs_system_id: ID of the access system to which you want to add the new access system user. @@ -304,9 +304,9 @@ async def create( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity with which you want to associate the new access system user. @@ -321,7 +321,7 @@ async def delete( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. + """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. :param acs_system_id: ID of the access system that you want to delete. You must provide acs_system_id with user_identity_id. @@ -340,7 +340,7 @@ async def get( acs_system_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Returns a specified `access system user `_. + """Returns a specified `access system user `_. :param acs_user_id: ID of the access system user that you want to get. You can only provide acs_user_id or user_identity_id. @@ -366,7 +366,7 @@ async def list( user_identity_id: Optional[str] = None, user_identity_phone_number: Optional[Union[str, Null]] = None, ) -> List[AcsUser]: - """Returns a list of all `access system users `_. + """Returns a list of all `access system users `_. :param acs_system_id: ID of the ``acs_system`` for which you want to retrieve all access system users. @@ -395,7 +395,7 @@ async def list_accessible_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Lists the `entrances `_ to which a specified `access system user `_ has access. + """Lists the `entrances `_ to which a specified `access system user `_ has access. :param acs_system_id: ID of the access system for which you want to list accessible entrances. You can only provide acs_system_id with user_identity_id. @@ -416,7 +416,7 @@ async def remove_from_access_group( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -434,7 +434,7 @@ async def revoke_access_to_all_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Revokes access to all `entrances `_ for a specified `access system user `_. + """Revokes access to all `entrances `_ for a specified `access system user `_. :param acs_system_id: ID of the access system for which you want to revoke access. You can only provide acs_system_id with user_identity_id. @@ -453,7 +453,7 @@ async def suspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. + """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. :param acs_system_id: ID of the access system that you want to suspend. You can only provide acs_user_id or the combination of acs_system_id and user_identity_id. @@ -472,7 +472,7 @@ async def unsuspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. + """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. :param acs_system_id: ID of the access system of the user that you want to unsuspend. You can only provide acs_system_id with user_identity_id. @@ -497,7 +497,7 @@ async def update( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Updates the properties of a specified `access system user `_. + """Updates the properties of a specified `access system user `_. :param access_schedule: ``starts_at`` and ``ends_at`` timestamps for the access system user's access. If you specify an ``access_schedule``, you may include both ``starts_at`` and ``ends_at``. If you omit ``starts_at``, it defaults to the current time. ``ends_at`` is optional and must be a time in the future and after ``starts_at``. @@ -507,13 +507,13 @@ async def update( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param full_name: Full name of the `access system user `_. + :param full_name: Full name of the `access system user `_. :param hid_acs_system_id: ID of the HID access control system associated with the user. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity that you want to update. You can only provide acs_user_id or user_identity_id. If you provide user_identity_id, you must also provide acs_system_id. @@ -534,7 +534,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): def add_to_access_group( self, *, acs_access_group_id: str, acs_user_id: str ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -566,7 +566,7 @@ def create( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Creates a new `access system user `_. + """Creates a new `access system user `_. :param acs_system_id: ID of the access system to which you want to add the new access system user. @@ -578,9 +578,9 @@ def create( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity with which you want to associate the new access system user. @@ -624,7 +624,7 @@ def delete( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. + """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. :param acs_system_id: ID of the access system that you want to delete. You must provide acs_system_id with user_identity_id. @@ -672,7 +672,7 @@ def get( acs_system_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Returns a specified `access system user `_. + """Returns a specified `access system user `_. :param acs_user_id: ID of the access system user that you want to get. You can only provide acs_user_id or user_identity_id. @@ -721,7 +721,7 @@ def list( user_identity_id: Optional[str] = None, user_identity_phone_number: Optional[Union[str, Null]] = None, ) -> List[AcsUser]: - """Returns a list of all `access system users `_. + """Returns a list of all `access system users `_. :param acs_system_id: ID of the ``acs_system`` for which you want to retrieve all access system users. @@ -785,7 +785,7 @@ def list_accessible_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Lists the `entrances `_ to which a specified `access system user `_ has access. + """Lists the `entrances `_ to which a specified `access system user `_ has access. :param acs_system_id: ID of the access system for which you want to list accessible entrances. You can only provide acs_system_id with user_identity_id. @@ -838,7 +838,7 @@ def remove_from_access_group( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -875,7 +875,7 @@ def revoke_access_to_all_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Revokes access to all `entrances `_ for a specified `access system user `_. + """Revokes access to all `entrances `_ for a specified `access system user `_. :param acs_system_id: ID of the access system for which you want to revoke access. You can only provide acs_system_id with user_identity_id. @@ -925,7 +925,7 @@ def suspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. + """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. :param acs_system_id: ID of the access system that you want to suspend. You can only provide acs_user_id or the combination of acs_system_id and user_identity_id. @@ -975,7 +975,7 @@ def unsuspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. + """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. :param acs_system_id: ID of the access system of the user that you want to unsuspend. You can only provide acs_system_id with user_identity_id. @@ -1037,7 +1037,7 @@ def update( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Updates the properties of a specified `access system user `_. + """Updates the properties of a specified `access system user `_. :param access_schedule: ``starts_at`` and ``ends_at`` timestamps for the access system user's access. If you specify an ``access_schedule``, you may include both ``starts_at`` and ``ends_at``. If you omit ``starts_at``, it defaults to the current time. ``ends_at`` is optional and must be a time in the future and after ``starts_at``. @@ -1047,13 +1047,13 @@ def update( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param full_name: Full name of the `access system user `_. + :param full_name: Full name of the `access system user `_. :param hid_acs_system_id: ID of the HID access control system associated with the user. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity that you want to update. You can only provide acs_user_id or user_identity_id. If you provide user_identity_id, you must also provide acs_system_id. @@ -1113,7 +1113,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): async def add_to_access_group( self, *, acs_access_group_id: str, acs_user_id: str ) -> None: - """Adds a specified `access system user `_ to a specified `access group `_. + """Adds a specified `access system user `_ to a specified `access group `_. :param acs_access_group_id: ID of the access group to which you want to add an access system user. @@ -1145,7 +1145,7 @@ async def create( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Creates a new `access system user `_. + """Creates a new `access system user `_. :param acs_system_id: ID of the access system to which you want to add the new access system user. @@ -1157,9 +1157,9 @@ async def create( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity with which you want to associate the new access system user. @@ -1203,7 +1203,7 @@ async def delete( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. + """Deletes a specified `access system user `_ and invalidates the access system user's `credentials `_. :param acs_system_id: ID of the access system that you want to delete. You must provide acs_system_id with user_identity_id. @@ -1251,7 +1251,7 @@ async def get( acs_system_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> AcsUser: - """Returns a specified `access system user `_. + """Returns a specified `access system user `_. :param acs_user_id: ID of the access system user that you want to get. You can only provide acs_user_id or user_identity_id. @@ -1300,7 +1300,7 @@ async def list( user_identity_id: Optional[str] = None, user_identity_phone_number: Optional[Union[str, Null]] = None, ) -> List[AcsUser]: - """Returns a list of all `access system users `_. + """Returns a list of all `access system users `_. :param acs_system_id: ID of the ``acs_system`` for which you want to retrieve all access system users. @@ -1364,7 +1364,7 @@ async def list_accessible_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> List[AcsEntrance]: - """Lists the `entrances `_ to which a specified `access system user `_ has access. + """Lists the `entrances `_ to which a specified `access system user `_ has access. :param acs_system_id: ID of the access system for which you want to list accessible entrances. You can only provide acs_system_id with user_identity_id. @@ -1419,7 +1419,7 @@ async def remove_from_access_group( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Removes a specified `access system user `_ from a specified `access group `_. + """Removes a specified `access system user `_ from a specified `access group `_. :param acs_access_group_id: ID of the access group from which you want to remove an access system user. @@ -1456,7 +1456,7 @@ async def revoke_access_to_all_entrances( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Revokes access to all `entrances `_ for a specified `access system user `_. + """Revokes access to all `entrances `_ for a specified `access system user `_. :param acs_system_id: ID of the access system for which you want to revoke access. You can only provide acs_system_id with user_identity_id. @@ -1508,7 +1508,7 @@ async def suspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. + """`Suspends `_ a specified `access system user `_. Suspending an access system user revokes their access temporarily. To restore an access system user's access, you can `unsuspend `_ them. :param acs_system_id: ID of the access system that you want to suspend. You can only provide acs_user_id or the combination of acs_system_id and user_identity_id. @@ -1558,7 +1558,7 @@ async def unsuspend( acs_user_id: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. + """`Unsuspends `_ a specified suspended `access system user `_. While `suspending an access system user `_ revokes their access temporarily, unsuspending the access system user restores their access. :param acs_system_id: ID of the access system of the user that you want to unsuspend. You can only provide acs_system_id with user_identity_id. @@ -1620,7 +1620,7 @@ async def update( phone_number: Optional[str] = None, user_identity_id: Optional[str] = None, ) -> None: - """Updates the properties of a specified `access system user `_. + """Updates the properties of a specified `access system user `_. :param access_schedule: ``starts_at`` and ``ends_at`` timestamps for the access system user's access. If you specify an ``access_schedule``, you may include both ``starts_at`` and ``ends_at``. If you omit ``starts_at``, it defaults to the current time. ``ends_at`` is optional and must be a time in the future and after ``starts_at``. @@ -1630,13 +1630,13 @@ async def update( :param email: Deprecated: use email_address. - :param email_address: Email address of the `access system user `_. + :param email_address: Email address of the `access system user `_. - :param full_name: Full name of the `access system user `_. + :param full_name: Full name of the `access system user `_. :param hid_acs_system_id: ID of the HID access control system associated with the user. - :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). + :param phone_number: Phone number of the `access system user `_ in E.164 format (for example, ``+15555550100``). :param user_identity_id: ID of the user identity that you want to update. You can only provide acs_user_id or user_identity_id. If you provide user_identity_id, you must also provide acs_system_id. diff --git a/seam/routes/action_attempts.py b/seam/routes/action_attempts.py index db3a48da..29795c3f 100644 --- a/seam/routes/action_attempts.py +++ b/seam/routes/action_attempts.py @@ -22,7 +22,7 @@ def get( action_attempt_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Returns a specified `action attempt `_. + """Returns a specified `action attempt `_. :param action_attempt_id: ID of the action attempt that you want to get. @@ -40,7 +40,7 @@ def list( limit: Optional[int] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[ActionAttempt]: - """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. + """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. :param action_attempt_ids: IDs of the action attempts that you want to retrieve. @@ -63,7 +63,7 @@ async def get( action_attempt_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Returns a specified `action attempt `_. + """Returns a specified `action attempt `_. :param action_attempt_id: ID of the action attempt that you want to get. @@ -81,7 +81,7 @@ async def list( limit: Optional[int] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[ActionAttempt]: - """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. + """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. :param action_attempt_ids: IDs of the action attempts that you want to retrieve. @@ -111,7 +111,7 @@ def get( action_attempt_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Returns a specified `action attempt `_. + """Returns a specified `action attempt `_. :param action_attempt_id: ID of the action attempt that you want to get. @@ -152,7 +152,7 @@ def list( limit: Optional[int] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[ActionAttempt]: - """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. + """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. :param action_attempt_ids: IDs of the action attempts that you want to retrieve. @@ -201,7 +201,7 @@ async def get( action_attempt_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Returns a specified `action attempt `_. + """Returns a specified `action attempt `_. :param action_attempt_id: ID of the action attempt that you want to get. @@ -242,7 +242,7 @@ async def list( limit: Optional[int] = None, page_cursor: Optional[Union[str, Null]] = None, ) -> List[ActionAttempt]: - """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. + """Returns a list of the `action attempts `_ that you specify as an array of ``action_attempt_id``s. :param action_attempt_ids: IDs of the action attempts that you want to retrieve. diff --git a/seam/routes/cameras.py b/seam/routes/cameras.py new file mode 100644 index 00000000..1e4fa0c8 --- /dev/null +++ b/seam/routes/cameras.py @@ -0,0 +1,48 @@ +from typing import Optional, Any, List, Dict, Literal, Union +import abc +from ..client import SeamHttpClient, AsyncSeamHttpClient +from ..route import route_metadata +from .cameras_live_views import ( + AbstractCamerasLiveViews, + CamerasLiveViews, + AbstractAsyncCamerasLiveViews, + AsyncCamerasLiveViews, +) + + +class AbstractCameras(abc.ABC): + + @property + @abc.abstractmethod + def live_views(self) -> AbstractCamerasLiveViews: + raise NotImplementedError() + + +class AbstractAsyncCameras(abc.ABC): + + @property + @abc.abstractmethod + def live_views(self) -> AbstractAsyncCamerasLiveViews: + raise NotImplementedError() + + +class Cameras(AbstractCameras): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + self._live_views = CamerasLiveViews(client=client, defaults=defaults) + + @property + def live_views(self) -> CamerasLiveViews: + return self._live_views + + +class AsyncCameras(AbstractAsyncCameras): + def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + self._live_views = AsyncCamerasLiveViews(client=client, defaults=defaults) + + @property + def live_views(self) -> AsyncCamerasLiveViews: + return self._live_views diff --git a/seam/routes/cameras_live_views.py b/seam/routes/cameras_live_views.py new file mode 100644 index 00000000..d4b0d969 --- /dev/null +++ b/seam/routes/cameras_live_views.py @@ -0,0 +1,314 @@ +from typing import Optional, Any, List, Dict, Literal, Union +import abc +from ..client import SeamHttpClient, AsyncSeamHttpClient +from ..route import route_metadata +from ..resources import CameraLiveViewSession, CameraLiveViewAnswer +from ..response import unwrap + + +class AbstractCamerasLiveViews(abc.ABC): + + @abc.abstractmethod + def create( + self, + *, + device_id: str, + duration_seconds: Optional[int] = None, + include_audio: Optional[bool] = None, + ) -> CameraLiveViewSession: + """Creates a short-lived live view session for a single camera. Pass the returned session ID and token to ``/cameras/live_views/offer`` to start a WebRTC stream, and to ``/cameras/live_views/stop`` to end the session. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. To check whether a camera supports live view, use ``device.can_stream_live_video``. + + :param device_id: ID of the camera to view. + + :param duration_seconds: Number of seconds for which the live view session is valid, up to 600. + + :param include_audio: Indicates whether to include the camera's audio. + + :returns: OK""" + raise NotImplementedError() + + @abc.abstractmethod + def offer( + self, *, camera_live_view_session_id: str, sdp_offer: str, token: str + ) -> CameraLiveViewAnswer: + """Exchanges a WebRTC SDP offer for an SDP answer that starts streaming video from the camera, for a live view session that you created using ``/cameras/live_views/create``. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param sdp_offer: WebRTC SDP offer from the viewer, limited to 64 KiB of UTF-8 data. + + :param token: Token returned when the camera live view session was created. + + :returns: OK""" + raise NotImplementedError() + + @abc.abstractmethod + def stop(self, *, camera_live_view_session_id: str, token: str) -> None: + """Stops a camera live view session that the current client session owns. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param token: Token returned when the camera live view session was created.""" + raise NotImplementedError() + + +class AbstractAsyncCamerasLiveViews(abc.ABC): + + @abc.abstractmethod + async def create( + self, + *, + device_id: str, + duration_seconds: Optional[int] = None, + include_audio: Optional[bool] = None, + ) -> CameraLiveViewSession: + """Creates a short-lived live view session for a single camera. Pass the returned session ID and token to ``/cameras/live_views/offer`` to start a WebRTC stream, and to ``/cameras/live_views/stop`` to end the session. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. To check whether a camera supports live view, use ``device.can_stream_live_video``. + + :param device_id: ID of the camera to view. + + :param duration_seconds: Number of seconds for which the live view session is valid, up to 600. + + :param include_audio: Indicates whether to include the camera's audio. + + :returns: OK""" + raise NotImplementedError() + + @abc.abstractmethod + async def offer( + self, *, camera_live_view_session_id: str, sdp_offer: str, token: str + ) -> CameraLiveViewAnswer: + """Exchanges a WebRTC SDP offer for an SDP answer that starts streaming video from the camera, for a live view session that you created using ``/cameras/live_views/create``. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param sdp_offer: WebRTC SDP offer from the viewer, limited to 64 KiB of UTF-8 data. + + :param token: Token returned when the camera live view session was created. + + :returns: OK""" + raise NotImplementedError() + + @abc.abstractmethod + async def stop(self, *, camera_live_view_session_id: str, token: str) -> None: + """Stops a camera live view session that the current client session owns. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param token: Token returned when the camera live view session was created.""" + raise NotImplementedError() + + +class CamerasLiveViews(AbstractCamerasLiveViews): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + @route_metadata( + path="/cameras/live_views/create", + at_least_one_parameter_names=(), + has_pagination=False, + ) + def create( + self, + *, + device_id: str, + duration_seconds: Optional[int] = None, + include_audio: Optional[bool] = None, + ) -> CameraLiveViewSession: + """Creates a short-lived live view session for a single camera. Pass the returned session ID and token to ``/cameras/live_views/offer`` to start a WebRTC stream, and to ``/cameras/live_views/stop`` to end the session. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. To check whether a camera supports live view, use ``device.can_stream_live_video``. + + :param device_id: ID of the camera to view. + + :param duration_seconds: Number of seconds for which the live view session is valid, up to 600. + + :param include_audio: Indicates whether to include the camera's audio. + + :returns: OK""" + json_payload: Dict[str, Any] = {} + + if device_id is not None: + json_payload["device_id"] = device_id + if duration_seconds is not None: + json_payload["duration_seconds"] = duration_seconds + if include_audio is not None: + json_payload["include_audio"] = include_audio + + res = self.client.post("/cameras/live_views/create", json=json_payload) + + return CameraLiveViewSession.from_dict( + unwrap(res, "camera_live_view_session", "/cameras/live_views/create") + ) + + @route_metadata( + path="/cameras/live_views/offer", + at_least_one_parameter_names=(), + has_pagination=False, + ) + def offer( + self, *, camera_live_view_session_id: str, sdp_offer: str, token: str + ) -> CameraLiveViewAnswer: + """Exchanges a WebRTC SDP offer for an SDP answer that starts streaming video from the camera, for a live view session that you created using ``/cameras/live_views/create``. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param sdp_offer: WebRTC SDP offer from the viewer, limited to 64 KiB of UTF-8 data. + + :param token: Token returned when the camera live view session was created. + + :returns: OK""" + json_payload: Dict[str, Any] = {} + + if camera_live_view_session_id is not None: + json_payload["camera_live_view_session_id"] = camera_live_view_session_id + if sdp_offer is not None: + json_payload["sdp_offer"] = sdp_offer + if token is not None: + json_payload["token"] = token + + res = self.client.post("/cameras/live_views/offer", json=json_payload) + + return CameraLiveViewAnswer.from_dict( + unwrap(res, "camera_live_view_answer", "/cameras/live_views/offer") + ) + + @route_metadata( + path="/cameras/live_views/stop", + at_least_one_parameter_names=(), + has_pagination=False, + ) + def stop(self, *, camera_live_view_session_id: str, token: str) -> None: + """Stops a camera live view session that the current client session owns. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param token: Token returned when the camera live view session was created.""" + json_payload: Dict[str, Any] = {} + + if camera_live_view_session_id is not None: + json_payload["camera_live_view_session_id"] = camera_live_view_session_id + if token is not None: + json_payload["token"] = token + + self.client.post("/cameras/live_views/stop", json=json_payload) + + return None + + +class AsyncCamerasLiveViews(AbstractAsyncCamerasLiveViews): + def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + @route_metadata( + path="/cameras/live_views/create", + at_least_one_parameter_names=(), + has_pagination=False, + ) + async def create( + self, + *, + device_id: str, + duration_seconds: Optional[int] = None, + include_audio: Optional[bool] = None, + ) -> CameraLiveViewSession: + """Creates a short-lived live view session for a single camera. Pass the returned session ID and token to ``/cameras/live_views/offer`` to start a WebRTC stream, and to ``/cameras/live_views/stop`` to end the session. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. To check whether a camera supports live view, use ``device.can_stream_live_video``. + + :param device_id: ID of the camera to view. + + :param duration_seconds: Number of seconds for which the live view session is valid, up to 600. + + :param include_audio: Indicates whether to include the camera's audio. + + :returns: OK""" + json_payload: Dict[str, Any] = {} + + if device_id is not None: + json_payload["device_id"] = device_id + if duration_seconds is not None: + json_payload["duration_seconds"] = duration_seconds + if include_audio is not None: + json_payload["include_audio"] = include_audio + + res = await self.client.post("/cameras/live_views/create", json=json_payload) + + return CameraLiveViewSession.from_dict( + unwrap(res, "camera_live_view_session", "/cameras/live_views/create") + ) + + @route_metadata( + path="/cameras/live_views/offer", + at_least_one_parameter_names=(), + has_pagination=False, + ) + async def offer( + self, *, camera_live_view_session_id: str, sdp_offer: str, token: str + ) -> CameraLiveViewAnswer: + """Exchanges a WebRTC SDP offer for an SDP answer that starts streaming video from the camera, for a live view session that you created using ``/cameras/live_views/create``. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param sdp_offer: WebRTC SDP offer from the viewer, limited to 64 KiB of UTF-8 data. + + :param token: Token returned when the camera live view session was created. + + :returns: OK""" + json_payload: Dict[str, Any] = {} + + if camera_live_view_session_id is not None: + json_payload["camera_live_view_session_id"] = camera_live_view_session_id + if sdp_offer is not None: + json_payload["sdp_offer"] = sdp_offer + if token is not None: + json_payload["token"] = token + + res = await self.client.post("/cameras/live_views/offer", json=json_payload) + + return CameraLiveViewAnswer.from_dict( + unwrap(res, "camera_live_view_answer", "/cameras/live_views/offer") + ) + + @route_metadata( + path="/cameras/live_views/stop", + at_least_one_parameter_names=(), + has_pagination=False, + ) + async def stop(self, *, camera_live_view_session_id: str, token: str) -> None: + """Stops a camera live view session that the current client session owns. + + Camera live view is in beta. To enable it for your workspace, contact Seam support. + + :param camera_live_view_session_id: ID of the camera live view session. + + :param token: Token returned when the camera live view session was created.""" + json_payload: Dict[str, Any] = {} + + if camera_live_view_session_id is not None: + json_payload["camera_live_view_session_id"] = camera_live_view_session_id + if token is not None: + json_payload["token"] = token + + await self.client.post("/cameras/live_views/stop", json=json_payload) + + return None diff --git a/seam/routes/client_sessions.py b/seam/routes/client_sessions.py index d070edee..974e3582 100644 --- a/seam/routes/client_sessions.py +++ b/seam/routes/client_sessions.py @@ -23,11 +23,11 @@ def create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Creates a new `client session `_. + """Creates a new `client session `_. - :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. - :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. + :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. :param customer_id: Customer ID that you want to associate with the new client session. @@ -35,18 +35,18 @@ def create( :param expires_at: Date and time at which the client session should expire, in `ISO 8601 `_ format. - :param user_identifier_key: Your user ID for the user for whom you want to create a client session. + :param user_identifier_key: Your user ID for the user for whom you want to create a client session. When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. + :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" raise NotImplementedError() @abc.abstractmethod def delete(self, *, client_session_id: str) -> None: - """Deletes a `client session `_. + """Deletes a `client session `_. :param client_session_id: ID of the client session that you want to delete.""" raise NotImplementedError() @@ -58,7 +58,7 @@ def get( client_session_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> ClientSession: - """Returns a specified `client session `_. + """Returns a specified `client session `_. :param client_session_id: ID of the client session that you want to get. @@ -78,19 +78,19 @@ def get_or_create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. + """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). :param expires_at: Date and time at which the client session should expire in `ISO 8601 `_ format. If the client session already exists, this will update the expiration before returning it. - :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). + :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" raise NotImplementedError() @@ -106,19 +106,19 @@ def grant_access( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> None: - """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. + """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. :param client_session_id: ID of the client session to which you want to grant access to resources. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. :param user_identifier_key: Your user ID for the user that you want to associate with the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :raises ValueError: At least one parameter must be provided.""" raise NotImplementedError() @@ -133,15 +133,15 @@ def list( user_identity_id: Optional[Union[str, Null]] = None, without_user_identifier_key: Optional[bool] = None, ) -> List[ClientSession]: - """Returns a list of all `client sessions `_. + """Returns a list of all `client sessions `_. :param client_session_id: ID of the client session that you want to retrieve. - :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. + :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. :param user_identifier_key: Your user ID for the user by which you want to filter client sessions. - :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. + :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. :param without_user_identifier_key: Indicates whether to retrieve only client sessions without associated user identifier keys. @@ -150,9 +150,9 @@ def list( @abc.abstractmethod def revoke(self, *, client_session_id: str) -> None: - """Revokes a `client session `_. + """Revokes a `client session `_. - Note that `deleting a client session `_ is a separate action. + Note that `deleting a client session `_ is a separate action. :param client_session_id: ID of the client session that you want to revoke.""" raise NotImplementedError() @@ -173,11 +173,11 @@ async def create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Creates a new `client session `_. + """Creates a new `client session `_. - :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. - :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. + :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. :param customer_id: Customer ID that you want to associate with the new client session. @@ -185,18 +185,18 @@ async def create( :param expires_at: Date and time at which the client session should expire, in `ISO 8601 `_ format. - :param user_identifier_key: Your user ID for the user for whom you want to create a client session. + :param user_identifier_key: Your user ID for the user for whom you want to create a client session. When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. + :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" raise NotImplementedError() @abc.abstractmethod async def delete(self, *, client_session_id: str) -> None: - """Deletes a `client session `_. + """Deletes a `client session `_. :param client_session_id: ID of the client session that you want to delete.""" raise NotImplementedError() @@ -208,7 +208,7 @@ async def get( client_session_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> ClientSession: - """Returns a specified `client session `_. + """Returns a specified `client session `_. :param client_session_id: ID of the client session that you want to get. @@ -228,19 +228,19 @@ async def get_or_create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. + """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). :param expires_at: Date and time at which the client session should expire in `ISO 8601 `_ format. If the client session already exists, this will update the expiration before returning it. - :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). + :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" raise NotImplementedError() @@ -256,19 +256,19 @@ async def grant_access( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> None: - """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. + """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. :param client_session_id: ID of the client session to which you want to grant access to resources. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. :param user_identifier_key: Your user ID for the user that you want to associate with the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :raises ValueError: At least one parameter must be provided.""" raise NotImplementedError() @@ -283,15 +283,15 @@ async def list( user_identity_id: Optional[Union[str, Null]] = None, without_user_identifier_key: Optional[bool] = None, ) -> List[ClientSession]: - """Returns a list of all `client sessions `_. + """Returns a list of all `client sessions `_. :param client_session_id: ID of the client session that you want to retrieve. - :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. + :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. :param user_identifier_key: Your user ID for the user by which you want to filter client sessions. - :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. + :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. :param without_user_identifier_key: Indicates whether to retrieve only client sessions without associated user identifier keys. @@ -300,9 +300,9 @@ async def list( @abc.abstractmethod async def revoke(self, *, client_session_id: str) -> None: - """Revokes a `client session `_. + """Revokes a `client session `_. - Note that `deleting a client session `_ is a separate action. + Note that `deleting a client session `_ is a separate action. :param client_session_id: ID of the client session that you want to revoke.""" raise NotImplementedError() @@ -330,11 +330,11 @@ def create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Creates a new `client session `_. + """Creates a new `client session `_. - :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. - :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. + :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. :param customer_id: Customer ID that you want to associate with the new client session. @@ -342,11 +342,11 @@ def create( :param expires_at: Date and time at which the client session should expire, in `ISO 8601 `_ format. - :param user_identifier_key: Your user ID for the user for whom you want to create a client session. + :param user_identifier_key: Your user ID for the user for whom you want to create a client session. When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. + :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -380,7 +380,7 @@ def create( has_pagination=False, ) def delete(self, *, client_session_id: str) -> None: - """Deletes a `client session `_. + """Deletes a `client session `_. :param client_session_id: ID of the client session that you want to delete.""" params: Dict[str, Any] = {} @@ -403,7 +403,7 @@ def get( client_session_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> ClientSession: - """Returns a specified `client session `_. + """Returns a specified `client session `_. :param client_session_id: ID of the client session that you want to get. @@ -438,19 +438,19 @@ def get_or_create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. + """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). :param expires_at: Date and time at which the client session should expire in `ISO 8601 `_ format. If the client session already exists, this will update the expiration before returning it. - :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). + :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -496,19 +496,19 @@ def grant_access( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> None: - """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. + """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. :param client_session_id: ID of the client session to which you want to grant access to resources. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. :param user_identifier_key: Your user ID for the user that you want to associate with the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :raises ValueError: At least one parameter must be provided.""" json_payload: Dict[str, Any] = {} @@ -559,15 +559,15 @@ def list( user_identity_id: Optional[Union[str, Null]] = None, without_user_identifier_key: Optional[bool] = None, ) -> List[ClientSession]: - """Returns a list of all `client sessions `_. + """Returns a list of all `client sessions `_. :param client_session_id: ID of the client session that you want to retrieve. - :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. + :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. :param user_identifier_key: Your user ID for the user by which you want to filter client sessions. - :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. + :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. :param without_user_identifier_key: Indicates whether to retrieve only client sessions without associated user identifier keys. @@ -598,9 +598,9 @@ def list( has_pagination=False, ) def revoke(self, *, client_session_id: str) -> None: - """Revokes a `client session `_. + """Revokes a `client session `_. - Note that `deleting a client session `_ is a separate action. + Note that `deleting a client session `_ is a separate action. :param client_session_id: ID of the client session that you want to revoke.""" json_payload: Dict[str, Any] = {} @@ -635,11 +635,11 @@ async def create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Creates a new `client session `_. + """Creates a new `client session `_. - :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ for which you want to create a client session. - :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. + :param connected_account_ids: IDs of the `connected accounts `_ for which you want to create a client session. :param customer_id: Customer ID that you want to associate with the new client session. @@ -647,11 +647,11 @@ async def create( :param expires_at: Date and time at which the client session should expire, in `ISO 8601 `_ format. - :param user_identifier_key: Your user ID for the user for whom you want to create a client session. + :param user_identifier_key: Your user ID for the user for whom you want to create a client session. When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. + :param user_identity_id: ID of the `user identity `_ for which you want to create a client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id`` instead. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -685,7 +685,7 @@ async def create( has_pagination=False, ) async def delete(self, *, client_session_id: str) -> None: - """Deletes a `client session `_. + """Deletes a `client session `_. :param client_session_id: ID of the client session that you want to delete.""" params: Dict[str, Any] = {} @@ -708,7 +708,7 @@ async def get( client_session_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> ClientSession: - """Returns a specified `client session `_. + """Returns a specified `client session `_. :param client_session_id: ID of the client session that you want to get. @@ -743,19 +743,19 @@ async def get_or_create( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> ClientSession: - """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. + """Returns a `client session `_ with specific characteristics or creates a new client session with these characteristics if it does not yet exist. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session (or that are already associated with the existing client session). :param expires_at: Date and time at which the client session should expire in `ISO 8601 `_ format. If the client session already exists, this will update the expiration before returning it. - :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). + :param user_identifier_key: Your user ID for the user that you want to associate with the client session (or that is already associated with the existing client session). When you authenticate with a publishable key, the ``user_identifier_key`` must be a high-entropy secret that only the user knows, such as a UUIDv4 or a salted hash. Do not use an email address, name, phone number, or other guessable value, because anyone who knows the ``user_identifier_key`` can retrieve the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session (or that are already associated with the existing client session). - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -803,19 +803,19 @@ async def grant_access( user_identity_id: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> None: - """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. + """Grants a `client session `_ access to one or more resources, such as `Connect Webviews `_, `user identities `_, and so on. :param client_session_id: ID of the client session to which you want to grant access to resources. - :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. + :param connect_webview_ids: IDs of the `Connect Webviews `_ that you want to associate with the client session. - :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. + :param connected_account_ids: IDs of the `connected accounts `_ that you want to associate with the client session. :param user_identifier_key: Your user ID for the user that you want to associate with the client session. - :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. + :param user_identity_id: ID of the `user identity `_ that you want to associate with the client session. - :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. + :param user_identity_ids: Deprecated: Use ``user_identity_id``. IDs of the `user identities `_ that you want to associate with the client session. :raises ValueError: At least one parameter must be provided.""" json_payload: Dict[str, Any] = {} @@ -866,15 +866,15 @@ async def list( user_identity_id: Optional[Union[str, Null]] = None, without_user_identifier_key: Optional[bool] = None, ) -> List[ClientSession]: - """Returns a list of all `client sessions `_. + """Returns a list of all `client sessions `_. :param client_session_id: ID of the client session that you want to retrieve. - :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. + :param connect_webview_id: ID of the `Connect Webview `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a Connect Webview. :param user_identifier_key: Your user ID for the user by which you want to filter client sessions. - :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. + :param user_identity_id: ID of the `user identity `_ for which you want to retrieve client sessions. Specify ``null`` to retrieve client sessions that are not associated with a user identity. :param without_user_identifier_key: Indicates whether to retrieve only client sessions without associated user identifier keys. @@ -905,9 +905,9 @@ async def list( has_pagination=False, ) async def revoke(self, *, client_session_id: str) -> None: - """Revokes a `client session `_. + """Revokes a `client session `_. - Note that `deleting a client session `_ is a separate action. + Note that `deleting a client session `_ is a separate action. :param client_session_id: ID of the client session that you want to revoke.""" json_payload: Dict[str, Any] = {} diff --git a/seam/routes/connect_webviews.py b/seam/routes/connect_webviews.py index 0fa2e0f8..15df1a12 100644 --- a/seam/routes/connect_webviews.py +++ b/seam/routes/connect_webviews.py @@ -56,6 +56,7 @@ def create( "ecobee", "four_suites", "dormakaba_oracode", + "dormakaba_oracode_iho", "pti", "wyze", "seam_passport", @@ -81,6 +82,9 @@ def create( "sifely", "thirty_three_lock", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -117,21 +121,21 @@ def create( ] = None, wait_for_device_creation: Optional[bool] = None, ) -> ConnectWebview: - """Creates a new `Connect Webview `_. + """Creates a new `Connect Webview `_. To enable a user to connect their devices or systems to Seam, they must sign in to their device or system account. To enable a user to sign in, you create a ``connect_webview``. After creating the Connect Webview, you receive a URL that you can use to display the visual component of this Connect Webview for your user. You can open an iframe or new window to display the Connect Webview. You should make a new ``connect_webview`` for each unique login request. Each ``connect_webview`` tracks the user that signed in with it. You receive an error if you reuse a Connect Webview for the same user twice or if you use the same Connect Webview for multiple users. - See also: `Connect Webview Process `_. + See also: `Connect Webview Process `_. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through the Connect Webview. If not provided, defaults will be determined based on the accepted providers. - :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. + :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. - :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param custom_redirect_failure_url: Alternative URL that you want to redirect the user to on an error. If you do not set this parameter, the Connect Webview falls back to the ``custom_redirect_url``. @@ -141,16 +145,16 @@ def create( :param excluded_providers: List of provider keys to exclude from the Connect Webview. These providers will not be shown when the user tries to connect an account. - :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. + :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. - :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod def delete(self, *, connect_webview_id: str) -> None: - """Deletes a `Connect Webview `_. + """Deletes a `Connect Webview `_. You do not need to delete a Connect Webview once a user completes it. Instead, you can simply ignore completed Connect Webviews. @@ -159,7 +163,7 @@ def delete(self, *, connect_webview_id: str) -> None: @abc.abstractmethod def get(self, *, connect_webview_id: str) -> ConnectWebview: - """Returns a specified `Connect Webview `_. + """Returns a specified `Connect Webview `_. Unless you're using a ``custom_redirect_url``, you should poll a newly-created ``connect_webview`` to find out if the user has signed in or to get details about what devices they've connected. @@ -179,9 +183,9 @@ def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectWebview]: - """Returns a list of all `Connect Webviews `_. + """Returns a list of all `Connect Webviews `_. - :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list connect webviews. @@ -244,6 +248,7 @@ async def create( "ecobee", "four_suites", "dormakaba_oracode", + "dormakaba_oracode_iho", "pti", "wyze", "seam_passport", @@ -269,6 +274,9 @@ async def create( "sifely", "thirty_three_lock", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -305,21 +313,21 @@ async def create( ] = None, wait_for_device_creation: Optional[bool] = None, ) -> ConnectWebview: - """Creates a new `Connect Webview `_. + """Creates a new `Connect Webview `_. To enable a user to connect their devices or systems to Seam, they must sign in to their device or system account. To enable a user to sign in, you create a ``connect_webview``. After creating the Connect Webview, you receive a URL that you can use to display the visual component of this Connect Webview for your user. You can open an iframe or new window to display the Connect Webview. You should make a new ``connect_webview`` for each unique login request. Each ``connect_webview`` tracks the user that signed in with it. You receive an error if you reuse a Connect Webview for the same user twice or if you use the same Connect Webview for multiple users. - See also: `Connect Webview Process `_. + See also: `Connect Webview Process `_. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through the Connect Webview. If not provided, defaults will be determined based on the accepted providers. - :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. + :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. - :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param custom_redirect_failure_url: Alternative URL that you want to redirect the user to on an error. If you do not set this parameter, the Connect Webview falls back to the ``custom_redirect_url``. @@ -329,16 +337,16 @@ async def create( :param excluded_providers: List of provider keys to exclude from the Connect Webview. These providers will not be shown when the user tries to connect an account. - :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. + :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. - :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod async def delete(self, *, connect_webview_id: str) -> None: - """Deletes a `Connect Webview `_. + """Deletes a `Connect Webview `_. You do not need to delete a Connect Webview once a user completes it. Instead, you can simply ignore completed Connect Webviews. @@ -347,7 +355,7 @@ async def delete(self, *, connect_webview_id: str) -> None: @abc.abstractmethod async def get(self, *, connect_webview_id: str) -> ConnectWebview: - """Returns a specified `Connect Webview `_. + """Returns a specified `Connect Webview `_. Unless you're using a ``custom_redirect_url``, you should poll a newly-created ``connect_webview`` to find out if the user has signed in or to get details about what devices they've connected. @@ -367,9 +375,9 @@ async def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectWebview]: - """Returns a list of all `Connect Webviews `_. + """Returns a list of all `Connect Webviews `_. - :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list connect webviews. @@ -439,6 +447,7 @@ def create( "ecobee", "four_suites", "dormakaba_oracode", + "dormakaba_oracode_iho", "pti", "wyze", "seam_passport", @@ -464,6 +473,9 @@ def create( "sifely", "thirty_three_lock", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -500,21 +512,21 @@ def create( ] = None, wait_for_device_creation: Optional[bool] = None, ) -> ConnectWebview: - """Creates a new `Connect Webview `_. + """Creates a new `Connect Webview `_. To enable a user to connect their devices or systems to Seam, they must sign in to their device or system account. To enable a user to sign in, you create a ``connect_webview``. After creating the Connect Webview, you receive a URL that you can use to display the visual component of this Connect Webview for your user. You can open an iframe or new window to display the Connect Webview. You should make a new ``connect_webview`` for each unique login request. Each ``connect_webview`` tracks the user that signed in with it. You receive an error if you reuse a Connect Webview for the same user twice or if you use the same Connect Webview for multiple users. - See also: `Connect Webview Process `_. + See also: `Connect Webview Process `_. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through the Connect Webview. If not provided, defaults will be determined based on the accepted providers. - :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. + :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. - :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param custom_redirect_failure_url: Alternative URL that you want to redirect the user to on an error. If you do not set this parameter, the Connect Webview falls back to the ``custom_redirect_url``. @@ -524,9 +536,9 @@ def create( :param excluded_providers: List of provider keys to exclude from the Connect Webview. These providers will not be shown when the user tries to connect an account. - :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. + :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. - :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -566,7 +578,7 @@ def create( has_pagination=False, ) def delete(self, *, connect_webview_id: str) -> None: - """Deletes a `Connect Webview `_. + """Deletes a `Connect Webview `_. You do not need to delete a Connect Webview once a user completes it. Instead, you can simply ignore completed Connect Webviews. @@ -586,7 +598,7 @@ def delete(self, *, connect_webview_id: str) -> None: has_pagination=False, ) def get(self, *, connect_webview_id: str) -> ConnectWebview: - """Returns a specified `Connect Webview `_. + """Returns a specified `Connect Webview `_. Unless you're using a ``custom_redirect_url``, you should poll a newly-created ``connect_webview`` to find out if the user has signed in or to get details about what devices they've connected. @@ -619,9 +631,9 @@ def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectWebview]: - """Returns a list of all `Connect Webviews `_. + """Returns a list of all `Connect Webviews `_. - :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list connect webviews. @@ -716,6 +728,7 @@ async def create( "ecobee", "four_suites", "dormakaba_oracode", + "dormakaba_oracode_iho", "pti", "wyze", "seam_passport", @@ -741,6 +754,9 @@ async def create( "sifely", "thirty_three_lock", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -777,21 +793,21 @@ async def create( ] = None, wait_for_device_creation: Optional[bool] = None, ) -> ConnectWebview: - """Creates a new `Connect Webview `_. + """Creates a new `Connect Webview `_. To enable a user to connect their devices or systems to Seam, they must sign in to their device or system account. To enable a user to sign in, you create a ``connect_webview``. After creating the Connect Webview, you receive a URL that you can use to display the visual component of this Connect Webview for your user. You can open an iframe or new window to display the Connect Webview. You should make a new ``connect_webview`` for each unique login request. Each ``connect_webview`` tracks the user that signed in with it. You receive an error if you reuse a Connect Webview for the same user twice or if you use the same Connect Webview for multiple users. - See also: `Connect Webview Process `_. + See also: `Connect Webview Process `_. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through the Connect Webview. If not provided, defaults will be determined based on the accepted providers. - :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. + :param accepted_providers: Accepted device provider keys as an alternative to ``provider_category``. Use this parameter to specify accepted providers explicitly. See `Customize the Brands to Display in Your Connect Webviews `_. To list all provider keys, use ```/devices/list_device_providers`` `_ with no filters. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. See also: `Customize the Behavior Settings of Your Connect Webviews `_. - :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the Connect Webview. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a Connect Webview `_ enables you to store custom information, like customer details or internal IDs from your application. The custom metadata is then transferred to any `connected accounts `_ that were connected using the Connect Webview, making it easy to find and filter these resources in your `workspace `_. You can also `filter Connect Webviews by custom metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param custom_redirect_failure_url: Alternative URL that you want to redirect the user to on an error. If you do not set this parameter, the Connect Webview falls back to the ``custom_redirect_url``. @@ -801,9 +817,9 @@ async def create( :param excluded_providers: List of provider keys to exclude from the Connect Webview. These providers will not be shown when the user tries to connect an account. - :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. + :param provider_category: Specifies the category of providers that you want to include. To list all providers within a category, use ```/devices/list_device_providers`` `_ with the desired ``provider_category`` filter. - :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. + :param wait_for_device_creation: Indicates whether Seam should finish syncing all devices in a newly-connected account before completing the associated Connect Webview. See also: `Customize the Behavior Settings of Your Connect Webviews `_. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -843,7 +859,7 @@ async def create( has_pagination=False, ) async def delete(self, *, connect_webview_id: str) -> None: - """Deletes a `Connect Webview `_. + """Deletes a `Connect Webview `_. You do not need to delete a Connect Webview once a user completes it. Instead, you can simply ignore completed Connect Webviews. @@ -863,7 +879,7 @@ async def delete(self, *, connect_webview_id: str) -> None: has_pagination=False, ) async def get(self, *, connect_webview_id: str) -> ConnectWebview: - """Returns a specified `Connect Webview `_. + """Returns a specified `Connect Webview `_. Unless you're using a ``custom_redirect_url``, you should poll a newly-created ``connect_webview`` to find out if the user has signed in or to get details about what devices they've connected. @@ -896,9 +912,9 @@ async def list( search: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectWebview]: - """Returns a list of all `Connect Webviews `_. + """Returns a list of all `Connect Webviews `_. - :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Custom metadata pairs by which you want to `filter Connect Webviews `_. Returns Connect Webviews with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list connect webviews. diff --git a/seam/routes/connected_accounts.py b/seam/routes/connected_accounts.py index eaf5d2a8..242cd6ca 100644 --- a/seam/routes/connected_accounts.py +++ b/seam/routes/connected_accounts.py @@ -24,7 +24,7 @@ def simulate(self) -> AbstractConnectedAccountsSimulate: @abc.abstractmethod def delete(self, *, connected_account_id: str) -> None: - """Deletes a specified `connected account `_. + """Deletes a specified `connected account `_. Deleting a connected account triggers a ``connected_account.deleted`` event and removes the connected account and all data associated with the connected account from Seam, including devices, events, access codes, and so on. For every deleted resource, Seam sends a corresponding deleted event, but the resource is not deleted from the provider. @@ -38,7 +38,7 @@ def delete(self, *, connected_account_id: str) -> None: def get( self, *, connected_account_id: Optional[str] = None, email: Optional[str] = None ) -> ConnectedAccount: - """Returns a specified `connected account `_. + """Returns a specified `connected account `_. :param connected_account_id: ID of the connected account that you want to get. @@ -61,7 +61,7 @@ def list( space_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectedAccount]: - """Returns a list of all `connected accounts `_. + """Returns a list of all `connected accounts `_. :param custom_metadata_has: Custom metadata pairs by which you want to filter connected accounts. Returns connected accounts with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. @@ -82,7 +82,7 @@ def list( @abc.abstractmethod def sync(self, *, connected_account_id: str) -> None: - """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. + """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. :param connected_account_id: ID of the connected account that you want to sync. """ @@ -105,15 +105,15 @@ def update( customer_key: Optional[str] = None, display_name: Optional[str] = None, ) -> None: - """Updates a `connected account `_. + """Updates a `connected account `_. :param connected_account_id: ID of the connected account that you want to update. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through this connected account. Valid values are ``lock``, ``thermostat``, ``noise_sensor``, and ``access_control``. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. - :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param customer_key: The customer key to associate with this connected account. If provided, the connected account and all resources under the connected account will be moved to this customer. May only be provided if the connected account is not already associated with a customer. @@ -131,7 +131,7 @@ def simulate(self) -> AbstractAsyncConnectedAccountsSimulate: @abc.abstractmethod async def delete(self, *, connected_account_id: str) -> None: - """Deletes a specified `connected account `_. + """Deletes a specified `connected account `_. Deleting a connected account triggers a ``connected_account.deleted`` event and removes the connected account and all data associated with the connected account from Seam, including devices, events, access codes, and so on. For every deleted resource, Seam sends a corresponding deleted event, but the resource is not deleted from the provider. @@ -145,7 +145,7 @@ async def delete(self, *, connected_account_id: str) -> None: async def get( self, *, connected_account_id: Optional[str] = None, email: Optional[str] = None ) -> ConnectedAccount: - """Returns a specified `connected account `_. + """Returns a specified `connected account `_. :param connected_account_id: ID of the connected account that you want to get. @@ -168,7 +168,7 @@ async def list( space_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectedAccount]: - """Returns a list of all `connected accounts `_. + """Returns a list of all `connected accounts `_. :param custom_metadata_has: Custom metadata pairs by which you want to filter connected accounts. Returns connected accounts with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. @@ -189,7 +189,7 @@ async def list( @abc.abstractmethod async def sync(self, *, connected_account_id: str) -> None: - """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. + """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. :param connected_account_id: ID of the connected account that you want to sync. """ @@ -212,15 +212,15 @@ async def update( customer_key: Optional[str] = None, display_name: Optional[str] = None, ) -> None: - """Updates a `connected account `_. + """Updates a `connected account `_. :param connected_account_id: ID of the connected account that you want to update. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through this connected account. Valid values are ``lock``, ``thermostat``, ``noise_sensor``, and ``access_control``. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. - :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param customer_key: The customer key to associate with this connected account. If provided, the connected account and all resources under the connected account will be moved to this customer. May only be provided if the connected account is not already associated with a customer. @@ -245,7 +245,7 @@ def simulate(self) -> ConnectedAccountsSimulate: has_pagination=False, ) def delete(self, *, connected_account_id: str) -> None: - """Deletes a specified `connected account `_. + """Deletes a specified `connected account `_. Deleting a connected account triggers a ``connected_account.deleted`` event and removes the connected account and all data associated with the connected account from Seam, including devices, events, access codes, and so on. For every deleted resource, Seam sends a corresponding deleted event, but the resource is not deleted from the provider. @@ -273,7 +273,7 @@ def delete(self, *, connected_account_id: str) -> None: def get( self, *, connected_account_id: Optional[str] = None, email: Optional[str] = None ) -> ConnectedAccount: - """Returns a specified `connected account `_. + """Returns a specified `connected account `_. :param connected_account_id: ID of the connected account that you want to get. @@ -322,7 +322,7 @@ def list( space_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectedAccount]: - """Returns a list of all `connected accounts `_. + """Returns a list of all `connected accounts `_. :param custom_metadata_has: Custom metadata pairs by which you want to filter connected accounts. Returns connected accounts with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. @@ -374,7 +374,7 @@ def list( has_pagination=False, ) def sync(self, *, connected_account_id: str) -> None: - """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. + """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. :param connected_account_id: ID of the connected account that you want to sync. """ @@ -408,15 +408,15 @@ def update( customer_key: Optional[str] = None, display_name: Optional[str] = None, ) -> None: - """Updates a `connected account `_. + """Updates a `connected account `_. :param connected_account_id: ID of the connected account that you want to update. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through this connected account. Valid values are ``lock``, ``thermostat``, ``noise_sensor``, and ``access_control``. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. - :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param customer_key: The customer key to associate with this connected account. If provided, the connected account and all resources under the connected account will be moved to this customer. May only be provided if the connected account is not already associated with a customer. @@ -462,7 +462,7 @@ def simulate(self) -> AsyncConnectedAccountsSimulate: has_pagination=False, ) async def delete(self, *, connected_account_id: str) -> None: - """Deletes a specified `connected account `_. + """Deletes a specified `connected account `_. Deleting a connected account triggers a ``connected_account.deleted`` event and removes the connected account and all data associated with the connected account from Seam, including devices, events, access codes, and so on. For every deleted resource, Seam sends a corresponding deleted event, but the resource is not deleted from the provider. @@ -490,7 +490,7 @@ async def delete(self, *, connected_account_id: str) -> None: async def get( self, *, connected_account_id: Optional[str] = None, email: Optional[str] = None ) -> ConnectedAccount: - """Returns a specified `connected account `_. + """Returns a specified `connected account `_. :param connected_account_id: ID of the connected account that you want to get. @@ -539,7 +539,7 @@ async def list( space_id: Optional[str] = None, user_identifier_key: Optional[str] = None, ) -> List[ConnectedAccount]: - """Returns a list of all `connected accounts `_. + """Returns a list of all `connected accounts `_. :param custom_metadata_has: Custom metadata pairs by which you want to filter connected accounts. Returns connected accounts with ``custom_metadata`` that contains all of the provided key:value pairs. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. @@ -591,7 +591,7 @@ async def list( has_pagination=False, ) async def sync(self, *, connected_account_id: str) -> None: - """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. + """Request a `connected account `_ sync attempt for the specified ``connected_account_id``. :param connected_account_id: ID of the connected account that you want to sync. """ @@ -625,15 +625,15 @@ async def update( customer_key: Optional[str] = None, display_name: Optional[str] = None, ) -> None: - """Updates a `connected account `_. + """Updates a `connected account `_. :param connected_account_id: ID of the connected account that you want to update. :param accepted_capabilities: List of accepted device capabilities that restrict the types of devices that can be connected through this connected account. Valid values are ``lock``, ``thermostat``, ``noise_sensor``, and ``access_control``. - :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. + :param automatically_manage_new_devices: Indicates whether newly-added devices should appear as `managed devices `_. - :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the connected account. Entirely replaces the existing custom metadata object. If a new Connect Webview contains custom metadata and is used to reconnect a connected account, the custom metadata from the Connect Webview will entirely replace the entire custom metadata object on the connected account. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a connected account `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter connected accounts by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param customer_key: The customer key to associate with this connected account. If provided, the connected account and all resources under the connected account will be moved to this customer. May only be provided if the connected account is not already associated with a customer. diff --git a/seam/routes/connected_accounts_simulate.py b/seam/routes/connected_accounts_simulate.py index 2e17d693..90a2a8fb 100644 --- a/seam/routes/connected_accounts_simulate.py +++ b/seam/routes/connected_accounts_simulate.py @@ -8,7 +8,7 @@ class AbstractConnectedAccountsSimulate(abc.ABC): @abc.abstractmethod def disconnect(self, *, connected_account_id: str) -> None: - """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. + """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. :param connected_account_id: ID of the connected account you want to simulate as disconnected. """ @@ -19,7 +19,7 @@ class AbstractAsyncConnectedAccountsSimulate(abc.ABC): @abc.abstractmethod async def disconnect(self, *, connected_account_id: str) -> None: - """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. + """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. :param connected_account_id: ID of the connected account you want to simulate as disconnected. """ @@ -37,7 +37,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) def disconnect(self, *, connected_account_id: str) -> None: - """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. + """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. :param connected_account_id: ID of the connected account you want to simulate as disconnected. """ @@ -62,7 +62,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) async def disconnect(self, *, connected_account_id: str) -> None: - """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. + """Simulates a connected account becoming disconnected from Seam. Only applicable for `sandbox workspaces `_. :param connected_account_id: ID of the connected account you want to simulate as disconnected. """ diff --git a/seam/routes/devices.py b/seam/routes/devices.py index 08fb05ed..61b86de1 100644 --- a/seam/routes/devices.py +++ b/seam/routes/devices.py @@ -37,7 +37,7 @@ def unmanaged(self) -> AbstractDevicesUnmanaged: def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `device `_. + """Returns a specified `device `_. You must specify either ``device_id`` or ``name``. @@ -106,6 +106,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -154,6 +157,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -185,12 +191,14 @@ def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -203,6 +211,9 @@ def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -220,7 +231,7 @@ def list( unstable_location_id: Optional[Union[str, Null]] = None, user_identifier_key: Optional[str] = None, ) -> List[Device]: - """Returns a list of all `devices `_. + """Returns a list of all `devices `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -230,7 +241,7 @@ def list( :param created_before: Timestamp by which to limit returned devices. Returns devices created before this timestamp. - :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list devices. @@ -276,9 +287,9 @@ def list_device_providers( ) -> List[DeviceProvider]: """Returns a list of all device providers. - The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. + The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. - When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. + When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. :param provider_category: Category for which you want to list providers. @@ -303,15 +314,15 @@ def update( name: Optional[Union[str, Null]] = None, properties: Optional[Dict[str, Any]] = None, ) -> None: - """Updates a specified `device `_. + """Updates a specified `device `_. - You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. + You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. :param device_id: ID of the device that you want to update. - :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. + :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. - :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param is_managed: Indicates whether the device is managed. To unmanage a device, set ``is_managed`` to ``false``. @@ -337,7 +348,7 @@ def unmanaged(self) -> AbstractAsyncDevicesUnmanaged: async def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `device `_. + """Returns a specified `device `_. You must specify either ``device_id`` or ``name``. @@ -406,6 +417,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -454,6 +468,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -485,12 +502,14 @@ async def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -503,6 +522,9 @@ async def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -520,7 +542,7 @@ async def list( unstable_location_id: Optional[Union[str, Null]] = None, user_identifier_key: Optional[str] = None, ) -> List[Device]: - """Returns a list of all `devices `_. + """Returns a list of all `devices `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -530,7 +552,7 @@ async def list( :param created_before: Timestamp by which to limit returned devices. Returns devices created before this timestamp. - :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list devices. @@ -576,9 +598,9 @@ async def list_device_providers( ) -> List[DeviceProvider]: """Returns a list of all device providers. - The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. + The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. - When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. + When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. :param provider_category: Category for which you want to list providers. @@ -603,15 +625,15 @@ async def update( name: Optional[Union[str, Null]] = None, properties: Optional[Dict[str, Any]] = None, ) -> None: - """Updates a specified `device `_. + """Updates a specified `device `_. - You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. + You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. :param device_id: ID of the device that you want to update. - :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. + :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. - :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param is_managed: Indicates whether the device is managed. To unmanage a device, set ``is_managed`` to ``false``. @@ -647,7 +669,7 @@ def unmanaged(self) -> DevicesUnmanaged: def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `device `_. + """Returns a specified `device `_. You must specify either ``device_id`` or ``name``. @@ -736,6 +758,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -784,6 +809,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -815,12 +843,14 @@ def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -833,6 +863,9 @@ def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -850,7 +883,7 @@ def list( unstable_location_id: Optional[Union[str, Null]] = None, user_identifier_key: Optional[str] = None, ) -> List[Device]: - """Returns a list of all `devices `_. + """Returns a list of all `devices `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -860,7 +893,7 @@ def list( :param created_before: Timestamp by which to limit returned devices. Returns devices created before this timestamp. - :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list devices. @@ -953,9 +986,9 @@ def list_device_providers( ) -> List[DeviceProvider]: """Returns a list of all device providers. - The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. + The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. - When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. + When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. :param provider_category: Category for which you want to list providers. @@ -1005,15 +1038,15 @@ def update( name: Optional[Union[str, Null]] = None, properties: Optional[Dict[str, Any]] = None, ) -> None: - """Updates a specified `device `_. + """Updates a specified `device `_. - You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. + You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. :param device_id: ID of the device that you want to update. - :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. + :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. - :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param is_managed: Indicates whether the device is managed. To unmanage a device, set ``is_managed`` to ``false``. @@ -1068,7 +1101,7 @@ def unmanaged(self) -> AsyncDevicesUnmanaged: async def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `device `_. + """Returns a specified `device `_. You must specify either ``device_id`` or ``name``. @@ -1157,6 +1190,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -1205,6 +1241,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -1236,12 +1275,14 @@ async def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -1254,6 +1295,9 @@ async def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -1271,7 +1315,7 @@ async def list( unstable_location_id: Optional[Union[str, Null]] = None, user_identifier_key: Optional[str] = None, ) -> List[Device]: - """Returns a list of all `devices `_. + """Returns a list of all `devices `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -1281,7 +1325,7 @@ async def list( :param created_before: Timestamp by which to limit returned devices. Returns devices created before this timestamp. - :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. + :param custom_metadata_has: Set of key:value `custom metadata `_ pairs for which you want to list devices. Key names cannot contain a period (.). Specify ``null`` to match a key that is unset. A key given an empty string is omitted from the filter. :param customer_key: Customer key for which you want to list devices. @@ -1374,9 +1418,9 @@ async def list_device_providers( ) -> List[DeviceProvider]: """Returns a list of all device providers. - The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. + The information that this endpoint returns for each provider includes a set of `capability flags `_, such as ``device_provider.can_remotely_unlock``. If at least one supported device from a provider has a specific capability, the corresponding capability flag is ``true``. - When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. + When you create a `Connect Webview `_, you can customize the providers—that is, the brands—that it displays. In the ``/connect_webviews/create`` request, include the desired set of device provider keys in the ``accepted_providers`` parameter. See also `Customize the Brands to Display in Your Connect Webviews `_. :param provider_category: Category for which you want to list providers. @@ -1426,15 +1470,15 @@ async def update( name: Optional[Union[str, Null]] = None, properties: Optional[Dict[str, Any]] = None, ) -> None: - """Updates a specified `device `_. + """Updates a specified `device `_. - You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. + You can add or change `custom metadata `_ for a device, change the device's name, or `convert a managed device to unmanaged `_. :param device_id: ID of the device that you want to update. - :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. + :param backup_access_code_pool_enabled: Indicates whether the device's `backup access code pool `_ is enabled. Set to ``false`` to disable the pool: Seam stops refilling it and removes any backup codes that have not yet been pulled into active use. - :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. + :param custom_metadata: Custom metadata that you want to associate with the device. Supports up to 50 JSON key:value pairs, with key names up to 40 characters long that cannot contain a period (.). `Adding custom metadata to a device `_ enables you to store custom information, like customer details or internal IDs from your application. Then, you can `filter devices by the desired metadata `_. Set a key to ``null`` or to an empty string to remove that key from the custom metadata. :param is_managed: Indicates whether the device is managed. To unmanage a device, set ``is_managed`` to ``false``. diff --git a/seam/routes/devices_simulate.py b/seam/routes/devices_simulate.py index 5649922c..4a5040a6 100644 --- a/seam/routes/devices_simulate.py +++ b/seam/routes/devices_simulate.py @@ -8,7 +8,7 @@ class AbstractDevicesSimulate(abc.ABC): @abc.abstractmethod def connect(self, *, device_id: str) -> None: - """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate connecting to Seam. """ @@ -26,7 +26,7 @@ def connect_to_hub(self, *, device_id: str) -> None: @abc.abstractmethod def disconnect(self, *, device_id: str) -> None: - """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate disconnecting from Seam. """ @@ -56,7 +56,7 @@ def paid_subscription(self, *, device_id: str, is_expired: bool) -> None: @abc.abstractmethod def remove(self, *, device_id: str) -> None: - """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate removing from Seam. """ @@ -67,7 +67,7 @@ class AbstractAsyncDevicesSimulate(abc.ABC): @abc.abstractmethod async def connect(self, *, device_id: str) -> None: - """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate connecting to Seam. """ @@ -85,7 +85,7 @@ async def connect_to_hub(self, *, device_id: str) -> None: @abc.abstractmethod async def disconnect(self, *, device_id: str) -> None: - """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate disconnecting from Seam. """ @@ -115,7 +115,7 @@ async def paid_subscription(self, *, device_id: str, is_expired: bool) -> None: @abc.abstractmethod async def remove(self, *, device_id: str) -> None: - """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate removing from Seam. """ @@ -133,7 +133,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) def connect(self, *, device_id: str) -> None: - """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate connecting to Seam. """ @@ -173,7 +173,7 @@ def connect_to_hub(self, *, device_id: str) -> None: has_pagination=False, ) def disconnect(self, *, device_id: str) -> None: - """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate disconnecting from Seam. """ @@ -238,7 +238,7 @@ def paid_subscription(self, *, device_id: str, is_expired: bool) -> None: has_pagination=False, ) def remove(self, *, device_id: str) -> None: - """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate removing from Seam. """ @@ -263,7 +263,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) async def connect(self, *, device_id: str) -> None: - """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates connecting a device to Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate connecting to Seam. """ @@ -303,7 +303,7 @@ async def connect_to_hub(self, *, device_id: str) -> None: has_pagination=False, ) async def disconnect(self, *, device_id: str) -> None: - """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates disconnecting a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate disconnecting from Seam. """ @@ -370,7 +370,7 @@ async def paid_subscription(self, *, device_id: str, is_expired: bool) -> None: has_pagination=False, ) async def remove(self, *, device_id: str) -> None: - """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. + """Simulates removing a device from Seam. Only applicable for `sandbox devices `_. See also `Testing Your App Against Device Disconnection and Removal `_. :param device_id: ID of the device that you want to simulate removing from Seam. """ diff --git a/seam/routes/devices_unmanaged.py b/seam/routes/devices_unmanaged.py index 7112889d..9b551602 100644 --- a/seam/routes/devices_unmanaged.py +++ b/seam/routes/devices_unmanaged.py @@ -15,9 +15,9 @@ class AbstractDevicesUnmanaged(abc.ABC): def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> UnmanagedDevice: - """Returns a specified `unmanaged device `_. + """Returns a specified `unmanaged device `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. You must specify either ``device_id`` or ``name``. @@ -85,6 +85,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -133,6 +136,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -164,12 +170,14 @@ def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -182,6 +190,9 @@ def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -196,9 +207,9 @@ def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedDevice]: - """Returns a list of all `unmanaged devices `_. + """Returns a list of all `unmanaged devices `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -235,9 +246,9 @@ def update( custom_metadata: Optional[Dict[str, Union[str, bool]]] = None, is_managed: Optional[Literal[True]] = None, ) -> None: - """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. + """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param device_id: ID of the unmanaged device that you want to update. @@ -254,9 +265,9 @@ class AbstractAsyncDevicesUnmanaged(abc.ABC): async def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> UnmanagedDevice: - """Returns a specified `unmanaged device `_. + """Returns a specified `unmanaged device `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. You must specify either ``device_id`` or ``name``. @@ -324,6 +335,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -372,6 +386,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -403,12 +420,14 @@ async def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -421,6 +440,9 @@ async def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -435,9 +457,9 @@ async def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedDevice]: - """Returns a list of all `unmanaged devices `_. + """Returns a list of all `unmanaged devices `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -474,9 +496,9 @@ async def update( custom_metadata: Optional[Dict[str, Union[str, bool]]] = None, is_managed: Optional[Literal[True]] = None, ) -> None: - """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. + """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param device_id: ID of the unmanaged device that you want to update. @@ -503,9 +525,9 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> UnmanagedDevice: - """Returns a specified `unmanaged device `_. + """Returns a specified `unmanaged device `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. You must specify either ``device_id`` or ``name``. @@ -599,6 +621,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -647,6 +672,9 @@ def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -678,12 +706,14 @@ def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -696,6 +726,9 @@ def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -710,9 +743,9 @@ def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedDevice]: - """Returns a list of all `unmanaged devices `_. + """Returns a list of all `unmanaged devices `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -788,9 +821,9 @@ def update( custom_metadata: Optional[Dict[str, Union[str, bool]]] = None, is_managed: Optional[Literal[True]] = None, ) -> None: - """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. + """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param device_id: ID of the unmanaged device that you want to update. @@ -828,9 +861,9 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): async def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> UnmanagedDevice: - """Returns a specified `unmanaged device `_. + """Returns a specified `unmanaged device `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. You must specify either ``device_id`` or ``name``. @@ -924,6 +957,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] = None, device_types: Optional[ @@ -972,6 +1008,9 @@ async def list( "ios_phone", "android_phone", "ring_camera", + "tapo_camera", + "arlo_camera", + "reolink_camera", ] ] ] = None, @@ -1003,12 +1042,14 @@ async def list( "ttlock", "igloohome", "controlbyweb", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", "ecobee", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "honeywell_resideo", "keynest", "korelock", @@ -1021,6 +1062,9 @@ async def list( "tado", "ultraloq", "ring", + "tapo", + "arlo", + "reolink", "ical", "lodgify", "hostaway", @@ -1035,9 +1079,9 @@ async def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedDevice]: - """Returns a list of all `unmanaged devices `_. + """Returns a list of all `unmanaged devices `_. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -1113,9 +1157,9 @@ async def update( custom_metadata: Optional[Dict[str, Union[str, bool]]] = None, is_managed: Optional[Literal[True]] = None, ) -> None: - """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. + """Updates a specified `unmanaged device `_. To convert an unmanaged device to managed, set ``is_managed`` to ``true``. - An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. + An unmanaged device has a limited set of visible properties and a subset of supported events. You cannot control an unmanaged device. Any `access codes `_ on an unmanaged device are unmanaged. To control an unmanaged device with Seam, `convert it to a managed device `_. :param device_id: ID of the unmanaged device that you want to update. diff --git a/seam/routes/events.py b/seam/routes/events.py index 6f8a21ad..7158d15e 100644 --- a/seam/routes/events.py +++ b/seam/routes/events.py @@ -17,7 +17,7 @@ def get( device_id: Optional[str] = None, event_type: Optional[str] = None, ) -> SeamEvent: - """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. + """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. :param event_id: Unique identifier for the event that you want to get. @@ -71,7 +71,7 @@ def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -190,7 +190,7 @@ def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -299,7 +299,7 @@ def list( unstable_offset: Optional[float] = None, user_identity_id: Optional[str] = None, ) -> List[SeamEvent]: - """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. + """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. :param access_code_id: ID of the access code for which you want to list events. @@ -373,7 +373,7 @@ async def get( device_id: Optional[str] = None, event_type: Optional[str] = None, ) -> SeamEvent: - """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. + """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. :param event_id: Unique identifier for the event that you want to get. @@ -427,7 +427,7 @@ async def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -546,7 +546,7 @@ async def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -655,7 +655,7 @@ async def list( unstable_offset: Optional[float] = None, user_identity_id: Optional[str] = None, ) -> List[SeamEvent]: - """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. + """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. :param access_code_id: ID of the access code for which you want to list events. @@ -740,7 +740,7 @@ def get( device_id: Optional[str] = None, event_type: Optional[str] = None, ) -> SeamEvent: - """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. + """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. :param event_id: Unique identifier for the event that you want to get. @@ -847,7 +847,7 @@ def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -966,7 +966,7 @@ def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -1075,7 +1075,7 @@ def list( unstable_offset: Optional[float] = None, user_identity_id: Optional[str] = None, ) -> List[SeamEvent]: - """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. + """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. :param access_code_id: ID of the access code for which you want to list events. @@ -1258,7 +1258,7 @@ async def get( device_id: Optional[str] = None, event_type: Optional[str] = None, ) -> SeamEvent: - """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. + """Returns a specified event. This endpoint returns the same event that would be sent to a `webhook `_, but it enables you to retrieve an event that already took place. :param event_id: Unique identifier for the event that you want to get. @@ -1365,7 +1365,7 @@ async def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -1484,7 +1484,7 @@ async def list( "access_code.delay_in_issuing", "access_code.failed_to_issue", "access_code.failed_to_update", - "access_code.failed_to_expire", + "access_code.failed_to_delete", "access_code.deleted", "access_code.delay_in_removing_from_device", "access_code.failed_to_remove_from_device", @@ -1593,7 +1593,7 @@ async def list( unstable_offset: Optional[float] = None, user_identity_id: Optional[str] = None, ) -> List[SeamEvent]: - """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. + """Returns a list of all events. This endpoint returns the same events that would be sent to a `webhook `_, but it enables you to filter or see events that already took place. :param access_code_id: ID of the access code for which you want to list events. diff --git a/seam/routes/instant_keys.py b/seam/routes/instant_keys.py index 417b0bd0..40f4c868 100644 --- a/seam/routes/instant_keys.py +++ b/seam/routes/instant_keys.py @@ -11,7 +11,7 @@ class AbstractInstantKeys(abc.ABC): @abc.abstractmethod def delete(self, *, instant_key_id: str) -> None: - """Deletes a specified `Instant Key `_. + """Deletes a specified `Instant Key `_. :param instant_key_id: ID of the Instant Key that you want to delete.""" raise NotImplementedError() @@ -23,7 +23,7 @@ def get( instant_key_id: Optional[str] = None, instant_key_url: Optional[str] = None, ) -> InstantKey: - """Gets an `instant key `_. + """Gets an `instant key `_. :param instant_key_id: ID of the instant key to get. @@ -36,7 +36,7 @@ def get( @abc.abstractmethod def list(self, *, user_identity_id: Optional[str] = None) -> List[InstantKey]: - """Returns a list of all `instant keys `_. + """Returns a list of all `instant keys `_. :param user_identity_id: ID of the user identity by which you want to filter the list of Instant Keys. @@ -48,7 +48,7 @@ class AbstractAsyncInstantKeys(abc.ABC): @abc.abstractmethod async def delete(self, *, instant_key_id: str) -> None: - """Deletes a specified `Instant Key `_. + """Deletes a specified `Instant Key `_. :param instant_key_id: ID of the Instant Key that you want to delete.""" raise NotImplementedError() @@ -60,7 +60,7 @@ async def get( instant_key_id: Optional[str] = None, instant_key_url: Optional[str] = None, ) -> InstantKey: - """Gets an `instant key `_. + """Gets an `instant key `_. :param instant_key_id: ID of the instant key to get. @@ -73,7 +73,7 @@ async def get( @abc.abstractmethod async def list(self, *, user_identity_id: Optional[str] = None) -> List[InstantKey]: - """Returns a list of all `instant keys `_. + """Returns a list of all `instant keys `_. :param user_identity_id: ID of the user identity by which you want to filter the list of Instant Keys. @@ -92,7 +92,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) def delete(self, *, instant_key_id: str) -> None: - """Deletes a specified `Instant Key `_. + """Deletes a specified `Instant Key `_. :param instant_key_id: ID of the Instant Key that you want to delete.""" params: Dict[str, Any] = {} @@ -118,7 +118,7 @@ def get( instant_key_id: Optional[str] = None, instant_key_url: Optional[str] = None, ) -> InstantKey: - """Gets an `instant key `_. + """Gets an `instant key `_. :param instant_key_id: ID of the instant key to get. @@ -151,7 +151,7 @@ def get( path="/instant_keys/list", at_least_one_parameter_names=(), has_pagination=False ) def list(self, *, user_identity_id: Optional[str] = None) -> List[InstantKey]: - """Returns a list of all `instant keys `_. + """Returns a list of all `instant keys `_. :param user_identity_id: ID of the user identity by which you want to filter the list of Instant Keys. @@ -180,7 +180,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) async def delete(self, *, instant_key_id: str) -> None: - """Deletes a specified `Instant Key `_. + """Deletes a specified `Instant Key `_. :param instant_key_id: ID of the Instant Key that you want to delete.""" params: Dict[str, Any] = {} @@ -206,7 +206,7 @@ async def get( instant_key_id: Optional[str] = None, instant_key_url: Optional[str] = None, ) -> InstantKey: - """Gets an `instant key `_. + """Gets an `instant key `_. :param instant_key_id: ID of the instant key to get. @@ -239,7 +239,7 @@ async def get( path="/instant_keys/list", at_least_one_parameter_names=(), has_pagination=False ) async def list(self, *, user_identity_id: Optional[str] = None) -> List[InstantKey]: - """Returns a list of all `instant keys `_. + """Returns a list of all `instant keys `_. :param user_identity_id: ID of the user identity by which you want to filter the list of Instant Keys. diff --git a/seam/routes/locks.py b/seam/routes/locks.py index 3e99fe9e..777819c2 100644 --- a/seam/routes/locks.py +++ b/seam/routes/locks.py @@ -33,7 +33,7 @@ def configure_auto_lock( auto_lock_delay_seconds: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Configures the auto-lock setting for a specified `lock `_. + """Configures the auto-lock setting for a specified `lock `_. :param auto_lock_enabled: Whether to enable or disable auto-lock. @@ -50,7 +50,7 @@ def configure_auto_lock( def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `lock `_. + """Returns a specified `lock `_. :param device_id: ID of the lock that you want to get. @@ -166,11 +166,13 @@ def list( "ttlock", "igloohome", "four_suites", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "korelock", "lockly", "smartthings", @@ -181,7 +183,7 @@ def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `locks `_. + """Returns a list of all `locks `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -205,7 +207,7 @@ def lock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to lock. @@ -221,7 +223,7 @@ def unlock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to unlock. @@ -247,7 +249,7 @@ async def configure_auto_lock( auto_lock_delay_seconds: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Configures the auto-lock setting for a specified `lock `_. + """Configures the auto-lock setting for a specified `lock `_. :param auto_lock_enabled: Whether to enable or disable auto-lock. @@ -264,7 +266,7 @@ async def configure_auto_lock( async def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `lock `_. + """Returns a specified `lock `_. :param device_id: ID of the lock that you want to get. @@ -380,11 +382,13 @@ async def list( "ttlock", "igloohome", "four_suites", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "korelock", "lockly", "smartthings", @@ -395,7 +399,7 @@ async def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `locks `_. + """Returns a list of all `locks `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -419,7 +423,7 @@ async def lock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to lock. @@ -435,7 +439,7 @@ async def unlock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to unlock. @@ -468,7 +472,7 @@ def configure_auto_lock( auto_lock_delay_seconds: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Configures the auto-lock setting for a specified `lock `_. + """Configures the auto-lock setting for a specified `lock `_. :param auto_lock_enabled: Whether to enable or disable auto-lock. @@ -515,7 +519,7 @@ def configure_auto_lock( def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `lock `_. + """Returns a specified `lock `_. :param device_id: ID of the lock that you want to get. @@ -651,11 +655,13 @@ def list( "ttlock", "igloohome", "four_suites", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "korelock", "lockly", "smartthings", @@ -666,7 +672,7 @@ def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `locks `_. + """Returns a list of all `locks `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -712,7 +718,7 @@ def lock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to lock. @@ -749,7 +755,7 @@ def unlock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to unlock. @@ -801,7 +807,7 @@ async def configure_auto_lock( auto_lock_delay_seconds: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Configures the auto-lock setting for a specified `lock `_. + """Configures the auto-lock setting for a specified `lock `_. :param auto_lock_enabled: Whether to enable or disable auto-lock. @@ -848,7 +854,7 @@ async def configure_auto_lock( async def get( self, *, device_id: Optional[str] = None, name: Optional[str] = None ) -> Device: - """Returns a specified `lock `_. + """Returns a specified `lock `_. :param device_id: ID of the lock that you want to get. @@ -984,11 +990,13 @@ async def list( "ttlock", "igloohome", "four_suites", - "dormakaba_oracode", "tedee", "keyincode", "akiles", "aqara", + "eufy", + "dormakaba_oracode", + "dormakaba_oracode_iho", "korelock", "lockly", "smartthings", @@ -999,7 +1007,7 @@ async def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `locks `_. + """Returns a list of all `locks `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -1045,7 +1053,7 @@ async def lock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Locks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to lock. @@ -1082,7 +1090,7 @@ async def unlock_door( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. + """Unlocks a `lock `_. See also `Locking and Unlocking Smart Locks `_. :param device_id: ID of the lock that you want to unlock. diff --git a/seam/routes/locks_simulate.py b/seam/routes/locks_simulate.py index 46955583..7f1684d5 100644 --- a/seam/routes/locks_simulate.py +++ b/seam/routes/locks_simulate.py @@ -20,7 +20,7 @@ def keypad_code_entry( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param code: Code that you want to simulate entering on a keypad. @@ -38,7 +38,7 @@ def manual_lock_via_keypad( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param device_id: ID of the device for which you want to simulate a manual lock action using a keypad. @@ -58,7 +58,7 @@ async def keypad_code_entry( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param code: Code that you want to simulate entering on a keypad. @@ -76,7 +76,7 @@ async def manual_lock_via_keypad( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param device_id: ID of the device for which you want to simulate a manual lock action using a keypad. @@ -103,7 +103,7 @@ def keypad_code_entry( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param code: Code that you want to simulate entering on a keypad. @@ -146,7 +146,7 @@ def manual_lock_via_keypad( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param device_id: ID of the device for which you want to simulate a manual lock action using a keypad. @@ -194,7 +194,7 @@ async def keypad_code_entry( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates the entry of a code on a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param code: Code that you want to simulate entering on a keypad. @@ -239,7 +239,7 @@ async def manual_lock_via_keypad( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. + """Simulates a manual lock action using a keypad. You can only perform this action for `August `_ devices within `sandbox workspaces `_. :param device_id: ID of the device for which you want to simulate a manual lock action using a keypad. diff --git a/seam/routes/media.py b/seam/routes/media.py new file mode 100644 index 00000000..d94b2083 --- /dev/null +++ b/seam/routes/media.py @@ -0,0 +1,98 @@ +from typing import Optional, Any, List, Dict, Literal, Union +import abc +from ..client import SeamHttpClient, AsyncSeamHttpClient +from ..route import route_metadata +from ..resources import Media as MediaResource +from ..response import unwrap + + +class AbstractMedia(abc.ABC): + + @abc.abstractmethod + def get( + self, *, media_id: str, format: Optional[Literal["json", "redirect"]] = None + ) -> MediaResource: + """Returns a specified piece of media, such as a video clip or thumbnail image captured for a camera event, with a short-lived URL from which you can download it. Camera events list their media in ``media_ids``. This endpoint is in beta. + + :param media_id: ID of the media that you want to get. + + :param format: Response format. ``json`` returns the media object. ``redirect`` responds with a ``302`` redirect to the media's download URL, so you can use this endpoint directly as the source of an image or video. + + :returns: OK""" + raise NotImplementedError() + + +class AbstractAsyncMedia(abc.ABC): + + @abc.abstractmethod + async def get( + self, *, media_id: str, format: Optional[Literal["json", "redirect"]] = None + ) -> MediaResource: + """Returns a specified piece of media, such as a video clip or thumbnail image captured for a camera event, with a short-lived URL from which you can download it. Camera events list their media in ``media_ids``. This endpoint is in beta. + + :param media_id: ID of the media that you want to get. + + :param format: Response format. ``json`` returns the media object. ``redirect`` responds with a ``302`` redirect to the media's download URL, so you can use this endpoint directly as the source of an image or video. + + :returns: OK""" + raise NotImplementedError() + + +class Media(AbstractMedia): + def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + @route_metadata( + path="/media/get", at_least_one_parameter_names=(), has_pagination=False + ) + def get( + self, *, media_id: str, format: Optional[Literal["json", "redirect"]] = None + ) -> MediaResource: + """Returns a specified piece of media, such as a video clip or thumbnail image captured for a camera event, with a short-lived URL from which you can download it. Camera events list their media in ``media_ids``. This endpoint is in beta. + + :param media_id: ID of the media that you want to get. + + :param format: Response format. ``json`` returns the media object. ``redirect`` responds with a ``302`` redirect to the media's download URL, so you can use this endpoint directly as the source of an image or video. + + :returns: OK""" + params: Dict[str, Any] = {} + + if media_id is not None: + params["media_id"] = media_id + if format is not None: + params["format"] = format + + res = self.client.get("/media/get", params=params) + + return MediaResource.from_dict(unwrap(res, "media", "/media/get")) + + +class AsyncMedia(AbstractAsyncMedia): + def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): + self.client = client + self.defaults = defaults + + @route_metadata( + path="/media/get", at_least_one_parameter_names=(), has_pagination=False + ) + async def get( + self, *, media_id: str, format: Optional[Literal["json", "redirect"]] = None + ) -> MediaResource: + """Returns a specified piece of media, such as a video clip or thumbnail image captured for a camera event, with a short-lived URL from which you can download it. Camera events list their media in ``media_ids``. This endpoint is in beta. + + :param media_id: ID of the media that you want to get. + + :param format: Response format. ``json`` returns the media object. ``redirect`` responds with a ``302`` redirect to the media's download URL, so you can use this endpoint directly as the source of an image or video. + + :returns: OK""" + params: Dict[str, Any] = {} + + if media_id is not None: + params["media_id"] = media_id + if format is not None: + params["format"] = format + + res = await self.client.get("/media/get", params=params) + + return MediaResource.from_dict(unwrap(res, "media", "/media/get")) diff --git a/seam/routes/noise_sensors.py b/seam/routes/noise_sensors.py index 976399b4..6d58b0ac 100644 --- a/seam/routes/noise_sensors.py +++ b/seam/routes/noise_sensors.py @@ -45,7 +45,7 @@ def list( ] = None, manufacturer: Optional[Literal["minut", "noiseaware"]] = None, ) -> List[Device]: - """Returns a list of all `noise sensors `_. + """Returns a list of all `noise sensors `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -90,7 +90,7 @@ async def list( ] = None, manufacturer: Optional[Literal["minut", "noiseaware"]] = None, ) -> List[Device]: - """Returns a list of all `noise sensors `_. + """Returns a list of all `noise sensors `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -144,7 +144,7 @@ def list( ] = None, manufacturer: Optional[Literal["minut", "noiseaware"]] = None, ) -> List[Device]: - """Returns a list of all `noise sensors `_. + """Returns a list of all `noise sensors `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -218,7 +218,7 @@ async def list( ] = None, manufacturer: Optional[Literal["minut", "noiseaware"]] = None, ) -> List[Device]: - """Returns a list of all `noise sensors `_. + """Returns a list of all `noise sensors `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. diff --git a/seam/routes/noise_sensors_noise_thresholds.py b/seam/routes/noise_sensors_noise_thresholds.py index 942607de..95d9838b 100644 --- a/seam/routes/noise_sensors_noise_thresholds.py +++ b/seam/routes/noise_sensors_noise_thresholds.py @@ -20,7 +20,7 @@ def create( noise_threshold_decibels: Optional[float] = None, noise_threshold_nrs: Optional[float] = None, ) -> NoiseThreshold: - """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. + """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. :param device_id: ID of the device for which you want to create a noise threshold. @@ -32,14 +32,14 @@ def create( :param noise_threshold_decibels: Noise level in decibels for the new noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod def delete(self, *, device_id: str, noise_threshold_id: str) -> None: - """Deletes a `noise threshold `_ from a `noise sensor `_. + """Deletes a `noise threshold `_ from a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to delete. @@ -48,7 +48,7 @@ def delete(self, *, device_id: str, noise_threshold_id: str) -> None: @abc.abstractmethod def get(self, *, noise_threshold_id: str) -> NoiseThreshold: - """Returns a specified `noise threshold `_ for a `noise sensor `_. + """Returns a specified `noise threshold `_ for a `noise sensor `_. :param noise_threshold_id: ID of the noise threshold that you want to get. @@ -57,7 +57,7 @@ def get(self, *, noise_threshold_id: str) -> NoiseThreshold: @abc.abstractmethod def list(self, *, device_id: str) -> List[NoiseThreshold]: - """Returns a list of all `noise thresholds `_ for a `noise sensor `_. + """Returns a list of all `noise thresholds `_ for a `noise sensor `_. :param device_id: ID of the device for which you want to list noise thresholds. @@ -76,7 +76,7 @@ def update( noise_threshold_nrs: Optional[float] = None, starts_daily_at: Optional[str] = None, ) -> None: - """Updates a `noise threshold `_ for a `noise sensor `_. + """Updates a `noise threshold `_ for a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to update. @@ -88,7 +88,7 @@ def update( :param noise_threshold_decibels: Noise level in decibels for the noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :param starts_daily_at: Time at which the noise threshold should become active daily. """ @@ -108,7 +108,7 @@ async def create( noise_threshold_decibels: Optional[float] = None, noise_threshold_nrs: Optional[float] = None, ) -> NoiseThreshold: - """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. + """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. :param device_id: ID of the device for which you want to create a noise threshold. @@ -120,14 +120,14 @@ async def create( :param noise_threshold_decibels: Noise level in decibels for the new noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod async def delete(self, *, device_id: str, noise_threshold_id: str) -> None: - """Deletes a `noise threshold `_ from a `noise sensor `_. + """Deletes a `noise threshold `_ from a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to delete. @@ -136,7 +136,7 @@ async def delete(self, *, device_id: str, noise_threshold_id: str) -> None: @abc.abstractmethod async def get(self, *, noise_threshold_id: str) -> NoiseThreshold: - """Returns a specified `noise threshold `_ for a `noise sensor `_. + """Returns a specified `noise threshold `_ for a `noise sensor `_. :param noise_threshold_id: ID of the noise threshold that you want to get. @@ -145,7 +145,7 @@ async def get(self, *, noise_threshold_id: str) -> NoiseThreshold: @abc.abstractmethod async def list(self, *, device_id: str) -> List[NoiseThreshold]: - """Returns a list of all `noise thresholds `_ for a `noise sensor `_. + """Returns a list of all `noise thresholds `_ for a `noise sensor `_. :param device_id: ID of the device for which you want to list noise thresholds. @@ -164,7 +164,7 @@ async def update( noise_threshold_nrs: Optional[float] = None, starts_daily_at: Optional[str] = None, ) -> None: - """Updates a `noise threshold `_ for a `noise sensor `_. + """Updates a `noise threshold `_ for a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to update. @@ -176,7 +176,7 @@ async def update( :param noise_threshold_decibels: Noise level in decibels for the noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :param starts_daily_at: Time at which the noise threshold should become active daily. """ @@ -203,7 +203,7 @@ def create( noise_threshold_decibels: Optional[float] = None, noise_threshold_nrs: Optional[float] = None, ) -> NoiseThreshold: - """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. + """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. :param device_id: ID of the device for which you want to create a noise threshold. @@ -215,7 +215,7 @@ def create( :param noise_threshold_decibels: Noise level in decibels for the new noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -247,7 +247,7 @@ def create( has_pagination=False, ) def delete(self, *, device_id: str, noise_threshold_id: str) -> None: - """Deletes a `noise threshold `_ from a `noise sensor `_. + """Deletes a `noise threshold `_ from a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to delete. @@ -269,7 +269,7 @@ def delete(self, *, device_id: str, noise_threshold_id: str) -> None: has_pagination=False, ) def get(self, *, noise_threshold_id: str) -> NoiseThreshold: - """Returns a specified `noise threshold `_ for a `noise sensor `_. + """Returns a specified `noise threshold `_ for a `noise sensor `_. :param noise_threshold_id: ID of the noise threshold that you want to get. @@ -291,7 +291,7 @@ def get(self, *, noise_threshold_id: str) -> NoiseThreshold: has_pagination=False, ) def list(self, *, device_id: str) -> List[NoiseThreshold]: - """Returns a list of all `noise thresholds `_ for a `noise sensor `_. + """Returns a list of all `noise thresholds `_ for a `noise sensor `_. :param device_id: ID of the device for which you want to list noise thresholds. @@ -326,7 +326,7 @@ def update( noise_threshold_nrs: Optional[float] = None, starts_daily_at: Optional[str] = None, ) -> None: - """Updates a `noise threshold `_ for a `noise sensor `_. + """Updates a `noise threshold `_ for a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to update. @@ -338,7 +338,7 @@ def update( :param noise_threshold_decibels: Noise level in decibels for the noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :param starts_daily_at: Time at which the noise threshold should become active daily. """ @@ -384,7 +384,7 @@ async def create( noise_threshold_decibels: Optional[float] = None, noise_threshold_nrs: Optional[float] = None, ) -> NoiseThreshold: - """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. + """Creates a new `noise threshold `_ for a `noise sensor `_. Thresholds represent the limits of noise tolerated at a property, which can be customized for each hour of the day. Each device has its own default thresholds, but you can use the Seam API to modify them. :param device_id: ID of the device for which you want to create a noise threshold. @@ -396,7 +396,7 @@ async def create( :param noise_threshold_decibels: Noise level in decibels for the new noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the new noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :returns: OK""" json_payload: Dict[str, Any] = {} @@ -428,7 +428,7 @@ async def create( has_pagination=False, ) async def delete(self, *, device_id: str, noise_threshold_id: str) -> None: - """Deletes a `noise threshold `_ from a `noise sensor `_. + """Deletes a `noise threshold `_ from a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to delete. @@ -452,7 +452,7 @@ async def delete(self, *, device_id: str, noise_threshold_id: str) -> None: has_pagination=False, ) async def get(self, *, noise_threshold_id: str) -> NoiseThreshold: - """Returns a specified `noise threshold `_ for a `noise sensor `_. + """Returns a specified `noise threshold `_ for a `noise sensor `_. :param noise_threshold_id: ID of the noise threshold that you want to get. @@ -476,7 +476,7 @@ async def get(self, *, noise_threshold_id: str) -> NoiseThreshold: has_pagination=False, ) async def list(self, *, device_id: str) -> List[NoiseThreshold]: - """Returns a list of all `noise thresholds `_ for a `noise sensor `_. + """Returns a list of all `noise thresholds `_ for a `noise sensor `_. :param device_id: ID of the device for which you want to list noise thresholds. @@ -513,7 +513,7 @@ async def update( noise_threshold_nrs: Optional[float] = None, starts_daily_at: Optional[str] = None, ) -> None: - """Updates a `noise threshold `_ for a `noise sensor `_. + """Updates a `noise threshold `_ for a `noise sensor `_. :param device_id: ID of the device that contains the noise threshold that you want to update. @@ -525,7 +525,7 @@ async def update( :param noise_threshold_decibels: Noise level in decibels for the noise threshold. - :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. + :param noise_threshold_nrs: Noise level in Noiseaware Noise Risk Score (NRS) for the noise threshold. This parameter is only relevant for `Noiseaware sensors `_. :param starts_daily_at: Time at which the noise threshold should become active daily. """ diff --git a/seam/routes/noise_sensors_simulate.py b/seam/routes/noise_sensors_simulate.py index ef6de81e..b3217984 100644 --- a/seam/routes/noise_sensors_simulate.py +++ b/seam/routes/noise_sensors_simulate.py @@ -8,7 +8,7 @@ class AbstractNoiseSensorsSimulate(abc.ABC): @abc.abstractmethod def trigger_noise_threshold(self, *, device_id: str) -> None: - """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. + """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. :param device_id: ID of the device for which you want to simulate the triggering of a noise threshold. """ @@ -19,7 +19,7 @@ class AbstractAsyncNoiseSensorsSimulate(abc.ABC): @abc.abstractmethod async def trigger_noise_threshold(self, *, device_id: str) -> None: - """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. + """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. :param device_id: ID of the device for which you want to simulate the triggering of a noise threshold. """ @@ -37,7 +37,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) def trigger_noise_threshold(self, *, device_id: str) -> None: - """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. + """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. :param device_id: ID of the device for which you want to simulate the triggering of a noise threshold. """ @@ -64,7 +64,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) async def trigger_noise_threshold(self, *, device_id: str) -> None: - """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. + """Simulates the triggering of a `noise threshold `_ for a `noise sensor `_ in a `sandbox workspace `_. :param device_id: ID of the device for which you want to simulate the triggering of a noise threshold. """ diff --git a/seam/routes/phones.py b/seam/routes/phones.py index 8ae6151f..a013f98d 100644 --- a/seam/routes/phones.py +++ b/seam/routes/phones.py @@ -22,14 +22,14 @@ def simulate(self) -> AbstractPhonesSimulate: @abc.abstractmethod def deactivate(self, *, device_id: str) -> None: - """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. + """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. :param device_id: Device ID of the phone that you want to deactivate.""" raise NotImplementedError() @abc.abstractmethod def get(self, *, device_id: str) -> Phone: - """Returns a specified `phone `_. + """Returns a specified `phone `_. :param device_id: Device ID of the phone that you want to get. @@ -43,9 +43,9 @@ def list( acs_credential_id: Optional[str] = None, owner_user_identity_id: Optional[str] = None, ) -> List[Phone]: - """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. + """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. - :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. + :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. :param owner_user_identity_id: ID of the user identity that represents the owner by which you want to filter the list of returned phones. @@ -62,14 +62,14 @@ def simulate(self) -> AbstractAsyncPhonesSimulate: @abc.abstractmethod async def deactivate(self, *, device_id: str) -> None: - """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. + """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. :param device_id: Device ID of the phone that you want to deactivate.""" raise NotImplementedError() @abc.abstractmethod async def get(self, *, device_id: str) -> Phone: - """Returns a specified `phone `_. + """Returns a specified `phone `_. :param device_id: Device ID of the phone that you want to get. @@ -83,9 +83,9 @@ async def list( acs_credential_id: Optional[str] = None, owner_user_identity_id: Optional[str] = None, ) -> List[Phone]: - """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. + """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. - :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. + :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. :param owner_user_identity_id: ID of the user identity that represents the owner by which you want to filter the list of returned phones. @@ -107,7 +107,7 @@ def simulate(self) -> PhonesSimulate: path="/phones/deactivate", at_least_one_parameter_names=(), has_pagination=False ) def deactivate(self, *, device_id: str) -> None: - """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. + """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. :param device_id: Device ID of the phone that you want to deactivate.""" params: Dict[str, Any] = {} @@ -123,7 +123,7 @@ def deactivate(self, *, device_id: str) -> None: path="/phones/get", at_least_one_parameter_names=(), has_pagination=False ) def get(self, *, device_id: str) -> Phone: - """Returns a specified `phone `_. + """Returns a specified `phone `_. :param device_id: Device ID of the phone that you want to get. @@ -146,9 +146,9 @@ def list( acs_credential_id: Optional[str] = None, owner_user_identity_id: Optional[str] = None, ) -> List[Phone]: - """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. + """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. - :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. + :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. :param owner_user_identity_id: ID of the user identity that represents the owner by which you want to filter the list of returned phones. @@ -181,7 +181,7 @@ def simulate(self) -> AsyncPhonesSimulate: path="/phones/deactivate", at_least_one_parameter_names=(), has_pagination=False ) async def deactivate(self, *, device_id: str) -> None: - """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. + """Deactivates a phone, which is useful, for example, if a user has lost their phone. For more information, see `App User Lost Phone Process `_. :param device_id: Device ID of the phone that you want to deactivate.""" params: Dict[str, Any] = {} @@ -197,7 +197,7 @@ async def deactivate(self, *, device_id: str) -> None: path="/phones/get", at_least_one_parameter_names=(), has_pagination=False ) async def get(self, *, device_id: str) -> Phone: - """Returns a specified `phone `_. + """Returns a specified `phone `_. :param device_id: Device ID of the phone that you want to get. @@ -220,9 +220,9 @@ async def list( acs_credential_id: Optional[str] = None, owner_user_identity_id: Optional[str] = None, ) -> List[Phone]: - """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. + """Returns a list of all `phones `_. To filter the list of returned phones by a specific owner user identity or credential, include the ``owner_user_identity_id`` or ``acs_credential_id``, respectively, in the request body. - :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. + :param acs_credential_id: ID of the `credential `_ by which you want to filter the list of returned phones. :param owner_user_identity_id: ID of the user identity that represents the owner by which you want to filter the list of returned phones. diff --git a/seam/routes/phones_simulate.py b/seam/routes/phones_simulate.py index 8471e75b..a323b2fb 100644 --- a/seam/routes/phones_simulate.py +++ b/seam/routes/phones_simulate.py @@ -17,7 +17,7 @@ def create_sandbox_phone( custom_sdk_installation_id: Optional[str] = None, phone_metadata: Optional[Dict[str, Any]] = None, ) -> Phone: - """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. + """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. :param user_identity_id: ID of the user identity that you want to associate with the simulated phone. @@ -42,7 +42,7 @@ async def create_sandbox_phone( custom_sdk_installation_id: Optional[str] = None, phone_metadata: Optional[Dict[str, Any]] = None, ) -> Phone: - """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. + """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. :param user_identity_id: ID of the user identity that you want to associate with the simulated phone. @@ -74,7 +74,7 @@ def create_sandbox_phone( custom_sdk_installation_id: Optional[str] = None, phone_metadata: Optional[Dict[str, Any]] = None, ) -> Phone: - """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. + """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. :param user_identity_id: ID of the user identity that you want to associate with the simulated phone. @@ -123,7 +123,7 @@ async def create_sandbox_phone( custom_sdk_installation_id: Optional[str] = None, phone_metadata: Optional[Dict[str, Any]] = None, ) -> Phone: - """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. + """Creates a new simulated phone in a `sandbox workspace `_. See also `Creating a Simulated Phone for a User Identity `_. :param user_identity_id: ID of the user identity that you want to associate with the simulated phone. diff --git a/seam/routes/spaces.py b/seam/routes/spaces.py index ff93a6b3..fcc87a4c 100644 --- a/seam/routes/spaces.py +++ b/seam/routes/spaces.py @@ -13,7 +13,7 @@ class AbstractSpaces(abc.ABC): @abc.abstractmethod def add_acs_entrances(self, *, acs_entrance_ids: List[str], space_id: str) -> None: - """Adds `entrances `_ to a specific space. + """Adds `entrances `_ to a specific space. :param acs_entrance_ids: IDs of the entrances that you want to add to the space. @@ -24,7 +24,7 @@ def add_acs_entrances(self, *, acs_entrance_ids: List[str], space_id: str) -> No def add_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Adds a `connected account `_ to a specific space. + """Adds a `connected account `_ to a specific space. :param connected_account_id: ID of the connected account that you want to add to the space. @@ -169,7 +169,7 @@ def list( def remove_acs_entrances( self, *, acs_entrance_ids: List[str], space_id: str ) -> None: - """Removes `entrances `_ from a specific space. + """Removes `entrances `_ from a specific space. :param acs_entrance_ids: IDs of the entrances that you want to remove from the space. @@ -180,7 +180,7 @@ def remove_acs_entrances( def remove_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Removes a `connected account `_ from a specific space. + """Removes a `connected account `_ from a specific space. :param connected_account_id: ID of the connected account that you want to remove from the space. @@ -232,7 +232,7 @@ class AbstractAsyncSpaces(abc.ABC): async def add_acs_entrances( self, *, acs_entrance_ids: List[str], space_id: str ) -> None: - """Adds `entrances `_ to a specific space. + """Adds `entrances `_ to a specific space. :param acs_entrance_ids: IDs of the entrances that you want to add to the space. @@ -243,7 +243,7 @@ async def add_acs_entrances( async def add_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Adds a `connected account `_ to a specific space. + """Adds a `connected account `_ to a specific space. :param connected_account_id: ID of the connected account that you want to add to the space. @@ -388,7 +388,7 @@ async def list( async def remove_acs_entrances( self, *, acs_entrance_ids: List[str], space_id: str ) -> None: - """Removes `entrances `_ from a specific space. + """Removes `entrances `_ from a specific space. :param acs_entrance_ids: IDs of the entrances that you want to remove from the space. @@ -399,7 +399,7 @@ async def remove_acs_entrances( async def remove_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Removes a `connected account `_ from a specific space. + """Removes a `connected account `_ from a specific space. :param connected_account_id: ID of the connected account that you want to remove from the space. @@ -456,7 +456,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) def add_acs_entrances(self, *, acs_entrance_ids: List[str], space_id: str) -> None: - """Adds `entrances `_ to a specific space. + """Adds `entrances `_ to a specific space. :param acs_entrance_ids: IDs of the entrances that you want to add to the space. @@ -480,7 +480,7 @@ def add_acs_entrances(self, *, acs_entrance_ids: List[str], space_id: str) -> No def add_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Adds a `connected account `_ to a specific space. + """Adds a `connected account `_ to a specific space. :param connected_account_id: ID of the connected account that you want to add to the space. @@ -764,7 +764,7 @@ def list( def remove_acs_entrances( self, *, acs_entrance_ids: List[str], space_id: str ) -> None: - """Removes `entrances `_ from a specific space. + """Removes `entrances `_ from a specific space. :param acs_entrance_ids: IDs of the entrances that you want to remove from the space. @@ -788,7 +788,7 @@ def remove_acs_entrances( def remove_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Removes a `connected account `_ from a specific space. + """Removes a `connected account `_ from a specific space. :param connected_account_id: ID of the connected account that you want to remove from the space. @@ -888,7 +888,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): async def add_acs_entrances( self, *, acs_entrance_ids: List[str], space_id: str ) -> None: - """Adds `entrances `_ to a specific space. + """Adds `entrances `_ to a specific space. :param acs_entrance_ids: IDs of the entrances that you want to add to the space. @@ -912,7 +912,7 @@ async def add_acs_entrances( async def add_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Adds a `connected account `_ to a specific space. + """Adds a `connected account `_ to a specific space. :param connected_account_id: ID of the connected account that you want to add to the space. @@ -1196,7 +1196,7 @@ async def list( async def remove_acs_entrances( self, *, acs_entrance_ids: List[str], space_id: str ) -> None: - """Removes `entrances `_ from a specific space. + """Removes `entrances `_ from a specific space. :param acs_entrance_ids: IDs of the entrances that you want to remove from the space. @@ -1220,7 +1220,7 @@ async def remove_acs_entrances( async def remove_connected_account( self, *, connected_account_id: str, space_id: str ) -> None: - """Removes a `connected account `_ from a specific space. + """Removes a `connected account `_ from a specific space. :param connected_account_id: ID of the connected account that you want to remove from the space. diff --git a/seam/routes/thermostats.py b/seam/routes/thermostats.py index aa91d92e..c3fa45d8 100644 --- a/seam/routes/thermostats.py +++ b/seam/routes/thermostats.py @@ -55,7 +55,7 @@ def activate_climate_preset( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Activates a specified `climate preset `_ for a specified `thermostat `_. + """Activates a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to activate. @@ -66,6 +66,22 @@ def activate_climate_preset( :returns: OK""" raise NotImplementedError() + @abc.abstractmethod + def activate_weekly_program( + self, + *, + device_id: str, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, + ) -> ActionAttempt: + """Returns a specified `thermostat `_ to its `weekly program `_, the schedule that is configured on the device itself, releasing any hold that Seam has set. Seam stops managing the thermostat's climate until you `activate a climate preset `_, make a direct climate setting change, or one of the thermostat's `scheduled `_ presets reaches its activation time. + + :param device_id: ID of the thermostat device that you want to return to its weekly program. + + :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. + + :returns: OK""" + raise NotImplementedError() + @abc.abstractmethod def cool( self, @@ -75,13 +91,13 @@ def cool( cooling_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `cool mode `_. + """Sets a specified `thermostat `_ to `cool mode `_. :param device_id: ID of the thermostat device that you want to set to cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -109,37 +125,37 @@ def create_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Creates a `climate preset `_ for a specified `thermostat `_. + """Creates a `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want create a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat or using the API can change the thermostat's settings. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ raise NotImplementedError() @abc.abstractmethod def delete_climate_preset(self, *, climate_preset_key: str, device_id: str) -> None: - """Deletes a specified `climate preset `_ for a specified `thermostat `_. + """Deletes a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to delete. @@ -156,13 +172,13 @@ def heat( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat mode `_. + """Sets a specified `thermostat `_ to `heat mode `_. :param device_id: ID of the thermostat device that you want to set to heat mode. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -180,17 +196,17 @@ def heat_cool( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. + """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. :param device_id: ID of the thermostat device that you want to set to heat-cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -232,7 +248,7 @@ def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `thermostats `_. + """Returns a list of all `thermostats `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -256,7 +272,7 @@ def off( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `"off" mode `_. + """Sets a specified `thermostat `_ to `"off" mode `_. :param device_id: ID of the thermostat device that you want to set to off mode. @@ -269,7 +285,7 @@ def off( def set_fallback_climate_preset( self, *, climate_preset_key: str, device_id: str ) -> None: - """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. + """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to set as the fallback climate preset. @@ -286,13 +302,13 @@ def set_fan_mode( fan_mode_setting: Optional[Literal["auto", "on", "circulate"]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `fan mode setting `_ for a specified `thermostat `_. + """Sets the `fan mode setting `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the fan mode. :param fan_mode: Deprecated: Use ``fan_mode_setting`` instead. Fan mode setting for the thermostat, such as ``auto``, ``on``, or ``circulate``. - :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. + :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -311,19 +327,19 @@ def set_hvac_mode( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `HVAC mode `_ for a specified `thermostat `_. + """Sets the `HVAC mode `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the HVAC mode. :param hvac_mode_setting: - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -340,7 +356,7 @@ def set_temperature_threshold( upper_limit_celsius: Optional[Union[float, Null]] = None, upper_limit_fahrenheit: Optional[Union[float, Null]] = None, ) -> None: - """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. + """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. :param device_id: ID of the thermostat device for which you want to set a temperature threshold. @@ -375,31 +391,31 @@ def update_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `climate preset `_ for a specified `thermostat `_. + """Updates a specified `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want to update a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ raise NotImplementedError() @@ -466,7 +482,7 @@ async def activate_climate_preset( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Activates a specified `climate preset `_ for a specified `thermostat `_. + """Activates a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to activate. @@ -477,6 +493,22 @@ async def activate_climate_preset( :returns: OK""" raise NotImplementedError() + @abc.abstractmethod + async def activate_weekly_program( + self, + *, + device_id: str, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, + ) -> ActionAttempt: + """Returns a specified `thermostat `_ to its `weekly program `_, the schedule that is configured on the device itself, releasing any hold that Seam has set. Seam stops managing the thermostat's climate until you `activate a climate preset `_, make a direct climate setting change, or one of the thermostat's `scheduled `_ presets reaches its activation time. + + :param device_id: ID of the thermostat device that you want to return to its weekly program. + + :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. + + :returns: OK""" + raise NotImplementedError() + @abc.abstractmethod async def cool( self, @@ -486,13 +518,13 @@ async def cool( cooling_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `cool mode `_. + """Sets a specified `thermostat `_ to `cool mode `_. :param device_id: ID of the thermostat device that you want to set to cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -520,31 +552,31 @@ async def create_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Creates a `climate preset `_ for a specified `thermostat `_. + """Creates a `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want create a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat or using the API can change the thermostat's settings. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ raise NotImplementedError() @@ -552,7 +584,7 @@ async def create_climate_preset( async def delete_climate_preset( self, *, climate_preset_key: str, device_id: str ) -> None: - """Deletes a specified `climate preset `_ for a specified `thermostat `_. + """Deletes a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to delete. @@ -569,13 +601,13 @@ async def heat( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat mode `_. + """Sets a specified `thermostat `_ to `heat mode `_. :param device_id: ID of the thermostat device that you want to set to heat mode. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -593,17 +625,17 @@ async def heat_cool( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. + """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. :param device_id: ID of the thermostat device that you want to set to heat-cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -645,7 +677,7 @@ async def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `thermostats `_. + """Returns a list of all `thermostats `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -669,7 +701,7 @@ async def off( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `"off" mode `_. + """Sets a specified `thermostat `_ to `"off" mode `_. :param device_id: ID of the thermostat device that you want to set to off mode. @@ -682,7 +714,7 @@ async def off( async def set_fallback_climate_preset( self, *, climate_preset_key: str, device_id: str ) -> None: - """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. + """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to set as the fallback climate preset. @@ -699,13 +731,13 @@ async def set_fan_mode( fan_mode_setting: Optional[Literal["auto", "on", "circulate"]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `fan mode setting `_ for a specified `thermostat `_. + """Sets the `fan mode setting `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the fan mode. :param fan_mode: Deprecated: Use ``fan_mode_setting`` instead. Fan mode setting for the thermostat, such as ``auto``, ``on``, or ``circulate``. - :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. + :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -724,19 +756,19 @@ async def set_hvac_mode( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `HVAC mode `_ for a specified `thermostat `_. + """Sets the `HVAC mode `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the HVAC mode. :param hvac_mode_setting: - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -753,7 +785,7 @@ async def set_temperature_threshold( upper_limit_celsius: Optional[Union[float, Null]] = None, upper_limit_fahrenheit: Optional[Union[float, Null]] = None, ) -> None: - """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. + """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. :param device_id: ID of the thermostat device for which you want to set a temperature threshold. @@ -788,31 +820,31 @@ async def update_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `climate preset `_ for a specified `thermostat `_. + """Updates a specified `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want to update a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ raise NotImplementedError() @@ -888,7 +920,7 @@ def activate_climate_preset( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Activates a specified `climate preset `_ for a specified `thermostat `_. + """Activates a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to activate. @@ -922,6 +954,47 @@ def activate_climate_preset( wait_for_action_attempt=wait_for_action_attempt, ) + @route_metadata( + path="/thermostats/activate_weekly_program", + at_least_one_parameter_names=(), + has_pagination=False, + ) + def activate_weekly_program( + self, + *, + device_id: str, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, + ) -> ActionAttempt: + """Returns a specified `thermostat `_ to its `weekly program `_, the schedule that is configured on the device itself, releasing any hold that Seam has set. Seam stops managing the thermostat's climate until you `activate a climate preset `_, make a direct climate setting change, or one of the thermostat's `scheduled `_ presets reaches its activation time. + + :param device_id: ID of the thermostat device that you want to return to its weekly program. + + :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. + + :returns: OK""" + json_payload: Dict[str, Any] = {} + + if device_id is not None: + json_payload["device_id"] = device_id + + res = self.client.post( + "/thermostats/activate_weekly_program", 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=action_attempt_from_dict( + unwrap(res, "action_attempt", "/thermostats/activate_weekly_program") + ), + wait_for_action_attempt=wait_for_action_attempt, + ) + @route_metadata( path="/thermostats/cool", at_least_one_parameter_names=(), has_pagination=False ) @@ -933,13 +1006,13 @@ def cool( cooling_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `cool mode `_. + """Sets a specified `thermostat `_ to `cool mode `_. :param device_id: ID of the thermostat device that you want to set to cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -994,31 +1067,31 @@ def create_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Creates a `climate preset `_ for a specified `thermostat `_. + """Creates a `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want create a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat or using the API can change the thermostat's settings. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ json_payload: Dict[str, Any] = {} @@ -1057,7 +1130,7 @@ def create_climate_preset( has_pagination=False, ) def delete_climate_preset(self, *, climate_preset_key: str, device_id: str) -> None: - """Deletes a specified `climate preset `_ for a specified `thermostat `_. + """Deletes a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to delete. @@ -1085,13 +1158,13 @@ def heat( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat mode `_. + """Sets a specified `thermostat `_ to `heat mode `_. :param device_id: ID of the thermostat device that you want to set to heat mode. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1136,17 +1209,17 @@ def heat_cool( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. + """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. :param device_id: ID of the thermostat device that you want to set to heat-cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1217,7 +1290,7 @@ def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `thermostats `_. + """Returns a list of all `thermostats `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -1263,7 +1336,7 @@ def off( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `"off" mode `_. + """Sets a specified `thermostat `_ to `"off" mode `_. :param device_id: ID of the thermostat device that you want to set to off mode. @@ -1299,7 +1372,7 @@ def off( def set_fallback_climate_preset( self, *, climate_preset_key: str, device_id: str ) -> None: - """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. + """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to set as the fallback climate preset. @@ -1329,13 +1402,13 @@ def set_fan_mode( fan_mode_setting: Optional[Literal["auto", "on", "circulate"]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `fan mode setting `_ for a specified `thermostat `_. + """Sets the `fan mode setting `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the fan mode. :param fan_mode: Deprecated: Use ``fan_mode_setting`` instead. Fan mode setting for the thermostat, such as ``auto``, ``on``, or ``circulate``. - :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. + :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1381,19 +1454,19 @@ def set_hvac_mode( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `HVAC mode `_ for a specified `thermostat `_. + """Sets the `HVAC mode `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the HVAC mode. :param hvac_mode_setting: - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1443,7 +1516,7 @@ def set_temperature_threshold( upper_limit_celsius: Optional[Union[float, Null]] = None, upper_limit_fahrenheit: Optional[Union[float, Null]] = None, ) -> None: - """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. + """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. :param device_id: ID of the thermostat device for which you want to set a temperature threshold. @@ -1497,31 +1570,31 @@ def update_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `climate preset `_ for a specified `thermostat `_. + """Updates a specified `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want to update a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ json_payload: Dict[str, Any] = {} @@ -1663,7 +1736,7 @@ async def activate_climate_preset( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Activates a specified `climate preset `_ for a specified `thermostat `_. + """Activates a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to activate. @@ -1697,6 +1770,47 @@ async def activate_climate_preset( wait_for_action_attempt=wait_for_action_attempt, ) + @route_metadata( + path="/thermostats/activate_weekly_program", + at_least_one_parameter_names=(), + has_pagination=False, + ) + async def activate_weekly_program( + self, + *, + device_id: str, + wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, + ) -> ActionAttempt: + """Returns a specified `thermostat `_ to its `weekly program `_, the schedule that is configured on the device itself, releasing any hold that Seam has set. Seam stops managing the thermostat's climate until you `activate a climate preset `_, make a direct climate setting change, or one of the thermostat's `scheduled `_ presets reaches its activation time. + + :param device_id: ID of the thermostat device that you want to return to its weekly program. + + :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. + + :returns: OK""" + json_payload: Dict[str, Any] = {} + + if device_id is not None: + json_payload["device_id"] = device_id + + res = await self.client.post( + "/thermostats/activate_weekly_program", 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 await resolve_action_attempt_async( + client=self.client, + action_attempt=action_attempt_from_dict( + unwrap(res, "action_attempt", "/thermostats/activate_weekly_program") + ), + wait_for_action_attempt=wait_for_action_attempt, + ) + @route_metadata( path="/thermostats/cool", at_least_one_parameter_names=(), has_pagination=False ) @@ -1708,13 +1822,13 @@ async def cool( cooling_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `cool mode `_. + """Sets a specified `thermostat `_ to `cool mode `_. :param device_id: ID of the thermostat device that you want to set to cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1769,31 +1883,31 @@ async def create_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Creates a `climate preset `_ for a specified `thermostat `_. + """Creates a `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want create a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat or using the API can change the thermostat's settings. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ json_payload: Dict[str, Any] = {} @@ -1834,7 +1948,7 @@ async def create_climate_preset( async def delete_climate_preset( self, *, climate_preset_key: str, device_id: str ) -> None: - """Deletes a specified `climate preset `_ for a specified `thermostat `_. + """Deletes a specified `climate preset `_ for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to delete. @@ -1862,13 +1976,13 @@ async def heat( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat mode `_. + """Sets a specified `thermostat `_ to `heat mode `_. :param device_id: ID of the thermostat device that you want to set to heat mode. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1913,17 +2027,17 @@ async def heat_cool( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. + """Sets a specified `thermostat `_ to `heat-cool ("auto") mode `_. :param device_id: ID of the thermostat device that you want to set to heat-cool mode. - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -1994,7 +2108,7 @@ async def list( ] ] = None, ) -> List[Device]: - """Returns a list of all `thermostats `_. + """Returns a list of all `thermostats `_. :param connect_webview_id: ID of the Connect Webview for which you want to list devices. @@ -2040,7 +2154,7 @@ async def off( device_id: str, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets a specified `thermostat `_ to `"off" mode `_. + """Sets a specified `thermostat `_ to `"off" mode `_. :param device_id: ID of the thermostat device that you want to set to off mode. @@ -2076,7 +2190,7 @@ async def off( async def set_fallback_climate_preset( self, *, climate_preset_key: str, device_id: str ) -> None: - """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. + """Sets a specified `climate preset `_ as the `"fallback" `_ preset for a specified `thermostat `_. :param climate_preset_key: Climate preset key of the climate preset that you want to set as the fallback climate preset. @@ -2108,13 +2222,13 @@ async def set_fan_mode( fan_mode_setting: Optional[Literal["auto", "on", "circulate"]] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `fan mode setting `_ for a specified `thermostat `_. + """Sets the `fan mode setting `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the fan mode. :param fan_mode: Deprecated: Use ``fan_mode_setting`` instead. Fan mode setting for the thermostat, such as ``auto``, ``on``, or ``circulate``. - :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. + :param fan_mode_setting: `Fan mode setting `_ that you want to set for the thermostat. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -2160,19 +2274,19 @@ async def set_hvac_mode( heating_set_point_fahrenheit: Optional[float] = None, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None, ) -> ActionAttempt: - """Sets the `HVAC mode `_ for a specified `thermostat `_. + """Sets the `HVAC mode `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to set the HVAC mode. :param hvac_mode_setting: - :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_celsius: `Cooling set point `_ in °C that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. + :param cooling_set_point_fahrenheit: `Cooling set point `_ in °F that you want to set for the thermostat. You must set one of the ``cooling_set_point`` parameters. - :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_celsius: `Heating set point `_ in °C that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. - :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. + :param heating_set_point_fahrenheit: `Heating set point `_ in °F that you want to set for the thermostat. You must set one of the ``heating_set_point`` parameters. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -2222,7 +2336,7 @@ async def set_temperature_threshold( upper_limit_celsius: Optional[Union[float, Null]] = None, upper_limit_fahrenheit: Optional[Union[float, Null]] = None, ) -> None: - """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. + """Sets a `temperature threshold `_ for a specified thermostat. Seam emits a ``thermostat.temperature_threshold_exceeded`` event and adds a warning on a thermostat if it reports a temperature outside the threshold range. :param device_id: ID of the thermostat device for which you want to set a temperature threshold. @@ -2278,31 +2392,31 @@ async def update_climate_preset( manual_override_allowed: Optional[bool] = None, name: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `climate preset `_ for a specified `thermostat `_. + """Updates a specified `climate preset `_ for a specified `thermostat `_. - :param climate_preset_key: Unique key to identify the `climate preset `_. + :param climate_preset_key: Unique key to identify the `climate preset `_. :param device_id: ID of the thermostat device for which you want to update a climate preset. :param climate_preset_mode: The climate preset mode for the thermostat, based on the available climate preset modes reported by the device. - :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. + :param cooling_set_point_celsius: Temperature to which the thermostat should cool (in °C). See also `Set Points `_. - :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. + :param cooling_set_point_fahrenheit: Temperature to which the thermostat should cool (in °F). See also `Set Points `_. :param ecobee_metadata: Metadata specific to the Ecobee climate, if applicable. - :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. + :param fan_mode_setting: Desired `fan mode setting `_, such as ``on``, ``auto``, or ``circulate``. - :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. + :param heating_set_point_celsius: Temperature to which the thermostat should heat (in °C). See also `Set Points `_. - :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. + :param heating_set_point_fahrenheit: Temperature to which the thermostat should heat (in °F). See also `Set Points `_. - :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. + :param hvac_mode_setting: Desired `HVAC mode `_ setting, such as ``heat``, ``cool``, ``heat_cool``, or ``off``. - :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. + :param manual_override_allowed: Deprecated: Use 'thermostat_schedule.is_override_allowed' Indicates whether a person at the thermostat can change the thermostat's settings. See `Specifying Manual Override Permissions `_. - :param name: User-friendly name to identify the `climate preset `_. + :param name: User-friendly name to identify the `climate preset `_. """ json_payload: Dict[str, Any] = {} diff --git a/seam/routes/thermostats_schedules.py b/seam/routes/thermostats_schedules.py index 68f3f38e..947b294a 100644 --- a/seam/routes/thermostats_schedules.py +++ b/seam/routes/thermostats_schedules.py @@ -22,9 +22,9 @@ def create( max_override_period_minutes: Optional[Union[int, Null]] = None, name: Optional[str] = None, ) -> ThermostatSchedule: - """Creates a new `thermostat schedule `_ for a specified `thermostat `_. + """Creates a new `thermostat schedule `_ for a specified `thermostat `_. - :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. :param device_id: ID of the thermostat device for which you want to create a schedule. @@ -32,9 +32,9 @@ def create( :param starts_at: Date and time at which the new thermostat schedule starts, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -43,7 +43,7 @@ def create( @abc.abstractmethod def delete(self, *, thermostat_schedule_id: str) -> None: - """Deletes a `thermostat schedule `_ for a specified `thermostat `_. + """Deletes a `thermostat schedule `_ for a specified `thermostat `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to delete. """ @@ -51,7 +51,7 @@ def delete(self, *, thermostat_schedule_id: str) -> None: @abc.abstractmethod def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: - """Returns a specified `thermostat schedule `_. + """Returns a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to get. @@ -62,7 +62,7 @@ def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: def list( self, *, device_id: str, user_identifier_key: Optional[str] = None ) -> List[ThermostatSchedule]: - """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. + """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to list schedules. @@ -83,17 +83,17 @@ def update( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates a specified `thermostat schedule `_. + """Updates a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to update. - :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. :param ends_at: Date and time at which the thermostat schedule ends, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -116,9 +116,9 @@ async def create( max_override_period_minutes: Optional[Union[int, Null]] = None, name: Optional[str] = None, ) -> ThermostatSchedule: - """Creates a new `thermostat schedule `_ for a specified `thermostat `_. + """Creates a new `thermostat schedule `_ for a specified `thermostat `_. - :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. :param device_id: ID of the thermostat device for which you want to create a schedule. @@ -126,9 +126,9 @@ async def create( :param starts_at: Date and time at which the new thermostat schedule starts, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -137,7 +137,7 @@ async def create( @abc.abstractmethod async def delete(self, *, thermostat_schedule_id: str) -> None: - """Deletes a `thermostat schedule `_ for a specified `thermostat `_. + """Deletes a `thermostat schedule `_ for a specified `thermostat `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to delete. """ @@ -145,7 +145,7 @@ async def delete(self, *, thermostat_schedule_id: str) -> None: @abc.abstractmethod async def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: - """Returns a specified `thermostat schedule `_. + """Returns a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to get. @@ -156,7 +156,7 @@ async def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: async def list( self, *, device_id: str, user_identifier_key: Optional[str] = None ) -> List[ThermostatSchedule]: - """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. + """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to list schedules. @@ -177,17 +177,17 @@ async def update( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates a specified `thermostat schedule `_. + """Updates a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to update. - :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. :param ends_at: Date and time at which the thermostat schedule ends, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -217,9 +217,9 @@ def create( max_override_period_minutes: Optional[Union[int, Null]] = None, name: Optional[str] = None, ) -> ThermostatSchedule: - """Creates a new `thermostat schedule `_ for a specified `thermostat `_. + """Creates a new `thermostat schedule `_ for a specified `thermostat `_. - :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. :param device_id: ID of the thermostat device for which you want to create a schedule. @@ -227,9 +227,9 @@ def create( :param starts_at: Date and time at which the new thermostat schedule starts, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -263,7 +263,7 @@ def create( has_pagination=False, ) def delete(self, *, thermostat_schedule_id: str) -> None: - """Deletes a `thermostat schedule `_ for a specified `thermostat `_. + """Deletes a `thermostat schedule `_ for a specified `thermostat `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to delete. """ @@ -282,7 +282,7 @@ def delete(self, *, thermostat_schedule_id: str) -> None: has_pagination=False, ) def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: - """Returns a specified `thermostat schedule `_. + """Returns a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to get. @@ -306,7 +306,7 @@ def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: def list( self, *, device_id: str, user_identifier_key: Optional[str] = None ) -> List[ThermostatSchedule]: - """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. + """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to list schedules. @@ -345,17 +345,17 @@ def update( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates a specified `thermostat schedule `_. + """Updates a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to update. - :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. :param ends_at: Date and time at which the thermostat schedule ends, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -404,9 +404,9 @@ async def create( max_override_period_minutes: Optional[Union[int, Null]] = None, name: Optional[str] = None, ) -> ThermostatSchedule: - """Creates a new `thermostat schedule `_ for a specified `thermostat `_. + """Creates a new `thermostat schedule `_ for a specified `thermostat `_. - :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the new thermostat schedule. :param device_id: ID of the thermostat device for which you want to create a schedule. @@ -414,9 +414,9 @@ async def create( :param starts_at: Date and time at which the new thermostat schedule starts, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the new schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. @@ -450,7 +450,7 @@ async def create( has_pagination=False, ) async def delete(self, *, thermostat_schedule_id: str) -> None: - """Deletes a `thermostat schedule `_ for a specified `thermostat `_. + """Deletes a `thermostat schedule `_ for a specified `thermostat `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to delete. """ @@ -469,7 +469,7 @@ async def delete(self, *, thermostat_schedule_id: str) -> None: has_pagination=False, ) async def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: - """Returns a specified `thermostat schedule `_. + """Returns a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to get. @@ -493,7 +493,7 @@ async def get(self, *, thermostat_schedule_id: str) -> ThermostatSchedule: async def list( self, *, device_id: str, user_identifier_key: Optional[str] = None ) -> List[ThermostatSchedule]: - """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. + """Returns a list of all `thermostat schedules `_ for a specified `thermostat `_. :param device_id: ID of the thermostat device for which you want to list schedules. @@ -532,17 +532,17 @@ async def update( name: Optional[str] = None, starts_at: Optional[str] = None, ) -> None: - """Updates a specified `thermostat schedule `_. + """Updates a specified `thermostat schedule `_. :param thermostat_schedule_id: ID of the thermostat schedule that you want to update. - :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. + :param climate_preset_key: Key of the `climate preset `_ to use for the thermostat schedule. :param ends_at: Date and time at which the thermostat schedule ends, in `ISO 8601 `_ format. - :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. + :param is_override_allowed: Indicates whether a person at the thermostat or using the API can change the thermostat's settings while the schedule is active. See also `Specifying Manual Override Permissions `_. - :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. + :param max_override_period_minutes: Number of minutes for which a person at the thermostat or using the API can change the thermostat's settings after the activation of the scheduled climate preset. See also `Specifying Manual Override Permissions `_. :param name: Name of the thermostat schedule. diff --git a/seam/routes/thermostats_simulate.py b/seam/routes/thermostats_simulate.py index bfe4f160..a59b0239 100644 --- a/seam/routes/thermostats_simulate.py +++ b/seam/routes/thermostats_simulate.py @@ -17,19 +17,19 @@ def hvac_mode_adjusted( heating_set_point_celsius: Optional[float] = None, heating_set_point_fahrenheit: Optional[float] = None, ) -> None: - """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device for which you want to simulate having adjusted the HVAC mode. :param hvac_mode: HVAC mode that you want to simulate. - :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. + :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. - :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. + :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. - :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. + :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. - :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. + :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. """ raise NotImplementedError() @@ -41,7 +41,7 @@ def temperature_reached( temperature_celsius: Optional[float] = None, temperature_fahrenheit: Optional[float] = None, ) -> None: - """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device that you want to simulate reaching a specified temperature. @@ -65,19 +65,19 @@ async def hvac_mode_adjusted( heating_set_point_celsius: Optional[float] = None, heating_set_point_fahrenheit: Optional[float] = None, ) -> None: - """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device for which you want to simulate having adjusted the HVAC mode. :param hvac_mode: HVAC mode that you want to simulate. - :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. + :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. - :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. + :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. - :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. + :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. - :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. + :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. """ raise NotImplementedError() @@ -89,7 +89,7 @@ async def temperature_reached( temperature_celsius: Optional[float] = None, temperature_fahrenheit: Optional[float] = None, ) -> None: - """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device that you want to simulate reaching a specified temperature. @@ -120,19 +120,19 @@ def hvac_mode_adjusted( heating_set_point_celsius: Optional[float] = None, heating_set_point_fahrenheit: Optional[float] = None, ) -> None: - """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device for which you want to simulate having adjusted the HVAC mode. :param hvac_mode: HVAC mode that you want to simulate. - :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. + :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. - :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. + :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. - :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. + :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. - :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. + :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. """ json_payload: Dict[str, Any] = {} @@ -165,7 +165,7 @@ def temperature_reached( temperature_celsius: Optional[float] = None, temperature_fahrenheit: Optional[float] = None, ) -> None: - """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device that you want to simulate reaching a specified temperature. @@ -207,19 +207,19 @@ async def hvac_mode_adjusted( heating_set_point_celsius: Optional[float] = None, heating_set_point_fahrenheit: Optional[float] = None, ) -> None: - """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates having adjusted the `HVAC mode `_ for a `thermostat `_. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device for which you want to simulate having adjusted the HVAC mode. :param hvac_mode: HVAC mode that you want to simulate. - :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. + :param cooling_set_point_celsius: Cooling `set point `_ in °C that you want to simulate. You must set ``cooling_set_point_celsius`` or ``cooling_set_point_fahrenheit``. - :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. + :param cooling_set_point_fahrenheit: Cooling `set point `_ in °F that you want to simulate. You must set ``cooling_set_point_fahrenheit`` or ``cooling_set_point_celsius``. - :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. + :param heating_set_point_celsius: Heating `set point `_ in °C that you want to simulate. You must set ``heating_set_point_celsius`` or ``heating_set_point_fahrenheit``. - :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. + :param heating_set_point_fahrenheit: Heating `set point `_ in °F that you want to simulate. You must set ``heating_set_point_fahrenheit`` or ``heating_set_point_celsius``. """ json_payload: Dict[str, Any] = {} @@ -254,7 +254,7 @@ async def temperature_reached( temperature_celsius: Optional[float] = None, temperature_fahrenheit: Optional[float] = None, ) -> None: - """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. + """Simulates a `thermostat `_ reaching a specified temperature. Only applicable for `sandbox devices `_. See also `Testing Your Thermostat App with Simulate Endpoints `_. :param device_id: ID of the thermostat device that you want to simulate reaching a specified temperature. diff --git a/seam/routes/user_identities.py b/seam/routes/user_identities.py index 223ee64e..2f4b2272 100644 --- a/seam/routes/user_identities.py +++ b/seam/routes/user_identities.py @@ -37,7 +37,7 @@ def add_acs_user( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `user identity `_. + """Adds a specified `access system user `_ to a specified `user identity `_. You must specify either ``user_identity_id`` or ``user_identity_key`` to identify the user identity. @@ -61,7 +61,7 @@ def create( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> UserIdentity: - """Creates a new `user identity `_. + """Creates a new `user identity `_. :param acs_system_ids: List of access system IDs to associate with the new user identity through access system users. If there's no user with the same email address or phone number in the specified access systems, a new access system user is created. If there is an existing user with the same email or phone number in the specified access systems, the user is linked to the user identity. @@ -78,7 +78,7 @@ def create( @abc.abstractmethod def delete(self, *, user_identity_id: str) -> None: - """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. + """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. :param user_identity_id: ID of the user identity that you want to delete.""" raise NotImplementedError() @@ -91,7 +91,7 @@ def generate_instant_key( customization_profile_id: Optional[str] = None, max_use_count: Optional[float] = None, ) -> InstantKey: - """Generates a new `instant key `_ for a specified `user identity `_. + """Generates a new `instant key `_ for a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to generate an instant key. @@ -109,7 +109,7 @@ def get( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> UserIdentity: - """Returns a specified `user identity `_. + """Returns a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to get. @@ -122,7 +122,7 @@ def get( @abc.abstractmethod def grant_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: - """Grants a specified `user identity `_ access to a specified `device `_. + """Grants a specified `user identity `_ access to a specified `device `_. :param device_id: ID of the managed device to which you want to grant access to the user identity. @@ -141,7 +141,7 @@ def list( search: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> List[UserIdentity]: - """Returns a list of all `user identities `_. + """Returns a list of all `user identities `_. :param created_before: Timestamp by which to limit returned user identities. Returns user identities created before this timestamp. @@ -160,7 +160,7 @@ def list( @abc.abstractmethod def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: - """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. + """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible devices. @@ -169,7 +169,7 @@ def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: @abc.abstractmethod def list_accessible_entrances(self, *, user_identity_id: str) -> List[AcsEntrance]: - """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. + """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible entrances. @@ -178,7 +178,7 @@ def list_accessible_entrances(self, *, user_identity_id: str) -> List[AcsEntranc @abc.abstractmethod def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: - """Returns a list of all `access systems `_ associated with a specified `user identity `_. + """Returns a list of all `access systems `_ associated with a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access systems. @@ -187,7 +187,7 @@ def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: @abc.abstractmethod def list_acs_users(self, *, user_identity_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ assigned to a specified `user identity `_. + """Returns a list of all `access system users `_ assigned to a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access system users. @@ -203,7 +203,7 @@ def merge( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. + """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. The primary user identity takes on any email address or phone number it was missing from the user identities merged into it, and the merged user identities are then deleted. Their IDs and keys keep working: looking one up returns the primary user identity, and they are listed on it as ``merged_user_identity_ids`` and ``merged_user_identity_keys``. @@ -224,7 +224,7 @@ def merge( @abc.abstractmethod def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: - """Removes a specified `access system user `_ from a specified `user identity `_. + """Removes a specified `access system user `_ from a specified `user identity `_. :param acs_user_id: ID of the access system user that you want to remove from the user identity.. @@ -234,7 +234,7 @@ def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: @abc.abstractmethod def revoke_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: - """Revokes access to a specified `device `_ from a specified `user identity `_. + """Revokes access to a specified `device `_ from a specified `user identity `_. :param device_id: ID of the managed device to which you want to revoke access from the user identity. @@ -252,7 +252,7 @@ def update( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `user identity `_. + """Updates a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to update. @@ -281,7 +281,7 @@ async def add_acs_user( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `user identity `_. + """Adds a specified `access system user `_ to a specified `user identity `_. You must specify either ``user_identity_id`` or ``user_identity_key`` to identify the user identity. @@ -305,7 +305,7 @@ async def create( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> UserIdentity: - """Creates a new `user identity `_. + """Creates a new `user identity `_. :param acs_system_ids: List of access system IDs to associate with the new user identity through access system users. If there's no user with the same email address or phone number in the specified access systems, a new access system user is created. If there is an existing user with the same email or phone number in the specified access systems, the user is linked to the user identity. @@ -322,7 +322,7 @@ async def create( @abc.abstractmethod async def delete(self, *, user_identity_id: str) -> None: - """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. + """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. :param user_identity_id: ID of the user identity that you want to delete.""" raise NotImplementedError() @@ -335,7 +335,7 @@ async def generate_instant_key( customization_profile_id: Optional[str] = None, max_use_count: Optional[float] = None, ) -> InstantKey: - """Generates a new `instant key `_ for a specified `user identity `_. + """Generates a new `instant key `_ for a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to generate an instant key. @@ -353,7 +353,7 @@ async def get( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> UserIdentity: - """Returns a specified `user identity `_. + """Returns a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to get. @@ -368,7 +368,7 @@ async def get( async def grant_access_to_device( self, *, device_id: str, user_identity_id: str ) -> None: - """Grants a specified `user identity `_ access to a specified `device `_. + """Grants a specified `user identity `_ access to a specified `device `_. :param device_id: ID of the managed device to which you want to grant access to the user identity. @@ -387,7 +387,7 @@ async def list( search: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> List[UserIdentity]: - """Returns a list of all `user identities `_. + """Returns a list of all `user identities `_. :param created_before: Timestamp by which to limit returned user identities. Returns user identities created before this timestamp. @@ -406,7 +406,7 @@ async def list( @abc.abstractmethod async def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: - """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. + """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible devices. @@ -417,7 +417,7 @@ async def list_accessible_devices(self, *, user_identity_id: str) -> List[Device async def list_accessible_entrances( self, *, user_identity_id: str ) -> List[AcsEntrance]: - """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. + """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible entrances. @@ -426,7 +426,7 @@ async def list_accessible_entrances( @abc.abstractmethod async def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: - """Returns a list of all `access systems `_ associated with a specified `user identity `_. + """Returns a list of all `access systems `_ associated with a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access systems. @@ -435,7 +435,7 @@ async def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: @abc.abstractmethod async def list_acs_users(self, *, user_identity_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ assigned to a specified `user identity `_. + """Returns a list of all `access system users `_ assigned to a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access system users. @@ -451,7 +451,7 @@ async def merge( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. + """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. The primary user identity takes on any email address or phone number it was missing from the user identities merged into it, and the merged user identities are then deleted. Their IDs and keys keep working: looking one up returns the primary user identity, and they are listed on it as ``merged_user_identity_ids`` and ``merged_user_identity_keys``. @@ -472,7 +472,7 @@ async def merge( @abc.abstractmethod async def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: - """Removes a specified `access system user `_ from a specified `user identity `_. + """Removes a specified `access system user `_ from a specified `user identity `_. :param acs_user_id: ID of the access system user that you want to remove from the user identity.. @@ -484,7 +484,7 @@ async def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> N async def revoke_access_to_device( self, *, device_id: str, user_identity_id: str ) -> None: - """Revokes access to a specified `device `_ from a specified `user identity `_. + """Revokes access to a specified `device `_ from a specified `user identity `_. :param device_id: ID of the managed device to which you want to revoke access from the user identity. @@ -502,7 +502,7 @@ async def update( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `user identity `_. + """Updates a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to update. @@ -538,7 +538,7 @@ def add_acs_user( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `user identity `_. + """Adds a specified `access system user `_ to a specified `user identity `_. You must specify either ``user_identity_id`` or ``user_identity_key`` to identify the user identity. @@ -577,7 +577,7 @@ def create( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> UserIdentity: - """Creates a new `user identity `_. + """Creates a new `user identity `_. :param acs_system_ids: List of access system IDs to associate with the new user identity through access system users. If there's no user with the same email address or phone number in the specified access systems, a new access system user is created. If there is an existing user with the same email or phone number in the specified access systems, the user is linked to the user identity. @@ -615,7 +615,7 @@ def create( has_pagination=False, ) def delete(self, *, user_identity_id: str) -> None: - """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. + """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. :param user_identity_id: ID of the user identity that you want to delete.""" params: Dict[str, Any] = {} @@ -639,7 +639,7 @@ def generate_instant_key( customization_profile_id: Optional[str] = None, max_use_count: Optional[float] = None, ) -> InstantKey: - """Generates a new `instant key `_ for a specified `user identity `_. + """Generates a new `instant key `_ for a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to generate an instant key. @@ -679,7 +679,7 @@ def get( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> UserIdentity: - """Returns a specified `user identity `_. + """Returns a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to get. @@ -718,7 +718,7 @@ def get( has_pagination=False, ) def grant_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: - """Grants a specified `user identity `_ access to a specified `device `_. + """Grants a specified `user identity `_ access to a specified `device `_. :param device_id: ID of the managed device to which you want to grant access to the user identity. @@ -750,7 +750,7 @@ def list( search: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> List[UserIdentity]: - """Returns a list of all `user identities `_. + """Returns a list of all `user identities `_. :param created_before: Timestamp by which to limit returned user identities. Returns user identities created before this timestamp. @@ -798,7 +798,7 @@ def list( has_pagination=False, ) def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: - """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. + """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible devices. @@ -823,7 +823,7 @@ def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: has_pagination=False, ) def list_accessible_entrances(self, *, user_identity_id: str) -> List[AcsEntrance]: - """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. + """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible entrances. @@ -850,7 +850,7 @@ def list_accessible_entrances(self, *, user_identity_id: str) -> List[AcsEntranc has_pagination=False, ) def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: - """Returns a list of all `access systems `_ associated with a specified `user identity `_. + """Returns a list of all `access systems `_ associated with a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access systems. @@ -875,7 +875,7 @@ def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: has_pagination=False, ) def list_acs_users(self, *, user_identity_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ assigned to a specified `user identity `_. + """Returns a list of all `access system users `_ assigned to a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access system users. @@ -910,7 +910,7 @@ def merge( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. + """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. The primary user identity takes on any email address or phone number it was missing from the user identities merged into it, and the merged user identities are then deleted. Their IDs and keys keep working: looking one up returns the primary user identity, and they are listed on it as ``merged_user_identity_ids`` and ``merged_user_identity_keys``. @@ -961,7 +961,7 @@ def merge( has_pagination=False, ) def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: - """Removes a specified `access system user `_ from a specified `user identity `_. + """Removes a specified `access system user `_ from a specified `user identity `_. :param acs_user_id: ID of the access system user that you want to remove from the user identity.. @@ -984,7 +984,7 @@ def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: has_pagination=False, ) def revoke_access_to_device(self, *, device_id: str, user_identity_id: str) -> None: - """Revokes access to a specified `device `_ from a specified `user identity `_. + """Revokes access to a specified `device `_ from a specified `user identity `_. :param device_id: ID of the managed device to which you want to revoke access from the user identity. @@ -1015,7 +1015,7 @@ def update( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `user identity `_. + """Updates a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to update. @@ -1066,7 +1066,7 @@ async def add_acs_user( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Adds a specified `access system user `_ to a specified `user identity `_. + """Adds a specified `access system user `_ to a specified `user identity `_. You must specify either ``user_identity_id`` or ``user_identity_key`` to identify the user identity. @@ -1105,7 +1105,7 @@ async def create( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> UserIdentity: - """Creates a new `user identity `_. + """Creates a new `user identity `_. :param acs_system_ids: List of access system IDs to associate with the new user identity through access system users. If there's no user with the same email address or phone number in the specified access systems, a new access system user is created. If there is an existing user with the same email or phone number in the specified access systems, the user is linked to the user identity. @@ -1143,7 +1143,7 @@ async def create( has_pagination=False, ) async def delete(self, *, user_identity_id: str) -> None: - """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. + """Deletes a specified `user identity `_. This deletes the user identity and all associated resources, including any `credentials `_, `acs users `_ and `client sessions `_. :param user_identity_id: ID of the user identity that you want to delete.""" params: Dict[str, Any] = {} @@ -1167,7 +1167,7 @@ async def generate_instant_key( customization_profile_id: Optional[str] = None, max_use_count: Optional[float] = None, ) -> InstantKey: - """Generates a new `instant key `_ for a specified `user identity `_. + """Generates a new `instant key `_ for a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to generate an instant key. @@ -1207,7 +1207,7 @@ async def get( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> UserIdentity: - """Returns a specified `user identity `_. + """Returns a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to get. @@ -1248,7 +1248,7 @@ async def get( async def grant_access_to_device( self, *, device_id: str, user_identity_id: str ) -> None: - """Grants a specified `user identity `_ access to a specified `device `_. + """Grants a specified `user identity `_ access to a specified `device `_. :param device_id: ID of the managed device to which you want to grant access to the user identity. @@ -1282,7 +1282,7 @@ async def list( search: Optional[str] = None, user_identity_ids: Optional[List[str]] = None, ) -> List[UserIdentity]: - """Returns a list of all `user identities `_. + """Returns a list of all `user identities `_. :param created_before: Timestamp by which to limit returned user identities. Returns user identities created before this timestamp. @@ -1330,7 +1330,7 @@ async def list( has_pagination=False, ) async def list_accessible_devices(self, *, user_identity_id: str) -> List[Device]: - """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. + """Returns a list of all `devices `_ associated with a specified `user identity `_. This includes devices derived from the access grants assigned to the user identity and devices directly linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible devices. @@ -1359,7 +1359,7 @@ async def list_accessible_devices(self, *, user_identity_id: str) -> List[Device async def list_accessible_entrances( self, *, user_identity_id: str ) -> List[AcsEntrance]: - """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. + """Returns a list of all `ACS entrances `_ accessible to a specified `user identity `_. This includes entrances derived from the access grants assigned to the user identity and entrances accessible through ACS users linked to the user identity. :param user_identity_id: ID of the user identity for which you want to retrieve all accessible entrances. @@ -1386,7 +1386,7 @@ async def list_accessible_entrances( has_pagination=False, ) async def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: - """Returns a list of all `access systems `_ associated with a specified `user identity `_. + """Returns a list of all `access systems `_ associated with a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access systems. @@ -1411,7 +1411,7 @@ async def list_acs_systems(self, *, user_identity_id: str) -> List[AcsSystem]: has_pagination=False, ) async def list_acs_users(self, *, user_identity_id: str) -> List[AcsUser]: - """Returns a list of all `access system users `_ assigned to a specified `user identity `_. + """Returns a list of all `access system users `_ assigned to a specified `user identity `_. :param user_identity_id: ID of the user identity for which you want to retrieve all access system users. @@ -1446,7 +1446,7 @@ async def merge( user_identity_id: Optional[str] = None, user_identity_key: Optional[str] = None, ) -> None: - """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. + """Merges one or more `user identities `_ into a primary user identity, for when the same person ended up with more than one user identity. The primary user identity takes on any email address or phone number it was missing from the user identities merged into it, and the merged user identities are then deleted. Their IDs and keys keep working: looking one up returns the primary user identity, and they are listed on it as ``merged_user_identity_ids`` and ``merged_user_identity_keys``. @@ -1497,7 +1497,7 @@ async def merge( has_pagination=False, ) async def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> None: - """Removes a specified `access system user `_ from a specified `user identity `_. + """Removes a specified `access system user `_ from a specified `user identity `_. :param acs_user_id: ID of the access system user that you want to remove from the user identity.. @@ -1522,7 +1522,7 @@ async def remove_acs_user(self, *, acs_user_id: str, user_identity_id: str) -> N async def revoke_access_to_device( self, *, device_id: str, user_identity_id: str ) -> None: - """Revokes access to a specified `device `_ from a specified `user identity `_. + """Revokes access to a specified `device `_ from a specified `user identity `_. :param device_id: ID of the managed device to which you want to revoke access from the user identity. @@ -1555,7 +1555,7 @@ async def update( phone_number: Optional[Union[str, Null]] = None, user_identity_key: Optional[Union[str, Null]] = None, ) -> None: - """Updates a specified `user identity `_. + """Updates a specified `user identity `_. :param user_identity_id: ID of the user identity that you want to update. diff --git a/seam/routes/user_identities_unmanaged.py b/seam/routes/user_identities_unmanaged.py index 0d6b03a7..cdbef1b3 100644 --- a/seam/routes/user_identities_unmanaged.py +++ b/seam/routes/user_identities_unmanaged.py @@ -13,7 +13,7 @@ class AbstractUserIdentitiesUnmanaged(abc.ABC): @abc.abstractmethod def get(self, *, user_identity_id: str) -> UnmanagedUserIdentity: - """Returns a specified unmanaged `user identity `_ (where is_managed = false). + """Returns a specified unmanaged `user identity `_ (where is_managed = false). :param user_identity_id: ID of the unmanaged user identity that you want to get. @@ -29,7 +29,7 @@ def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedUserIdentity]: - """Returns a list of all unmanaged `user identities `_ (where is_managed = false). + """Returns a list of all unmanaged `user identities `_ (where is_managed = false). :param created_before: Timestamp by which to limit returned unmanaged user identities. Returns user identities created before this timestamp. @@ -50,7 +50,7 @@ def update( user_identity_id: str, user_identity_key: Optional[str] = None, ) -> None: - """Updates an unmanaged `user identity `_ to make it managed. + """Updates an unmanaged `user identity `_ to make it managed. This endpoint can only be used to convert unmanaged user identities to managed ones by setting ``is_managed`` to ``true``. It cannot be used to convert managed user identities back to unmanaged. @@ -67,7 +67,7 @@ class AbstractAsyncUserIdentitiesUnmanaged(abc.ABC): @abc.abstractmethod async def get(self, *, user_identity_id: str) -> UnmanagedUserIdentity: - """Returns a specified unmanaged `user identity `_ (where is_managed = false). + """Returns a specified unmanaged `user identity `_ (where is_managed = false). :param user_identity_id: ID of the unmanaged user identity that you want to get. @@ -83,7 +83,7 @@ async def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedUserIdentity]: - """Returns a list of all unmanaged `user identities `_ (where is_managed = false). + """Returns a list of all unmanaged `user identities `_ (where is_managed = false). :param created_before: Timestamp by which to limit returned unmanaged user identities. Returns user identities created before this timestamp. @@ -104,7 +104,7 @@ async def update( user_identity_id: str, user_identity_key: Optional[str] = None, ) -> None: - """Updates an unmanaged `user identity `_ to make it managed. + """Updates an unmanaged `user identity `_ to make it managed. This endpoint can only be used to convert unmanaged user identities to managed ones by setting ``is_managed`` to ``true``. It cannot be used to convert managed user identities back to unmanaged. @@ -128,7 +128,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) def get(self, *, user_identity_id: str) -> UnmanagedUserIdentity: - """Returns a specified unmanaged `user identity `_ (where is_managed = false). + """Returns a specified unmanaged `user identity `_ (where is_managed = false). :param user_identity_id: ID of the unmanaged user identity that you want to get. @@ -157,7 +157,7 @@ def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedUserIdentity]: - """Returns a list of all unmanaged `user identities `_ (where is_managed = false). + """Returns a list of all unmanaged `user identities `_ (where is_managed = false). :param created_before: Timestamp by which to limit returned unmanaged user identities. Returns user identities created before this timestamp. @@ -203,7 +203,7 @@ def update( user_identity_id: str, user_identity_key: Optional[str] = None, ) -> None: - """Updates an unmanaged `user identity `_ to make it managed. + """Updates an unmanaged `user identity `_ to make it managed. This endpoint can only be used to convert unmanaged user identities to managed ones by setting ``is_managed`` to ``true``. It cannot be used to convert managed user identities back to unmanaged. @@ -238,7 +238,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): has_pagination=False, ) async def get(self, *, user_identity_id: str) -> UnmanagedUserIdentity: - """Returns a specified unmanaged `user identity `_ (where is_managed = false). + """Returns a specified unmanaged `user identity `_ (where is_managed = false). :param user_identity_id: ID of the unmanaged user identity that you want to get. @@ -267,7 +267,7 @@ async def list( page_cursor: Optional[Union[str, Null]] = None, search: Optional[str] = None, ) -> List[UnmanagedUserIdentity]: - """Returns a list of all unmanaged `user identities `_ (where is_managed = false). + """Returns a list of all unmanaged `user identities `_ (where is_managed = false). :param created_before: Timestamp by which to limit returned unmanaged user identities. Returns user identities created before this timestamp. @@ -313,7 +313,7 @@ async def update( user_identity_id: str, user_identity_key: Optional[str] = None, ) -> None: - """Updates an unmanaged `user identity `_ to make it managed. + """Updates an unmanaged `user identity `_ to make it managed. This endpoint can only be used to convert unmanaged user identities to managed ones by setting ``is_managed`` to ``true``. It cannot be used to convert managed user identities back to unmanaged. diff --git a/seam/routes/webhooks.py b/seam/routes/webhooks.py index 95784617..0182d478 100644 --- a/seam/routes/webhooks.py +++ b/seam/routes/webhooks.py @@ -11,7 +11,7 @@ class AbstractWebhooks(abc.ABC): @abc.abstractmethod def create(self, *, url: str, event_types: Optional[List[str]] = None) -> Webhook: - """Creates a new `webhook `_. + """Creates a new `webhook `_. :param url: URL for the new webhook. @@ -22,14 +22,14 @@ def create(self, *, url: str, event_types: Optional[List[str]] = None) -> Webhoo @abc.abstractmethod def delete(self, *, webhook_id: str) -> None: - """Deletes a specified `webhook `_. + """Deletes a specified `webhook `_. :param webhook_id: ID of the webhook that you want to delete.""" raise NotImplementedError() @abc.abstractmethod def get(self, *, webhook_id: str) -> Webhook: - """Gets a specified `webhook `_. + """Gets a specified `webhook `_. :param webhook_id: ID of the webhook that you want to get. @@ -38,14 +38,14 @@ def get(self, *, webhook_id: str) -> Webhook: @abc.abstractmethod def list(self) -> List[Webhook]: - """Returns a list of all `webhooks `_. + """Returns a list of all `webhooks `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod def update(self, *, event_types: List[str], webhook_id: str) -> None: - """Updates a specified `webhook `_. + """Updates a specified `webhook `_. :param event_types: Types of events that you want the webhook to receive. @@ -59,7 +59,7 @@ class AbstractAsyncWebhooks(abc.ABC): async def create( self, *, url: str, event_types: Optional[List[str]] = None ) -> Webhook: - """Creates a new `webhook `_. + """Creates a new `webhook `_. :param url: URL for the new webhook. @@ -70,14 +70,14 @@ async def create( @abc.abstractmethod async def delete(self, *, webhook_id: str) -> None: - """Deletes a specified `webhook `_. + """Deletes a specified `webhook `_. :param webhook_id: ID of the webhook that you want to delete.""" raise NotImplementedError() @abc.abstractmethod async def get(self, *, webhook_id: str) -> Webhook: - """Gets a specified `webhook `_. + """Gets a specified `webhook `_. :param webhook_id: ID of the webhook that you want to get. @@ -86,14 +86,14 @@ async def get(self, *, webhook_id: str) -> Webhook: @abc.abstractmethod async def list(self) -> List[Webhook]: - """Returns a list of all `webhooks `_. + """Returns a list of all `webhooks `_. :returns: OK""" raise NotImplementedError() @abc.abstractmethod async def update(self, *, event_types: List[str], webhook_id: str) -> None: - """Updates a specified `webhook `_. + """Updates a specified `webhook `_. :param event_types: Types of events that you want the webhook to receive. @@ -110,7 +110,7 @@ def __init__(self, client: SeamHttpClient, defaults: Dict[str, Any]): path="/webhooks/create", at_least_one_parameter_names=(), has_pagination=False ) def create(self, *, url: str, event_types: Optional[List[str]] = None) -> Webhook: - """Creates a new `webhook `_. + """Creates a new `webhook `_. :param url: URL for the new webhook. @@ -132,7 +132,7 @@ def create(self, *, url: str, event_types: Optional[List[str]] = None) -> Webhoo path="/webhooks/delete", at_least_one_parameter_names=(), has_pagination=False ) def delete(self, *, webhook_id: str) -> None: - """Deletes a specified `webhook `_. + """Deletes a specified `webhook `_. :param webhook_id: ID of the webhook that you want to delete.""" params: Dict[str, Any] = {} @@ -148,7 +148,7 @@ def delete(self, *, webhook_id: str) -> None: path="/webhooks/get", at_least_one_parameter_names=(), has_pagination=False ) def get(self, *, webhook_id: str) -> Webhook: - """Gets a specified `webhook `_. + """Gets a specified `webhook `_. :param webhook_id: ID of the webhook that you want to get. @@ -166,7 +166,7 @@ def get(self, *, webhook_id: str) -> Webhook: path="/webhooks/list", at_least_one_parameter_names=(), has_pagination=False ) def list(self) -> List[Webhook]: - """Returns a list of all `webhooks `_. + """Returns a list of all `webhooks `_. :returns: OK""" params: Dict[str, Any] = {} @@ -182,7 +182,7 @@ def list(self) -> List[Webhook]: path="/webhooks/update", at_least_one_parameter_names=(), has_pagination=False ) def update(self, *, event_types: List[str], webhook_id: str) -> None: - """Updates a specified `webhook `_. + """Updates a specified `webhook `_. :param event_types: Types of events that you want the webhook to receive. @@ -210,7 +210,7 @@ def __init__(self, client: AsyncSeamHttpClient, defaults: Dict[str, Any]): async def create( self, *, url: str, event_types: Optional[List[str]] = None ) -> Webhook: - """Creates a new `webhook `_. + """Creates a new `webhook `_. :param url: URL for the new webhook. @@ -232,7 +232,7 @@ async def create( path="/webhooks/delete", at_least_one_parameter_names=(), has_pagination=False ) async def delete(self, *, webhook_id: str) -> None: - """Deletes a specified `webhook `_. + """Deletes a specified `webhook `_. :param webhook_id: ID of the webhook that you want to delete.""" params: Dict[str, Any] = {} @@ -248,7 +248,7 @@ async def delete(self, *, webhook_id: str) -> None: path="/webhooks/get", at_least_one_parameter_names=(), has_pagination=False ) async def get(self, *, webhook_id: str) -> Webhook: - """Gets a specified `webhook `_. + """Gets a specified `webhook `_. :param webhook_id: ID of the webhook that you want to get. @@ -266,7 +266,7 @@ async def get(self, *, webhook_id: str) -> Webhook: path="/webhooks/list", at_least_one_parameter_names=(), has_pagination=False ) async def list(self) -> List[Webhook]: - """Returns a list of all `webhooks `_. + """Returns a list of all `webhooks `_. :returns: OK""" params: Dict[str, Any] = {} @@ -282,7 +282,7 @@ async def list(self) -> List[Webhook]: path="/webhooks/update", at_least_one_parameter_names=(), has_pagination=False ) async def update(self, *, event_types: List[str], webhook_id: str) -> None: - """Updates a specified `webhook `_. + """Updates a specified `webhook `_. :param event_types: Types of events that you want the webhook to receive. diff --git a/seam/routes/workspaces.py b/seam/routes/workspaces.py index 9c14fd88..1163f2c5 100644 --- a/seam/routes/workspaces.py +++ b/seam/routes/workspaces.py @@ -29,7 +29,7 @@ def create( webview_primary_button_text_color: Optional[str] = None, webview_success_message: Optional[str] = None, ) -> Workspace: - """Creates a new `workspace `_. + """Creates a new `workspace `_. :param name: Name of the new workspace. @@ -37,11 +37,11 @@ def create( :param connect_partner_name: Connect partner name for the new workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. + :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. - :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. + :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. If you administer no organization, Seam creates one for you and associates the new workspace with it. :param webview_logo_shape: Deprecated: Use ``connect_webview_customization.webview_logo_shape`` instead. @@ -56,14 +56,14 @@ def create( @abc.abstractmethod def get(self) -> Workspace: - """Returns the `workspace `_ associated with the authentication value. + """Returns the `workspace `_ associated with the authentication value. :returns: OK""" raise NotImplementedError() @abc.abstractmethod def list(self) -> List[Workspace]: - """Returns a list of `workspaces `_ associated with the authentication value. + """Returns a list of `workspaces `_ associated with the authentication value. :returns: OK""" raise NotImplementedError() @@ -72,7 +72,7 @@ def list(self) -> List[Workspace]: def reset_sandbox( self, *, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None ) -> ActionAttempt: - """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. + """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -90,11 +90,11 @@ def update( name: Optional[str] = None, organization_id: Optional[str] = None, ) -> None: - """Updates the `workspace `_ associated with the authentication value. + """Updates the `workspace `_ associated with the authentication value. :param connect_partner_name: Connect partner name for the workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. :param is_publishable_key_auth_enabled: Indicates whether publishable key authentication is enabled for this workspace. @@ -124,7 +124,7 @@ async def create( webview_primary_button_text_color: Optional[str] = None, webview_success_message: Optional[str] = None, ) -> Workspace: - """Creates a new `workspace `_. + """Creates a new `workspace `_. :param name: Name of the new workspace. @@ -132,11 +132,11 @@ async def create( :param connect_partner_name: Connect partner name for the new workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. + :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. - :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. + :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. If you administer no organization, Seam creates one for you and associates the new workspace with it. :param webview_logo_shape: Deprecated: Use ``connect_webview_customization.webview_logo_shape`` instead. @@ -151,14 +151,14 @@ async def create( @abc.abstractmethod async def get(self) -> Workspace: - """Returns the `workspace `_ associated with the authentication value. + """Returns the `workspace `_ associated with the authentication value. :returns: OK""" raise NotImplementedError() @abc.abstractmethod async def list(self) -> List[Workspace]: - """Returns a list of `workspaces `_ associated with the authentication value. + """Returns a list of `workspaces `_ associated with the authentication value. :returns: OK""" raise NotImplementedError() @@ -167,7 +167,7 @@ async def list(self) -> List[Workspace]: async def reset_sandbox( self, *, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None ) -> ActionAttempt: - """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. + """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -185,11 +185,11 @@ async def update( name: Optional[str] = None, organization_id: Optional[str] = None, ) -> None: - """Updates the `workspace `_ associated with the authentication value. + """Updates the `workspace `_ associated with the authentication value. :param connect_partner_name: Connect partner name for the workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. :param is_publishable_key_auth_enabled: Indicates whether publishable key authentication is enabled for this workspace. @@ -224,7 +224,7 @@ def create( webview_primary_button_text_color: Optional[str] = None, webview_success_message: Optional[str] = None, ) -> Workspace: - """Creates a new `workspace `_. + """Creates a new `workspace `_. :param name: Name of the new workspace. @@ -232,11 +232,11 @@ def create( :param connect_partner_name: Connect partner name for the new workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. + :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. - :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. + :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. If you administer no organization, Seam creates one for you and associates the new workspace with it. :param webview_logo_shape: Deprecated: Use ``connect_webview_customization.webview_logo_shape`` instead. @@ -282,7 +282,7 @@ def create( path="/workspaces/get", at_least_one_parameter_names=(), has_pagination=False ) def get(self) -> Workspace: - """Returns the `workspace `_ associated with the authentication value. + """Returns the `workspace `_ associated with the authentication value. :returns: OK""" params: Dict[str, Any] = {} @@ -295,7 +295,7 @@ def get(self) -> Workspace: path="/workspaces/list", at_least_one_parameter_names=(), has_pagination=False ) def list(self) -> List[Workspace]: - """Returns a list of `workspaces `_ associated with the authentication value. + """Returns a list of `workspaces `_ associated with the authentication value. :returns: OK""" params: Dict[str, Any] = {} @@ -315,7 +315,7 @@ def list(self) -> List[Workspace]: def reset_sandbox( self, *, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None ) -> ActionAttempt: - """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. + """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -351,11 +351,11 @@ def update( name: Optional[str] = None, organization_id: Optional[str] = None, ) -> None: - """Updates the `workspace `_ associated with the authentication value. + """Updates the `workspace `_ associated with the authentication value. :param connect_partner_name: Connect partner name for the workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. :param is_publishable_key_auth_enabled: Indicates whether publishable key authentication is enabled for this workspace. @@ -411,7 +411,7 @@ async def create( webview_primary_button_text_color: Optional[str] = None, webview_success_message: Optional[str] = None, ) -> Workspace: - """Creates a new `workspace `_. + """Creates a new `workspace `_. :param name: Name of the new workspace. @@ -419,11 +419,11 @@ async def create( :param connect_partner_name: Connect partner name for the new workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the new workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. - :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. + :param is_sandbox: Indicates whether the new workspace is a `sandbox workspace `_. - :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. + :param organization_id: ID of the organization to associate with the new workspace. If omitted, the new workspace is associated with the organization that you administer, if you administer exactly one. If you administer no organization, Seam creates one for you and associates the new workspace with it. :param webview_logo_shape: Deprecated: Use ``connect_webview_customization.webview_logo_shape`` instead. @@ -469,7 +469,7 @@ async def create( path="/workspaces/get", at_least_one_parameter_names=(), has_pagination=False ) async def get(self) -> Workspace: - """Returns the `workspace `_ associated with the authentication value. + """Returns the `workspace `_ associated with the authentication value. :returns: OK""" params: Dict[str, Any] = {} @@ -482,7 +482,7 @@ async def get(self) -> Workspace: path="/workspaces/list", at_least_one_parameter_names=(), has_pagination=False ) async def list(self) -> List[Workspace]: - """Returns a list of `workspaces `_ associated with the authentication value. + """Returns a list of `workspaces `_ associated with the authentication value. :returns: OK""" params: Dict[str, Any] = {} @@ -502,7 +502,7 @@ async def list(self) -> List[Workspace]: async def reset_sandbox( self, *, wait_for_action_attempt: Optional[Union[bool, Dict[str, float]]] = None ) -> ActionAttempt: - """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. + """Resets the `sandbox workspace `_ associated with the authentication value. Note that this endpoint is only available for sandbox workspaces. :param wait_for_action_attempt: Whether, and for how long, to wait for the action attempt to finish. @@ -538,11 +538,11 @@ async def update( name: Optional[str] = None, organization_id: Optional[str] = None, ) -> None: - """Updates the `workspace `_ associated with the authentication value. + """Updates the `workspace `_ associated with the authentication value. :param connect_partner_name: Connect partner name for the workspace. - :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. + :param connect_webview_customization: `Connect Webview `_ customizations for the workspace. See also `Customize the Look and Feel of Your Connect Webviews `_. :param is_publishable_key_auth_enabled: Indicates whether publishable key authentication is enabled for this workspace.