diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 8e76abb..4808d97 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "5.0.0"
+ ".": "5.1.0"
}
\ No newline at end of file
diff --git a/.stats.yml b/.stats.yml
index ecc682c..d1dec4b 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 163
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/droidrun/droidrun-cloud-a00f37a39074e0b00cf6a706aa69307a8ee8f7012966f71037085c5f0fa3ce39.yml
-openapi_spec_hash: 8e7f2e32d8d7dfe18060c45f56d8cf48
+configured_endpoints: 160
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/droidrun/droidrun-cloud-1f76a7dc8fca7f07cb386036f42d21a1124965c458c28a2efe03bb829609dff5.yml
+openapi_spec_hash: 1f5262ae5849178b5dfd766537910ec5
config_hash: dcea68e3d1becafc8b349671e3a0763d
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7d7e44b..7b9ff4e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## 5.1.0 (2026-06-19)
+
+Full Changelog: [v5.0.0...v5.1.0](https://github.com/droidrun/mobilerun-sdk-python/compare/v5.0.0...v5.1.0)
+
+### Features
+
+* **api:** api update ([458209a](https://github.com/droidrun/mobilerun-sdk-python/commit/458209a064d4be4eedfceab7f680bc9329e5de73))
+* **api:** api update ([93a672c](https://github.com/droidrun/mobilerun-sdk-python/commit/93a672ceb48abc041a26ea744d797048ebc894b0))
+
## 5.0.0 (2026-06-18)
Full Changelog: [v3.2.0...v5.0.0](https://github.com/droidrun/mobilerun-sdk-python/compare/v3.2.0...v5.0.0)
diff --git a/api.md b/api.md
index d19900e..1c524a7 100644
--- a/api.md
+++ b/api.md
@@ -709,25 +709,6 @@ Methods:
- client.workflows.timezones.list() -> TimezoneListResponse
-## Secrets
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import (
- UserSecret,
- SecretCreateResponse,
- SecretListResponse,
- SecretDeleteResponse,
-)
-```
-
-Methods:
-
-- client.workflows.secrets.create(\*\*params) -> SecretCreateResponse
-- client.workflows.secrets.list() -> SecretListResponse
-- client.workflows.secrets.delete(secret_id) -> SecretDeleteResponse
-
# Webhooks
Types:
diff --git a/pyproject.toml b/pyproject.toml
index 92a3d5d..a49aac4 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "mobilerun-sdk"
-version = "5.0.0"
+version = "5.1.0"
description = "The official Python library for the mobilerun API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/mobilerun_sdk/_version.py b/src/mobilerun_sdk/_version.py
index f6ed05f..c478aec 100644
--- a/src/mobilerun_sdk/_version.py
+++ b/src/mobilerun_sdk/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "mobilerun_sdk"
-__version__ = "5.0.0" # x-release-please-version
+__version__ = "5.1.0" # x-release-please-version
diff --git a/src/mobilerun_sdk/resources/workflows/__init__.py b/src/mobilerun_sdk/resources/workflows/__init__.py
index 9923a1b..2b80e07 100644
--- a/src/mobilerun_sdk/resources/workflows/__init__.py
+++ b/src/mobilerun_sdk/resources/workflows/__init__.py
@@ -24,14 +24,6 @@
ActionsResourceWithStreamingResponse,
AsyncActionsResourceWithStreamingResponse,
)
-from .secrets import (
- SecretsResource,
- AsyncSecretsResource,
- SecretsResourceWithRawResponse,
- AsyncSecretsResourceWithRawResponse,
- SecretsResourceWithStreamingResponse,
- AsyncSecretsResourceWithStreamingResponse,
-)
from .triggers import (
TriggersResource,
AsyncTriggersResource,
@@ -116,12 +108,6 @@
"AsyncTimezonesResourceWithRawResponse",
"TimezonesResourceWithStreamingResponse",
"AsyncTimezonesResourceWithStreamingResponse",
- "SecretsResource",
- "AsyncSecretsResource",
- "SecretsResourceWithRawResponse",
- "AsyncSecretsResourceWithRawResponse",
- "SecretsResourceWithStreamingResponse",
- "AsyncSecretsResourceWithStreamingResponse",
"WorkflowsResource",
"AsyncWorkflowsResource",
"WorkflowsResourceWithRawResponse",
diff --git a/src/mobilerun_sdk/resources/workflows/events/events.py b/src/mobilerun_sdk/resources/workflows/events/events.py
index 09d9238..450f4bb 100644
--- a/src/mobilerun_sdk/resources/workflows/events/events.py
+++ b/src/mobilerun_sdk/resources/workflows/events/events.py
@@ -60,7 +60,6 @@ def dry_run(
self,
*,
event_type: str,
- device_id: str | Omit = omit,
payload: Dict[str, Optional[object]] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -88,7 +87,6 @@ def dry_run(
body=maybe_transform(
{
"event_type": event_type,
- "device_id": device_id,
"payload": payload,
},
event_dry_run_params.EventDryRunParams,
@@ -103,7 +101,6 @@ def ingest(
self,
*,
event_type: str,
- device_id: str | Omit = omit,
payload: Dict[str, Optional[object]] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -130,7 +127,6 @@ def ingest(
body=maybe_transform(
{
"event_type": event_type,
- "device_id": device_id,
"payload": payload,
},
event_ingest_params.EventIngestParams,
@@ -170,7 +166,6 @@ async def dry_run(
self,
*,
event_type: str,
- device_id: str | Omit = omit,
payload: Dict[str, Optional[object]] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -198,7 +193,6 @@ async def dry_run(
body=await async_maybe_transform(
{
"event_type": event_type,
- "device_id": device_id,
"payload": payload,
},
event_dry_run_params.EventDryRunParams,
@@ -213,7 +207,6 @@ async def ingest(
self,
*,
event_type: str,
- device_id: str | Omit = omit,
payload: Dict[str, Optional[object]] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -240,7 +233,6 @@ async def ingest(
body=await async_maybe_transform(
{
"event_type": event_type,
- "device_id": device_id,
"payload": payload,
},
event_ingest_params.EventIngestParams,
diff --git a/src/mobilerun_sdk/resources/workflows/executions.py b/src/mobilerun_sdk/resources/workflows/executions.py
index cb5a0dd..4d12f2d 100644
--- a/src/mobilerun_sdk/resources/workflows/executions.py
+++ b/src/mobilerun_sdk/resources/workflows/executions.py
@@ -89,7 +89,7 @@ def list(
page: int | Omit = omit,
page_size: int | Omit = omit,
search: str | Omit = omit,
- status: Literal["pending", "running", "success", "failed"] | Omit = omit,
+ status: Literal["pending", "running", "success", "failed", "cancelled", "skipped", "invalid"] | Omit = omit,
to: Optional[str] | Omit = omit,
trigger_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -247,7 +247,7 @@ async def list(
page: int | Omit = omit,
page_size: int | Omit = omit,
search: str | Omit = omit,
- status: Literal["pending", "running", "success", "failed"] | Omit = omit,
+ status: Literal["pending", "running", "success", "failed", "cancelled", "skipped", "invalid"] | Omit = omit,
to: Optional[str] | Omit = omit,
trigger_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
diff --git a/src/mobilerun_sdk/resources/workflows/flows/actions.py b/src/mobilerun_sdk/resources/workflows/flows/actions.py
index caea3b8..06e3278 100644
--- a/src/mobilerun_sdk/resources/workflows/flows/actions.py
+++ b/src/mobilerun_sdk/resources/workflows/flows/actions.py
@@ -89,7 +89,6 @@ def add(
position: int,
children: Iterable[FlowChildActionInputParam] | Omit = omit,
continue_on_error: bool | Omit = omit,
- device_id: str | Omit = omit,
name_override: str | Omit = omit,
overrides: Optional[FlowActionOverridesParam] | Omit = omit,
parent_flow_action_id: Optional[str] | Omit = omit,
@@ -122,7 +121,6 @@ def add(
"position": position,
"children": children,
"continue_on_error": continue_on_error,
- "device_id": device_id,
"name_override": name_override,
"overrides": overrides,
"parent_flow_action_id": parent_flow_action_id,
@@ -268,7 +266,6 @@ async def add(
position: int,
children: Iterable[FlowChildActionInputParam] | Omit = omit,
continue_on_error: bool | Omit = omit,
- device_id: str | Omit = omit,
name_override: str | Omit = omit,
overrides: Optional[FlowActionOverridesParam] | Omit = omit,
parent_flow_action_id: Optional[str] | Omit = omit,
@@ -301,7 +298,6 @@ async def add(
"position": position,
"children": children,
"continue_on_error": continue_on_error,
- "device_id": device_id,
"name_override": name_override,
"overrides": overrides,
"parent_flow_action_id": parent_flow_action_id,
diff --git a/src/mobilerun_sdk/resources/workflows/flows/flows.py b/src/mobilerun_sdk/resources/workflows/flows/flows.py
index d6881fa..c1acea9 100644
--- a/src/mobilerun_sdk/resources/workflows/flows/flows.py
+++ b/src/mobilerun_sdk/resources/workflows/flows/flows.py
@@ -15,7 +15,7 @@
ActionsResourceWithStreamingResponse,
AsyncActionsResourceWithStreamingResponse,
)
-from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
+from ...._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
from ...._utils import path_template, maybe_transform, async_maybe_transform
from ...._compat import cached_property
from ...._resource import SyncAPIResource, AsyncAPIResource
@@ -71,7 +71,11 @@ def create(
cooldown_scope: Literal["flow", "device"] | Omit = omit,
cooldown_seconds: Optional[int] | Omit = omit,
description: str | Omit = omit,
+ device_ids: SequenceNotStr[str] | Omit = omit,
enabled: bool | Omit = omit,
+ notify_on_failure: bool | Omit = omit,
+ notify_on_success: bool | Omit = omit,
+ notify_webhook_id: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -101,7 +105,11 @@ def create(
"cooldown_scope": cooldown_scope,
"cooldown_seconds": cooldown_seconds,
"description": description,
+ "device_ids": device_ids,
"enabled": enabled,
+ "notify_on_failure": notify_on_failure,
+ "notify_on_success": notify_on_success,
+ "notify_webhook_id": notify_webhook_id,
},
flow_create_params.FlowCreateParams,
),
@@ -151,8 +159,12 @@ def update(
cooldown_scope: Literal["flow", "device"] | Omit = omit,
cooldown_seconds: Optional[int] | Omit = omit,
description: str | Omit = omit,
+ device_ids: SequenceNotStr[str] | Omit = omit,
enabled: bool | Omit = omit,
name: str | Omit = omit,
+ notify_on_failure: bool | Omit = omit,
+ notify_on_success: bool | Omit = omit,
+ notify_webhook_id: Optional[str] | Omit = omit,
trigger_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -182,8 +194,12 @@ def update(
"cooldown_scope": cooldown_scope,
"cooldown_seconds": cooldown_seconds,
"description": description,
+ "device_ids": device_ids,
"enabled": enabled,
"name": name,
+ "notify_on_failure": notify_on_failure,
+ "notify_on_success": notify_on_success,
+ "notify_webhook_id": notify_webhook_id,
"trigger_id": trigger_id,
},
flow_update_params.FlowUpdateParams,
@@ -285,6 +301,7 @@ def clone(
self,
flow_id: str,
*,
+ device_ids: SequenceNotStr[str] | Omit = omit,
name: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -309,7 +326,13 @@ def clone(
raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
return self._post(
path_template("/flows/{flow_id}/clone", flow_id=flow_id),
- body=maybe_transform({"name": name}, flow_clone_params.FlowCloneParams),
+ body=maybe_transform(
+ {
+ "device_ids": device_ids,
+ "name": name,
+ },
+ flow_clone_params.FlowCloneParams,
+ ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
@@ -385,7 +408,11 @@ async def create(
cooldown_scope: Literal["flow", "device"] | Omit = omit,
cooldown_seconds: Optional[int] | Omit = omit,
description: str | Omit = omit,
+ device_ids: SequenceNotStr[str] | Omit = omit,
enabled: bool | Omit = omit,
+ notify_on_failure: bool | Omit = omit,
+ notify_on_success: bool | Omit = omit,
+ notify_webhook_id: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -415,7 +442,11 @@ async def create(
"cooldown_scope": cooldown_scope,
"cooldown_seconds": cooldown_seconds,
"description": description,
+ "device_ids": device_ids,
"enabled": enabled,
+ "notify_on_failure": notify_on_failure,
+ "notify_on_success": notify_on_success,
+ "notify_webhook_id": notify_webhook_id,
},
flow_create_params.FlowCreateParams,
),
@@ -465,8 +496,12 @@ async def update(
cooldown_scope: Literal["flow", "device"] | Omit = omit,
cooldown_seconds: Optional[int] | Omit = omit,
description: str | Omit = omit,
+ device_ids: SequenceNotStr[str] | Omit = omit,
enabled: bool | Omit = omit,
name: str | Omit = omit,
+ notify_on_failure: bool | Omit = omit,
+ notify_on_success: bool | Omit = omit,
+ notify_webhook_id: Optional[str] | Omit = omit,
trigger_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -496,8 +531,12 @@ async def update(
"cooldown_scope": cooldown_scope,
"cooldown_seconds": cooldown_seconds,
"description": description,
+ "device_ids": device_ids,
"enabled": enabled,
"name": name,
+ "notify_on_failure": notify_on_failure,
+ "notify_on_success": notify_on_success,
+ "notify_webhook_id": notify_webhook_id,
"trigger_id": trigger_id,
},
flow_update_params.FlowUpdateParams,
@@ -599,6 +638,7 @@ async def clone(
self,
flow_id: str,
*,
+ device_ids: SequenceNotStr[str] | Omit = omit,
name: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -623,7 +663,13 @@ async def clone(
raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
return await self._post(
path_template("/flows/{flow_id}/clone", flow_id=flow_id),
- body=await async_maybe_transform({"name": name}, flow_clone_params.FlowCloneParams),
+ body=await async_maybe_transform(
+ {
+ "device_ids": device_ids,
+ "name": name,
+ },
+ flow_clone_params.FlowCloneParams,
+ ),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
diff --git a/src/mobilerun_sdk/resources/workflows/secrets.py b/src/mobilerun_sdk/resources/workflows/secrets.py
deleted file mode 100644
index 04f2e00..0000000
--- a/src/mobilerun_sdk/resources/workflows/secrets.py
+++ /dev/null
@@ -1,311 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import httpx
-
-from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
-from ..._utils import path_template, maybe_transform, async_maybe_transform
-from ..._compat import cached_property
-from ..._resource import SyncAPIResource, AsyncAPIResource
-from ..._response import (
- to_raw_response_wrapper,
- to_streamed_response_wrapper,
- async_to_raw_response_wrapper,
- async_to_streamed_response_wrapper,
-)
-from ..._base_client import make_request_options
-from ...types.workflows import secret_create_params
-from ...types.workflows.secret_list_response import SecretListResponse
-from ...types.workflows.secret_create_response import SecretCreateResponse
-from ...types.workflows.secret_delete_response import SecretDeleteResponse
-
-__all__ = ["SecretsResource", "AsyncSecretsResource"]
-
-
-class SecretsResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> SecretsResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/droidrun/mobilerun-sdk-python#accessing-raw-response-data-eg-headers
- """
- return SecretsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> SecretsResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/droidrun/mobilerun-sdk-python#with_streaming_response
- """
- return SecretsResourceWithStreamingResponse(self)
-
- def create(
- self,
- *,
- name: str,
- value: str,
- description: str | Omit = omit,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SecretCreateResponse:
- """
- Create a user secret (write-only; value cannot be read back)
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- return self._post(
- "/secrets",
- body=maybe_transform(
- {
- "name": name,
- "value": value,
- "description": description,
- },
- secret_create_params.SecretCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=SecretCreateResponse,
- )
-
- def list(
- self,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SecretListResponse:
- """List user secrets (metadata only — values never returned)"""
- return self._get(
- "/secrets",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=SecretListResponse,
- )
-
- def delete(
- self,
- secret_id: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SecretDeleteResponse:
- """
- Delete a user secret
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not secret_id:
- raise ValueError(f"Expected a non-empty value for `secret_id` but received {secret_id!r}")
- return self._delete(
- path_template("/secrets/{secret_id}", secret_id=secret_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=SecretDeleteResponse,
- )
-
-
-class AsyncSecretsResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncSecretsResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/droidrun/mobilerun-sdk-python#accessing-raw-response-data-eg-headers
- """
- return AsyncSecretsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncSecretsResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/droidrun/mobilerun-sdk-python#with_streaming_response
- """
- return AsyncSecretsResourceWithStreamingResponse(self)
-
- async def create(
- self,
- *,
- name: str,
- value: str,
- description: str | Omit = omit,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SecretCreateResponse:
- """
- Create a user secret (write-only; value cannot be read back)
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- return await self._post(
- "/secrets",
- body=await async_maybe_transform(
- {
- "name": name,
- "value": value,
- "description": description,
- },
- secret_create_params.SecretCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=SecretCreateResponse,
- )
-
- async def list(
- self,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SecretListResponse:
- """List user secrets (metadata only — values never returned)"""
- return await self._get(
- "/secrets",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=SecretListResponse,
- )
-
- async def delete(
- self,
- secret_id: str,
- *,
- # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
- # The extra values given here take precedence over values defined on the client or passed to this method.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SecretDeleteResponse:
- """
- Delete a user secret
-
- Args:
- extra_headers: Send extra headers
-
- extra_query: Add additional query parameters to the request
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not secret_id:
- raise ValueError(f"Expected a non-empty value for `secret_id` but received {secret_id!r}")
- return await self._delete(
- path_template("/secrets/{secret_id}", secret_id=secret_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=SecretDeleteResponse,
- )
-
-
-class SecretsResourceWithRawResponse:
- def __init__(self, secrets: SecretsResource) -> None:
- self._secrets = secrets
-
- self.create = to_raw_response_wrapper(
- secrets.create,
- )
- self.list = to_raw_response_wrapper(
- secrets.list,
- )
- self.delete = to_raw_response_wrapper(
- secrets.delete,
- )
-
-
-class AsyncSecretsResourceWithRawResponse:
- def __init__(self, secrets: AsyncSecretsResource) -> None:
- self._secrets = secrets
-
- self.create = async_to_raw_response_wrapper(
- secrets.create,
- )
- self.list = async_to_raw_response_wrapper(
- secrets.list,
- )
- self.delete = async_to_raw_response_wrapper(
- secrets.delete,
- )
-
-
-class SecretsResourceWithStreamingResponse:
- def __init__(self, secrets: SecretsResource) -> None:
- self._secrets = secrets
-
- self.create = to_streamed_response_wrapper(
- secrets.create,
- )
- self.list = to_streamed_response_wrapper(
- secrets.list,
- )
- self.delete = to_streamed_response_wrapper(
- secrets.delete,
- )
-
-
-class AsyncSecretsResourceWithStreamingResponse:
- def __init__(self, secrets: AsyncSecretsResource) -> None:
- self._secrets = secrets
-
- self.create = async_to_streamed_response_wrapper(
- secrets.create,
- )
- self.list = async_to_streamed_response_wrapper(
- secrets.list,
- )
- self.delete = async_to_streamed_response_wrapper(
- secrets.delete,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/triggers.py b/src/mobilerun_sdk/resources/workflows/triggers.py
index 99ed8c3..b6a1b4c 100644
--- a/src/mobilerun_sdk/resources/workflows/triggers.py
+++ b/src/mobilerun_sdk/resources/workflows/triggers.py
@@ -281,7 +281,6 @@ def fire(
trigger_id: str,
*,
payload: Dict[str, object],
- device_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -313,10 +312,6 @@ def fire(
Validated against the trigger's customPayloadSchema when one is configured;
otherwise only "must be a JSON object" is enforced.
- device_id: Optional device scope. When supplied, ownership is verified for the calling user
- and the value is passed through to each enqueued execution as the default device
- context.
-
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -329,13 +324,7 @@ def fire(
raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
return self._post(
path_template("/triggers/{trigger_id}/fire", trigger_id=trigger_id),
- body=maybe_transform(
- {
- "payload": payload,
- "device_id": device_id,
- },
- trigger_fire_params.TriggerFireParams,
- ),
+ body=maybe_transform({"payload": payload}, trigger_fire_params.TriggerFireParams),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
@@ -595,7 +584,6 @@ async def fire(
trigger_id: str,
*,
payload: Dict[str, object],
- device_id: str | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -627,10 +615,6 @@ async def fire(
Validated against the trigger's customPayloadSchema when one is configured;
otherwise only "must be a JSON object" is enforced.
- device_id: Optional device scope. When supplied, ownership is verified for the calling user
- and the value is passed through to each enqueued execution as the default device
- context.
-
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -643,13 +627,7 @@ async def fire(
raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
return await self._post(
path_template("/triggers/{trigger_id}/fire", trigger_id=trigger_id),
- body=await async_maybe_transform(
- {
- "payload": payload,
- "device_id": device_id,
- },
- trigger_fire_params.TriggerFireParams,
- ),
+ body=await async_maybe_transform({"payload": payload}, trigger_fire_params.TriggerFireParams),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
diff --git a/src/mobilerun_sdk/resources/workflows/workflows.py b/src/mobilerun_sdk/resources/workflows/workflows.py
index 75a9afa..99d44df 100644
--- a/src/mobilerun_sdk/resources/workflows/workflows.py
+++ b/src/mobilerun_sdk/resources/workflows/workflows.py
@@ -2,14 +2,6 @@
from __future__ import annotations
-from .secrets import (
- SecretsResource,
- AsyncSecretsResource,
- SecretsResourceWithRawResponse,
- AsyncSecretsResourceWithRawResponse,
- SecretsResourceWithStreamingResponse,
- AsyncSecretsResourceWithStreamingResponse,
-)
from .triggers import (
TriggersResource,
AsyncTriggersResource,
@@ -101,10 +93,6 @@ def executions(self) -> ExecutionsResource:
def timezones(self) -> TimezonesResource:
return TimezonesResource(self._client)
- @cached_property
- def secrets(self) -> SecretsResource:
- return SecretsResource(self._client)
-
@cached_property
def with_raw_response(self) -> WorkflowsResourceWithRawResponse:
"""
@@ -154,10 +142,6 @@ def executions(self) -> AsyncExecutionsResource:
def timezones(self) -> AsyncTimezonesResource:
return AsyncTimezonesResource(self._client)
- @cached_property
- def secrets(self) -> AsyncSecretsResource:
- return AsyncSecretsResource(self._client)
-
@cached_property
def with_raw_response(self) -> AsyncWorkflowsResourceWithRawResponse:
"""
@@ -210,10 +194,6 @@ def executions(self) -> ExecutionsResourceWithRawResponse:
def timezones(self) -> TimezonesResourceWithRawResponse:
return TimezonesResourceWithRawResponse(self._workflows.timezones)
- @cached_property
- def secrets(self) -> SecretsResourceWithRawResponse:
- return SecretsResourceWithRawResponse(self._workflows.secrets)
-
class AsyncWorkflowsResourceWithRawResponse:
def __init__(self, workflows: AsyncWorkflowsResource) -> None:
@@ -247,10 +227,6 @@ def executions(self) -> AsyncExecutionsResourceWithRawResponse:
def timezones(self) -> AsyncTimezonesResourceWithRawResponse:
return AsyncTimezonesResourceWithRawResponse(self._workflows.timezones)
- @cached_property
- def secrets(self) -> AsyncSecretsResourceWithRawResponse:
- return AsyncSecretsResourceWithRawResponse(self._workflows.secrets)
-
class WorkflowsResourceWithStreamingResponse:
def __init__(self, workflows: WorkflowsResource) -> None:
@@ -284,10 +260,6 @@ def executions(self) -> ExecutionsResourceWithStreamingResponse:
def timezones(self) -> TimezonesResourceWithStreamingResponse:
return TimezonesResourceWithStreamingResponse(self._workflows.timezones)
- @cached_property
- def secrets(self) -> SecretsResourceWithStreamingResponse:
- return SecretsResourceWithStreamingResponse(self._workflows.secrets)
-
class AsyncWorkflowsResourceWithStreamingResponse:
def __init__(self, workflows: AsyncWorkflowsResource) -> None:
@@ -320,7 +292,3 @@ def executions(self) -> AsyncExecutionsResourceWithStreamingResponse:
@cached_property
def timezones(self) -> AsyncTimezonesResourceWithStreamingResponse:
return AsyncTimezonesResourceWithStreamingResponse(self._workflows.timezones)
-
- @cached_property
- def secrets(self) -> AsyncSecretsResourceWithStreamingResponse:
- return AsyncSecretsResourceWithStreamingResponse(self._workflows.secrets)
diff --git a/src/mobilerun_sdk/types/app_create_signed_upload_url_params.py b/src/mobilerun_sdk/types/app_create_signed_upload_url_params.py
index a374c4b..d33f6e9 100644
--- a/src/mobilerun_sdk/types/app_create_signed_upload_url_params.py
+++ b/src/mobilerun_sdk/types/app_create_signed_upload_url_params.py
@@ -38,6 +38,13 @@ class AppCreateSignedUploadURLParams(TypedDict, total=False):
class File(TypedDict, total=False):
- content_type: Required[Annotated[str, PropertyInfo(alias="contentType")]]
+ content_type: Required[
+ Annotated[
+ Literal["application/vnd.android.package-archive", "application/octet-stream", "application/zip"],
+ PropertyInfo(alias="contentType"),
+ ]
+ ]
file_name: Required[Annotated[str, PropertyInfo(alias="fileName")]]
+
+ sha256: str
diff --git a/src/mobilerun_sdk/types/flow.py b/src/mobilerun_sdk/types/flow.py
index 908b874..6457f9d 100644
--- a/src/mobilerun_sdk/types/flow.py
+++ b/src/mobilerun_sdk/types/flow.py
@@ -1,6 +1,6 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import Optional
+from typing import List, Optional
from typing_extensions import Literal
from pydantic import Field as FieldInfo
@@ -25,18 +25,26 @@ class Flow(BaseModel):
description: Optional[str] = None
+ device_ids: List[str] = FieldInfo(alias="deviceIds")
+
enabled: bool
last_failure_at: Optional[str] = FieldInfo(alias="lastFailureAt", default=None)
last_failure_code: Optional[
- Literal["device_not_found", "permission_denied", "client_error", "transient", "logic"]
+ Literal["device_not_found", "permission_denied", "client_error", "transient", "logic", "invalid_config"]
] = FieldInfo(alias="lastFailureCode", default=None)
last_triggered_at: Optional[str] = FieldInfo(alias="lastTriggeredAt", default=None)
name: str
+ notify_on_failure: bool = FieldInfo(alias="notifyOnFailure")
+
+ notify_on_success: bool = FieldInfo(alias="notifyOnSuccess")
+
+ notify_webhook_id: Optional[str] = FieldInfo(alias="notifyWebhookId", default=None)
+
status: Literal["healthy", "failing", "blocked"]
trigger_id: str = FieldInfo(alias="triggerId")
diff --git a/src/mobilerun_sdk/types/workflows/__init__.py b/src/mobilerun_sdk/types/workflows/__init__.py
index 89853e2..860c6eb 100644
--- a/src/mobilerun_sdk/types/workflows/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/__init__.py
@@ -3,7 +3,6 @@
from __future__ import annotations
from .action import Action as Action
-from .user_secret import UserSecret as UserSecret
from .flow_execution import FlowExecution as FlowExecution
from .flow_list_params import FlowListParams as FlowListParams
from .flow_clone_params import FlowCloneParams as FlowCloneParams
@@ -23,8 +22,6 @@
from .flow_create_response import FlowCreateResponse as FlowCreateResponse
from .flow_delete_response import FlowDeleteResponse as FlowDeleteResponse
from .flow_update_response import FlowUpdateResponse as FlowUpdateResponse
-from .secret_create_params import SecretCreateParams as SecretCreateParams
-from .secret_list_response import SecretListResponse as SecretListResponse
from .event_ingest_response import EventIngestResponse as EventIngestResponse
from .execution_list_params import ExecutionListParams as ExecutionListParams
from .flow_unblock_response import FlowUnblockResponse as FlowUnblockResponse
@@ -37,8 +34,6 @@
from .action_update_response import ActionUpdateResponse as ActionUpdateResponse
from .event_dry_run_response import EventDryRunResponse as EventDryRunResponse
from .flow_retrieve_response import FlowRetrieveResponse as FlowRetrieveResponse
-from .secret_create_response import SecretCreateResponse as SecretCreateResponse
-from .secret_delete_response import SecretDeleteResponse as SecretDeleteResponse
from .timezone_list_response import TimezoneListResponse as TimezoneListResponse
from .execution_list_response import ExecutionListResponse as ExecutionListResponse
from .trigger_create_response import TriggerCreateResponse as TriggerCreateResponse
diff --git a/src/mobilerun_sdk/types/workflows/action.py b/src/mobilerun_sdk/types/workflows/action.py
index fb111f1..1b85a3f 100644
--- a/src/mobilerun_sdk/types/workflows/action.py
+++ b/src/mobilerun_sdk/types/workflows/action.py
@@ -19,8 +19,6 @@ class Action(BaseModel):
description: Optional[str] = None
- is_async: bool = FieldInfo(alias="isAsync")
-
method: str
name: str
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_entry.py b/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
index 4eb711f..5e6278c 100644
--- a/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
+++ b/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
@@ -17,8 +17,6 @@ class ActionCatalogEntry(BaseModel):
description: Optional[str] = None
- is_async: bool = FieldInfo(alias="isAsync")
-
method: str
name: str
diff --git a/src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py b/src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
index 0ebef39..95cff7a 100644
--- a/src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
+++ b/src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
@@ -3,8 +3,6 @@
from typing import List, Optional
from typing_extensions import Literal
-from pydantic import Field as FieldInfo
-
from ...._models import BaseModel
__all__ = ["ServiceListMethodsResponse", "Data", "DataParam"]
@@ -25,14 +23,10 @@ class DataParam(BaseModel):
class Data(BaseModel):
- is_async: bool = FieldInfo(alias="isAsync")
-
method: str
params: List[DataParam]
- requires_target: bool = FieldInfo(alias="requiresTarget")
-
class ServiceListMethodsResponse(BaseModel):
data: List[Data]
diff --git a/src/mobilerun_sdk/types/workflows/event_dry_run_params.py b/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
index c55498e..42cacb5 100644
--- a/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
+++ b/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
@@ -13,6 +13,4 @@
class EventDryRunParams(TypedDict, total=False):
event_type: Required[Annotated[str, PropertyInfo(alias="eventType")]]
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
-
payload: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/event_dry_run_response.py b/src/mobilerun_sdk/types/workflows/event_dry_run_response.py
index 13df857..b1c8264 100644
--- a/src/mobilerun_sdk/types/workflows/event_dry_run_response.py
+++ b/src/mobilerun_sdk/types/workflows/event_dry_run_response.py
@@ -13,6 +13,7 @@
"Data",
"DataMatchedFlow",
"DataMatchedFlowAction",
+ "DataMatchedFlowGates",
"DataMatchedFlowTrigger",
"DataMatchedFlowTriggerScheduleRule",
"DataValidation",
@@ -29,11 +30,27 @@ class DataMatchedFlowAction(BaseModel):
service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
- device_id: Optional[str] = FieldInfo(alias="deviceId", default=None)
+ children: Optional[List[Optional[object]]] = None
+ """
+ Nested child actions (loop/branch bodies), each the same shape as a
+ ResolvedAction.
+ """
params: Optional[Dict[str, Optional[object]]] = None
+class DataMatchedFlowGates(BaseModel):
+ blocked: bool
+
+ cooldown_active: Optional[bool] = FieldInfo(alias="cooldownActive", default=None)
+
+ device_attached: bool = FieldInfo(alias="deviceAttached")
+
+ device_ids: List[str] = FieldInfo(alias="deviceIds")
+
+ enabled: bool
+
+
class DataMatchedFlowTriggerScheduleRule(BaseModel):
type: Literal["once", "cron", "recurring"]
@@ -80,8 +97,12 @@ class DataMatchedFlow(BaseModel):
flow: Flow
+ gates: DataMatchedFlowGates
+
trigger: DataMatchedFlowTrigger
+ would_fire: bool = FieldInfo(alias="wouldFire")
+
class DataValidationError(BaseModel):
field: str
diff --git a/src/mobilerun_sdk/types/workflows/event_ingest_params.py b/src/mobilerun_sdk/types/workflows/event_ingest_params.py
index d8edf19..345113f 100644
--- a/src/mobilerun_sdk/types/workflows/event_ingest_params.py
+++ b/src/mobilerun_sdk/types/workflows/event_ingest_params.py
@@ -13,6 +13,4 @@
class EventIngestParams(TypedDict, total=False):
event_type: Required[Annotated[str, PropertyInfo(alias="eventType")]]
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
-
payload: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py b/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
index 774f398..cb796ac 100644
--- a/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
+++ b/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
@@ -10,12 +10,18 @@
class DataByStatus(BaseModel):
+ cancelled: int
+
failed: int
+ invalid: int
+
pending: int
running: int
+ skipped: int
+
success: int
diff --git a/src/mobilerun_sdk/types/workflows/execution_list_params.py b/src/mobilerun_sdk/types/workflows/execution_list_params.py
index 2ffa5c9..ccc40d4 100644
--- a/src/mobilerun_sdk/types/workflows/execution_list_params.py
+++ b/src/mobilerun_sdk/types/workflows/execution_list_params.py
@@ -25,7 +25,7 @@ class ExecutionListParams(TypedDict, total=False):
search: str
- status: Literal["pending", "running", "success", "failed"]
+ status: Literal["pending", "running", "success", "failed", "cancelled", "skipped", "invalid"]
to: Optional[str]
diff --git a/src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py b/src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
index 9c883c4..a201a30 100644
--- a/src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
+++ b/src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
@@ -18,8 +18,6 @@ class FlowChildActionInputParam(TypedDict, total=False):
continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
-
name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
overrides: Optional[FlowActionOverridesParam]
diff --git a/src/mobilerun_sdk/types/workflows/flow_clone_params.py b/src/mobilerun_sdk/types/workflows/flow_clone_params.py
index e513de2..c38a149 100644
--- a/src/mobilerun_sdk/types/workflows/flow_clone_params.py
+++ b/src/mobilerun_sdk/types/workflows/flow_clone_params.py
@@ -2,10 +2,15 @@
from __future__ import annotations
-from typing_extensions import TypedDict
+from typing_extensions import Annotated, TypedDict
+
+from ..._types import SequenceNotStr
+from ..._utils import PropertyInfo
__all__ = ["FlowCloneParams"]
class FlowCloneParams(TypedDict, total=False):
+ device_ids: Annotated[SequenceNotStr[str], PropertyInfo(alias="deviceIds")]
+
name: str
diff --git a/src/mobilerun_sdk/types/workflows/flow_create_params.py b/src/mobilerun_sdk/types/workflows/flow_create_params.py
index 1dcdd12..464086f 100644
--- a/src/mobilerun_sdk/types/workflows/flow_create_params.py
+++ b/src/mobilerun_sdk/types/workflows/flow_create_params.py
@@ -5,6 +5,7 @@
from typing import Iterable, Optional
from typing_extensions import Literal, Required, Annotated, TypedDict
+from ..._types import SequenceNotStr
from ..._utils import PropertyInfo
from .flow_action_overrides_param import FlowActionOverridesParam
from .flow_child_action_input_param import FlowChildActionInputParam
@@ -25,8 +26,16 @@ class FlowCreateParams(TypedDict, total=False):
description: str
+ device_ids: Annotated[SequenceNotStr[str], PropertyInfo(alias="deviceIds")]
+
enabled: bool
+ notify_on_failure: Annotated[bool, PropertyInfo(alias="notifyOnFailure")]
+
+ notify_on_success: Annotated[bool, PropertyInfo(alias="notifyOnSuccess")]
+
+ notify_webhook_id: Annotated[Optional[str], PropertyInfo(alias="notifyWebhookId")]
+
class Action(TypedDict, total=False):
action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
@@ -37,8 +46,6 @@ class Action(TypedDict, total=False):
continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
-
name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
overrides: Optional[FlowActionOverridesParam]
diff --git a/src/mobilerun_sdk/types/workflows/flow_execution.py b/src/mobilerun_sdk/types/workflows/flow_execution.py
index ba28012..96782d6 100644
--- a/src/mobilerun_sdk/types/workflows/flow_execution.py
+++ b/src/mobilerun_sdk/types/workflows/flow_execution.py
@@ -23,9 +23,11 @@ class FlowExecution(BaseModel):
flow_name: Optional[str] = FieldInfo(alias="flowName", default=None)
+ kind: Literal["live", "dry_run"]
+
started_at: Optional[str] = FieldInfo(alias="startedAt", default=None)
- status: Optional[Literal["pending", "running", "success", "failed"]] = None
+ status: Optional[Literal["pending", "running", "success", "failed", "cancelled", "skipped", "invalid"]] = None
trigger_id: str = FieldInfo(alias="triggerId")
diff --git a/src/mobilerun_sdk/types/workflows/flow_update_params.py b/src/mobilerun_sdk/types/workflows/flow_update_params.py
index 8b29afd..af63c04 100644
--- a/src/mobilerun_sdk/types/workflows/flow_update_params.py
+++ b/src/mobilerun_sdk/types/workflows/flow_update_params.py
@@ -5,6 +5,7 @@
from typing import Optional
from typing_extensions import Literal, Annotated, TypedDict
+from ..._types import SequenceNotStr
from ..._utils import PropertyInfo
__all__ = ["FlowUpdateParams"]
@@ -17,8 +18,16 @@ class FlowUpdateParams(TypedDict, total=False):
description: str
+ device_ids: Annotated[SequenceNotStr[str], PropertyInfo(alias="deviceIds")]
+
enabled: bool
name: str
+ notify_on_failure: Annotated[bool, PropertyInfo(alias="notifyOnFailure")]
+
+ notify_on_success: Annotated[bool, PropertyInfo(alias="notifyOnSuccess")]
+
+ notify_webhook_id: Annotated[Optional[str], PropertyInfo(alias="notifyWebhookId")]
+
trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_add_params.py b/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
index 7d71e72..749fab6 100644
--- a/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
+++ b/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
@@ -21,8 +21,6 @@ class ActionAddParams(TypedDict, total=False):
continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
-
name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
overrides: Optional[FlowActionOverridesParam]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py b/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
index 2ae1e95..359f228 100644
--- a/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
+++ b/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
@@ -25,8 +25,6 @@ class Action(TypedDict, total=False):
continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
-
name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
overrides: Optional[FlowActionOverridesParam]
diff --git a/src/mobilerun_sdk/types/workflows/flows/flow_action.py b/src/mobilerun_sdk/types/workflows/flows/flow_action.py
index cf83cb4..2ab9154 100644
--- a/src/mobilerun_sdk/types/workflows/flows/flow_action.py
+++ b/src/mobilerun_sdk/types/workflows/flows/flow_action.py
@@ -22,8 +22,6 @@ class FlowAction(BaseModel):
created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
- device_id: Optional[str] = FieldInfo(alias="deviceId", default=None)
-
flow_id: str = FieldInfo(alias="flowId")
name_override: Optional[str] = FieldInfo(alias="nameOverride", default=None)
diff --git a/src/mobilerun_sdk/types/workflows/secret_create_params.py b/src/mobilerun_sdk/types/workflows/secret_create_params.py
deleted file mode 100644
index 88e54de..0000000
--- a/src/mobilerun_sdk/types/workflows/secret_create_params.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Required, TypedDict
-
-__all__ = ["SecretCreateParams"]
-
-
-class SecretCreateParams(TypedDict, total=False):
- name: Required[str]
-
- value: Required[str]
-
- description: str
diff --git a/src/mobilerun_sdk/types/workflows/secret_create_response.py b/src/mobilerun_sdk/types/workflows/secret_create_response.py
deleted file mode 100644
index a05805f..0000000
--- a/src/mobilerun_sdk/types/workflows/secret_create_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..._models import BaseModel
-from .user_secret import UserSecret
-
-__all__ = ["SecretCreateResponse"]
-
-
-class SecretCreateResponse(BaseModel):
- data: UserSecret
diff --git a/src/mobilerun_sdk/types/workflows/secret_delete_response.py b/src/mobilerun_sdk/types/workflows/secret_delete_response.py
deleted file mode 100644
index 16ec787..0000000
--- a/src/mobilerun_sdk/types/workflows/secret_delete_response.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..._models import BaseModel
-
-__all__ = ["SecretDeleteResponse"]
-
-
-class SecretDeleteResponse(BaseModel):
- message: str
diff --git a/src/mobilerun_sdk/types/workflows/secret_list_response.py b/src/mobilerun_sdk/types/workflows/secret_list_response.py
deleted file mode 100644
index 5e661ee..0000000
--- a/src/mobilerun_sdk/types/workflows/secret_list_response.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ..._models import BaseModel
-from .user_secret import UserSecret
-
-__all__ = ["SecretListResponse"]
-
-
-class SecretListResponse(BaseModel):
- data: List[UserSecret]
diff --git a/src/mobilerun_sdk/types/workflows/trigger_fire_params.py b/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
index 756af49..03847b7 100644
--- a/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
+++ b/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
@@ -3,9 +3,7 @@
from __future__ import annotations
from typing import Dict
-from typing_extensions import Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
+from typing_extensions import Required, TypedDict
__all__ = ["TriggerFireParams"]
@@ -17,10 +15,3 @@ class TriggerFireParams(TypedDict, total=False):
Validated against the trigger's customPayloadSchema when one is configured;
otherwise only "must be a JSON object" is enforced.
"""
-
- device_id: Annotated[str, PropertyInfo(alias="deviceId")]
- """Optional device scope.
-
- When supplied, ownership is verified for the calling user and the value is
- passed through to each enqueued execution as the default device context.
- """
diff --git a/src/mobilerun_sdk/types/workflows/user_secret.py b/src/mobilerun_sdk/types/workflows/user_secret.py
deleted file mode 100644
index a33cade..0000000
--- a/src/mobilerun_sdk/types/workflows/user_secret.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["UserSecret"]
-
-
-class UserSecret(BaseModel):
- id: str
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- description: Optional[str] = None
-
- name: str
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
diff --git a/tests/api_resources/credentials/packages/credentials/test_fields.py b/tests/api_resources/credentials/packages/credentials/test_fields.py
index b16a174..96b940f 100644
--- a/tests/api_resources/credentials/packages/credentials/test_fields.py
+++ b/tests/api_resources/credentials/packages/credentials/test_fields.py
@@ -25,8 +25,8 @@ class TestFields:
@parametrize
def test_method_create(self, client: Mobilerun) -> None:
field = client.credentials.packages.credentials.fields.create(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
field_type="email",
value="x",
)
@@ -36,8 +36,8 @@ def test_method_create(self, client: Mobilerun) -> None:
@parametrize
def test_raw_response_create(self, client: Mobilerun) -> None:
response = client.credentials.packages.credentials.fields.with_raw_response.create(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
field_type="email",
value="x",
)
@@ -51,8 +51,8 @@ def test_raw_response_create(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_create(self, client: Mobilerun) -> None:
with client.credentials.packages.credentials.fields.with_streaming_response.create(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
field_type="email",
value="x",
) as response:
@@ -69,7 +69,7 @@ def test_streaming_response_create(self, client: Mobilerun) -> None:
def test_path_params_create(self, client: Mobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `package_name` but received ''"):
client.credentials.packages.credentials.fields.with_raw_response.create(
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
package_name="",
field_type="email",
value="x",
@@ -78,7 +78,7 @@ def test_path_params_create(self, client: Mobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
client.credentials.packages.credentials.fields.with_raw_response.create(
credential_name="",
- package_name="packageName",
+ package_name="x",
field_type="email",
value="x",
)
@@ -88,8 +88,8 @@ def test_path_params_create(self, client: Mobilerun) -> None:
def test_method_update(self, client: Mobilerun) -> None:
field = client.credentials.packages.credentials.fields.update(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
value="x",
)
assert_matches_type(FieldUpdateResponse, field, path=["response"])
@@ -99,8 +99,8 @@ def test_method_update(self, client: Mobilerun) -> None:
def test_raw_response_update(self, client: Mobilerun) -> None:
response = client.credentials.packages.credentials.fields.with_raw_response.update(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
value="x",
)
@@ -114,8 +114,8 @@ def test_raw_response_update(self, client: Mobilerun) -> None:
def test_streaming_response_update(self, client: Mobilerun) -> None:
with client.credentials.packages.credentials.fields.with_streaming_response.update(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
value="x",
) as response:
assert not response.is_closed
@@ -133,14 +133,14 @@ def test_path_params_update(self, client: Mobilerun) -> None:
client.credentials.packages.credentials.fields.with_raw_response.update(
field_type="email",
package_name="",
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
value="x",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
client.credentials.packages.credentials.fields.with_raw_response.update(
field_type="email",
- package_name="packageName",
+ package_name="x",
credential_name="",
value="x",
)
@@ -150,8 +150,8 @@ def test_path_params_update(self, client: Mobilerun) -> None:
def test_method_delete(self, client: Mobilerun) -> None:
field = client.credentials.packages.credentials.fields.delete(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
)
assert_matches_type(FieldDeleteResponse, field, path=["response"])
@@ -160,8 +160,8 @@ def test_method_delete(self, client: Mobilerun) -> None:
def test_raw_response_delete(self, client: Mobilerun) -> None:
response = client.credentials.packages.credentials.fields.with_raw_response.delete(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
)
assert response.is_closed is True
@@ -174,8 +174,8 @@ def test_raw_response_delete(self, client: Mobilerun) -> None:
def test_streaming_response_delete(self, client: Mobilerun) -> None:
with client.credentials.packages.credentials.fields.with_streaming_response.delete(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -192,13 +192,13 @@ def test_path_params_delete(self, client: Mobilerun) -> None:
client.credentials.packages.credentials.fields.with_raw_response.delete(
field_type="email",
package_name="",
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
client.credentials.packages.credentials.fields.with_raw_response.delete(
field_type="email",
- package_name="packageName",
+ package_name="x",
credential_name="",
)
@@ -212,8 +212,8 @@ class TestAsyncFields:
@parametrize
async def test_method_create(self, async_client: AsyncMobilerun) -> None:
field = await async_client.credentials.packages.credentials.fields.create(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
field_type="email",
value="x",
)
@@ -223,8 +223,8 @@ async def test_method_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.credentials.fields.with_raw_response.create(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
field_type="email",
value="x",
)
@@ -238,8 +238,8 @@ async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_streaming_response_create(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.credentials.fields.with_streaming_response.create(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
field_type="email",
value="x",
) as response:
@@ -256,7 +256,7 @@ async def test_streaming_response_create(self, async_client: AsyncMobilerun) ->
async def test_path_params_create(self, async_client: AsyncMobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `package_name` but received ''"):
await async_client.credentials.packages.credentials.fields.with_raw_response.create(
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
package_name="",
field_type="email",
value="x",
@@ -265,7 +265,7 @@ async def test_path_params_create(self, async_client: AsyncMobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
await async_client.credentials.packages.credentials.fields.with_raw_response.create(
credential_name="",
- package_name="packageName",
+ package_name="x",
field_type="email",
value="x",
)
@@ -275,8 +275,8 @@ async def test_path_params_create(self, async_client: AsyncMobilerun) -> None:
async def test_method_update(self, async_client: AsyncMobilerun) -> None:
field = await async_client.credentials.packages.credentials.fields.update(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
value="x",
)
assert_matches_type(FieldUpdateResponse, field, path=["response"])
@@ -286,8 +286,8 @@ async def test_method_update(self, async_client: AsyncMobilerun) -> None:
async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.credentials.fields.with_raw_response.update(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
value="x",
)
@@ -301,8 +301,8 @@ async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.credentials.fields.with_streaming_response.update(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
value="x",
) as response:
assert not response.is_closed
@@ -320,14 +320,14 @@ async def test_path_params_update(self, async_client: AsyncMobilerun) -> None:
await async_client.credentials.packages.credentials.fields.with_raw_response.update(
field_type="email",
package_name="",
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
value="x",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
await async_client.credentials.packages.credentials.fields.with_raw_response.update(
field_type="email",
- package_name="packageName",
+ package_name="x",
credential_name="",
value="x",
)
@@ -337,8 +337,8 @@ async def test_path_params_update(self, async_client: AsyncMobilerun) -> None:
async def test_method_delete(self, async_client: AsyncMobilerun) -> None:
field = await async_client.credentials.packages.credentials.fields.delete(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
)
assert_matches_type(FieldDeleteResponse, field, path=["response"])
@@ -347,8 +347,8 @@ async def test_method_delete(self, async_client: AsyncMobilerun) -> None:
async def test_raw_response_delete(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.credentials.fields.with_raw_response.delete(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
)
assert response.is_closed is True
@@ -361,8 +361,8 @@ async def test_raw_response_delete(self, async_client: AsyncMobilerun) -> None:
async def test_streaming_response_delete(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.credentials.fields.with_streaming_response.delete(
field_type="email",
- package_name="packageName",
- credential_name="credentialName",
+ package_name="x",
+ credential_name="26f1kl_-n-71",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -379,12 +379,12 @@ async def test_path_params_delete(self, async_client: AsyncMobilerun) -> None:
await async_client.credentials.packages.credentials.fields.with_raw_response.delete(
field_type="email",
package_name="",
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
await async_client.credentials.packages.credentials.fields.with_raw_response.delete(
field_type="email",
- package_name="packageName",
+ package_name="x",
credential_name="",
)
diff --git a/tests/api_resources/credentials/packages/test_credentials.py b/tests/api_resources/credentials/packages/test_credentials.py
index 991d557..06dd0e9 100644
--- a/tests/api_resources/credentials/packages/test_credentials.py
+++ b/tests/api_resources/credentials/packages/test_credentials.py
@@ -25,7 +25,7 @@ class TestCredentials:
@parametrize
def test_method_create(self, client: Mobilerun) -> None:
credential = client.credentials.packages.credentials.create(
- package_name="packageName",
+ package_name="x",
credential_name="26f1kl_-n-71",
fields=[
{
@@ -40,7 +40,7 @@ def test_method_create(self, client: Mobilerun) -> None:
@parametrize
def test_raw_response_create(self, client: Mobilerun) -> None:
response = client.credentials.packages.credentials.with_raw_response.create(
- package_name="packageName",
+ package_name="x",
credential_name="26f1kl_-n-71",
fields=[
{
@@ -59,7 +59,7 @@ def test_raw_response_create(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_create(self, client: Mobilerun) -> None:
with client.credentials.packages.credentials.with_streaming_response.create(
- package_name="packageName",
+ package_name="x",
credential_name="26f1kl_-n-71",
fields=[
{
@@ -95,8 +95,8 @@ def test_path_params_create(self, client: Mobilerun) -> None:
@parametrize
def test_method_retrieve(self, client: Mobilerun) -> None:
credential = client.credentials.packages.credentials.retrieve(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert_matches_type(CredentialRetrieveResponse, credential, path=["response"])
@@ -104,8 +104,8 @@ def test_method_retrieve(self, client: Mobilerun) -> None:
@parametrize
def test_raw_response_retrieve(self, client: Mobilerun) -> None:
response = client.credentials.packages.credentials.with_raw_response.retrieve(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert response.is_closed is True
@@ -117,8 +117,8 @@ def test_raw_response_retrieve(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
with client.credentials.packages.credentials.with_streaming_response.retrieve(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -133,22 +133,22 @@ def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
def test_path_params_retrieve(self, client: Mobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `package_name` but received ''"):
client.credentials.packages.credentials.with_raw_response.retrieve(
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
package_name="",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
client.credentials.packages.credentials.with_raw_response.retrieve(
credential_name="",
- package_name="packageName",
+ package_name="x",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_method_delete(self, client: Mobilerun) -> None:
credential = client.credentials.packages.credentials.delete(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert_matches_type(CredentialDeleteResponse, credential, path=["response"])
@@ -156,8 +156,8 @@ def test_method_delete(self, client: Mobilerun) -> None:
@parametrize
def test_raw_response_delete(self, client: Mobilerun) -> None:
response = client.credentials.packages.credentials.with_raw_response.delete(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert response.is_closed is True
@@ -169,8 +169,8 @@ def test_raw_response_delete(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_delete(self, client: Mobilerun) -> None:
with client.credentials.packages.credentials.with_streaming_response.delete(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -185,14 +185,14 @@ def test_streaming_response_delete(self, client: Mobilerun) -> None:
def test_path_params_delete(self, client: Mobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `package_name` but received ''"):
client.credentials.packages.credentials.with_raw_response.delete(
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
package_name="",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
client.credentials.packages.credentials.with_raw_response.delete(
credential_name="",
- package_name="packageName",
+ package_name="x",
)
@@ -205,7 +205,7 @@ class TestAsyncCredentials:
@parametrize
async def test_method_create(self, async_client: AsyncMobilerun) -> None:
credential = await async_client.credentials.packages.credentials.create(
- package_name="packageName",
+ package_name="x",
credential_name="26f1kl_-n-71",
fields=[
{
@@ -220,7 +220,7 @@ async def test_method_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.credentials.with_raw_response.create(
- package_name="packageName",
+ package_name="x",
credential_name="26f1kl_-n-71",
fields=[
{
@@ -239,7 +239,7 @@ async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_streaming_response_create(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.credentials.with_streaming_response.create(
- package_name="packageName",
+ package_name="x",
credential_name="26f1kl_-n-71",
fields=[
{
@@ -275,8 +275,8 @@ async def test_path_params_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
credential = await async_client.credentials.packages.credentials.retrieve(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert_matches_type(CredentialRetrieveResponse, credential, path=["response"])
@@ -284,8 +284,8 @@ async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.credentials.with_raw_response.retrieve(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert response.is_closed is True
@@ -297,8 +297,8 @@ async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None
@parametrize
async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.credentials.with_streaming_response.retrieve(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -313,22 +313,22 @@ async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -
async def test_path_params_retrieve(self, async_client: AsyncMobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `package_name` but received ''"):
await async_client.credentials.packages.credentials.with_raw_response.retrieve(
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
package_name="",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
await async_client.credentials.packages.credentials.with_raw_response.retrieve(
credential_name="",
- package_name="packageName",
+ package_name="x",
)
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_method_delete(self, async_client: AsyncMobilerun) -> None:
credential = await async_client.credentials.packages.credentials.delete(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert_matches_type(CredentialDeleteResponse, credential, path=["response"])
@@ -336,8 +336,8 @@ async def test_method_delete(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_raw_response_delete(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.credentials.with_raw_response.delete(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
)
assert response.is_closed is True
@@ -349,8 +349,8 @@ async def test_raw_response_delete(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_streaming_response_delete(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.credentials.with_streaming_response.delete(
- credential_name="credentialName",
- package_name="packageName",
+ credential_name="26f1kl_-n-71",
+ package_name="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -365,12 +365,12 @@ async def test_streaming_response_delete(self, async_client: AsyncMobilerun) ->
async def test_path_params_delete(self, async_client: AsyncMobilerun) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `package_name` but received ''"):
await async_client.credentials.packages.credentials.with_raw_response.delete(
- credential_name="credentialName",
+ credential_name="26f1kl_-n-71",
package_name="",
)
with pytest.raises(ValueError, match=r"Expected a non-empty value for `credential_name` but received ''"):
await async_client.credentials.packages.credentials.with_raw_response.delete(
credential_name="",
- package_name="packageName",
+ package_name="x",
)
diff --git a/tests/api_resources/credentials/test_packages.py b/tests/api_resources/credentials/test_packages.py
index fe14887..9e0b50d 100644
--- a/tests/api_resources/credentials/test_packages.py
+++ b/tests/api_resources/credentials/test_packages.py
@@ -21,7 +21,7 @@ class TestPackages:
@parametrize
def test_method_create(self, client: Mobilerun) -> None:
package = client.credentials.packages.create(
- package_name="packageName",
+ package_name="x",
)
assert_matches_type(PackageCreateResponse, package, path=["response"])
@@ -29,7 +29,7 @@ def test_method_create(self, client: Mobilerun) -> None:
@parametrize
def test_raw_response_create(self, client: Mobilerun) -> None:
response = client.credentials.packages.with_raw_response.create(
- package_name="packageName",
+ package_name="x",
)
assert response.is_closed is True
@@ -41,7 +41,7 @@ def test_raw_response_create(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_create(self, client: Mobilerun) -> None:
with client.credentials.packages.with_streaming_response.create(
- package_name="packageName",
+ package_name="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -55,7 +55,7 @@ def test_streaming_response_create(self, client: Mobilerun) -> None:
@parametrize
def test_method_list(self, client: Mobilerun) -> None:
package = client.credentials.packages.list(
- "packageName",
+ "x",
)
assert_matches_type(PackageListResponse, package, path=["response"])
@@ -63,7 +63,7 @@ def test_method_list(self, client: Mobilerun) -> None:
@parametrize
def test_raw_response_list(self, client: Mobilerun) -> None:
response = client.credentials.packages.with_raw_response.list(
- "packageName",
+ "x",
)
assert response.is_closed is True
@@ -75,7 +75,7 @@ def test_raw_response_list(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_list(self, client: Mobilerun) -> None:
with client.credentials.packages.with_streaming_response.list(
- "packageName",
+ "x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -103,7 +103,7 @@ class TestAsyncPackages:
@parametrize
async def test_method_create(self, async_client: AsyncMobilerun) -> None:
package = await async_client.credentials.packages.create(
- package_name="packageName",
+ package_name="x",
)
assert_matches_type(PackageCreateResponse, package, path=["response"])
@@ -111,7 +111,7 @@ async def test_method_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.with_raw_response.create(
- package_name="packageName",
+ package_name="x",
)
assert response.is_closed is True
@@ -123,7 +123,7 @@ async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_streaming_response_create(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.with_streaming_response.create(
- package_name="packageName",
+ package_name="x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -137,7 +137,7 @@ async def test_streaming_response_create(self, async_client: AsyncMobilerun) ->
@parametrize
async def test_method_list(self, async_client: AsyncMobilerun) -> None:
package = await async_client.credentials.packages.list(
- "packageName",
+ "x",
)
assert_matches_type(PackageListResponse, package, path=["response"])
@@ -145,7 +145,7 @@ async def test_method_list(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_raw_response_list(self, async_client: AsyncMobilerun) -> None:
response = await async_client.credentials.packages.with_raw_response.list(
- "packageName",
+ "x",
)
assert response.is_closed is True
@@ -157,7 +157,7 @@ async def test_raw_response_list(self, async_client: AsyncMobilerun) -> None:
@parametrize
async def test_streaming_response_list(self, async_client: AsyncMobilerun) -> None:
async with async_client.credentials.packages.with_streaming_response.list(
- "packageName",
+ "x",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
diff --git a/tests/api_resources/test_apps.py b/tests/api_resources/test_apps.py
index 7fd88df..10e3d28 100644
--- a/tests/api_resources/test_apps.py
+++ b/tests/api_resources/test_apps.py
@@ -197,12 +197,12 @@ def test_path_params_confirm_upload(self, client: Mobilerun) -> None:
@parametrize
def test_method_create_signed_upload_url(self, client: Mobilerun) -> None:
app = client.apps.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
}
],
size_bytes=0,
@@ -215,12 +215,13 @@ def test_method_create_signed_upload_url(self, client: Mobilerun) -> None:
@parametrize
def test_method_create_signed_upload_url_with_all_params(self, client: Mobilerun) -> None:
app = client.apps.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
+ "sha256": "210b9798eb53baa4e69d31c1071cf03d212b8ad0ca30cf321e0ea82e120aac26/i",
}
],
size_bytes=0,
@@ -239,12 +240,12 @@ def test_method_create_signed_upload_url_with_all_params(self, client: Mobilerun
@parametrize
def test_raw_response_create_signed_upload_url(self, client: Mobilerun) -> None:
response = client.apps.with_raw_response.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
}
],
size_bytes=0,
@@ -261,12 +262,12 @@ def test_raw_response_create_signed_upload_url(self, client: Mobilerun) -> None:
@parametrize
def test_streaming_response_create_signed_upload_url(self, client: Mobilerun) -> None:
with client.apps.with_streaming_response.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
}
],
size_bytes=0,
@@ -543,12 +544,12 @@ async def test_path_params_confirm_upload(self, async_client: AsyncMobilerun) ->
@parametrize
async def test_method_create_signed_upload_url(self, async_client: AsyncMobilerun) -> None:
app = await async_client.apps.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
}
],
size_bytes=0,
@@ -561,12 +562,13 @@ async def test_method_create_signed_upload_url(self, async_client: AsyncMobileru
@parametrize
async def test_method_create_signed_upload_url_with_all_params(self, async_client: AsyncMobilerun) -> None:
app = await async_client.apps.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
+ "sha256": "210b9798eb53baa4e69d31c1071cf03d212b8ad0ca30cf321e0ea82e120aac26/i",
}
],
size_bytes=0,
@@ -585,12 +587,12 @@ async def test_method_create_signed_upload_url_with_all_params(self, async_clien
@parametrize
async def test_raw_response_create_signed_upload_url(self, async_client: AsyncMobilerun) -> None:
response = await async_client.apps.with_raw_response.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
}
],
size_bytes=0,
@@ -607,12 +609,12 @@ async def test_raw_response_create_signed_upload_url(self, async_client: AsyncMo
@parametrize
async def test_streaming_response_create_signed_upload_url(self, async_client: AsyncMobilerun) -> None:
async with async_client.apps.with_streaming_response.create_signed_upload_url(
- bundle_id="x",
+ bundle_id="NX0.JB-_-.m-u--_-p.Z1-u_2I.D--_T-_.dzZ-.Wx.L_a8--_.w_D_",
display_name="x",
files=[
{
- "content_type": "x",
- "file_name": "x",
+ "content_type": "application/vnd.android.package-archive",
+ "file_name": "J!Q0Ok0bzJb7.apk/i",
}
],
size_bytes=0,
diff --git a/tests/api_resources/workflows/flows/test_actions.py b/tests/api_resources/workflows/flows/test_actions.py
index 0343316..797f724 100644
--- a/tests/api_resources/workflows/flows/test_actions.py
+++ b/tests/api_resources/workflows/flows/test_actions.py
@@ -86,13 +86,11 @@ def test_method_add_with_all_params(self, client: Mobilerun) -> None:
"action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"position": 0,
"continue_on_error": True,
- "device_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"name_override": "x",
"overrides": {"params": {"foo": "bar"}},
}
],
continue_on_error=True,
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
name_override="x",
overrides={"params": {"foo": "bar"}},
parent_flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
@@ -327,13 +325,11 @@ async def test_method_add_with_all_params(self, async_client: AsyncMobilerun) ->
"action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"position": 0,
"continue_on_error": True,
- "device_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"name_override": "x",
"overrides": {"params": {"foo": "bar"}},
}
],
continue_on_error=True,
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
name_override="x",
overrides={"params": {"foo": "bar"}},
parent_flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
diff --git a/tests/api_resources/workflows/test_events.py b/tests/api_resources/workflows/test_events.py
index 8ca70fa..687e21b 100644
--- a/tests/api_resources/workflows/test_events.py
+++ b/tests/api_resources/workflows/test_events.py
@@ -33,7 +33,6 @@ def test_method_dry_run(self, client: Mobilerun) -> None:
def test_method_dry_run_with_all_params(self, client: Mobilerun) -> None:
event = client.workflows.events.dry_run(
event_type="x",
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
payload={"foo": "bar"},
)
assert_matches_type(EventDryRunResponse, event, path=["response"])
@@ -77,7 +76,6 @@ def test_method_ingest(self, client: Mobilerun) -> None:
def test_method_ingest_with_all_params(self, client: Mobilerun) -> None:
event = client.workflows.events.ingest(
event_type="x",
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
payload={"foo": "bar"},
)
assert_matches_type(EventIngestResponse, event, path=["response"])
@@ -127,7 +125,6 @@ async def test_method_dry_run(self, async_client: AsyncMobilerun) -> None:
async def test_method_dry_run_with_all_params(self, async_client: AsyncMobilerun) -> None:
event = await async_client.workflows.events.dry_run(
event_type="x",
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
payload={"foo": "bar"},
)
assert_matches_type(EventDryRunResponse, event, path=["response"])
@@ -171,7 +168,6 @@ async def test_method_ingest(self, async_client: AsyncMobilerun) -> None:
async def test_method_ingest_with_all_params(self, async_client: AsyncMobilerun) -> None:
event = await async_client.workflows.events.ingest(
event_type="x",
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
payload={"foo": "bar"},
)
assert_matches_type(EventIngestResponse, event, path=["response"])
diff --git a/tests/api_resources/workflows/test_flows.py b/tests/api_resources/workflows/test_flows.py
index d7640f1..34eb5e5 100644
--- a/tests/api_resources/workflows/test_flows.py
+++ b/tests/api_resources/workflows/test_flows.py
@@ -53,13 +53,11 @@ def test_method_create_with_all_params(self, client: Mobilerun) -> None:
"action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"position": 0,
"continue_on_error": True,
- "device_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"name_override": "x",
"overrides": {"params": {"foo": "bar"}},
}
],
"continue_on_error": True,
- "device_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"name_override": "x",
"overrides": {"params": {"foo": "bar"}},
}
@@ -69,7 +67,11 @@ def test_method_create_with_all_params(self, client: Mobilerun) -> None:
cooldown_scope="flow",
cooldown_seconds=0,
description="description",
+ device_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
enabled=True,
+ notify_on_failure=True,
+ notify_on_success=True,
+ notify_webhook_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
assert_matches_type(FlowCreateResponse, flow, path=["response"])
@@ -171,8 +173,12 @@ def test_method_update_with_all_params(self, client: Mobilerun) -> None:
cooldown_scope="flow",
cooldown_seconds=0,
description="description",
+ device_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
enabled=True,
name="x",
+ notify_on_failure=True,
+ notify_on_success=True,
+ notify_webhook_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
assert_matches_type(FlowUpdateResponse, flow, path=["response"])
@@ -309,6 +315,7 @@ def test_method_clone(self, client: Mobilerun) -> None:
def test_method_clone_with_all_params(self, client: Mobilerun) -> None:
flow = client.workflows.flows.clone(
flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ device_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
name="x",
)
assert_matches_type(FlowCloneResponse, flow, path=["response"])
@@ -423,13 +430,11 @@ async def test_method_create_with_all_params(self, async_client: AsyncMobilerun)
"action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"position": 0,
"continue_on_error": True,
- "device_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"name_override": "x",
"overrides": {"params": {"foo": "bar"}},
}
],
"continue_on_error": True,
- "device_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"name_override": "x",
"overrides": {"params": {"foo": "bar"}},
}
@@ -439,7 +444,11 @@ async def test_method_create_with_all_params(self, async_client: AsyncMobilerun)
cooldown_scope="flow",
cooldown_seconds=0,
description="description",
+ device_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
enabled=True,
+ notify_on_failure=True,
+ notify_on_success=True,
+ notify_webhook_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
assert_matches_type(FlowCreateResponse, flow, path=["response"])
@@ -541,8 +550,12 @@ async def test_method_update_with_all_params(self, async_client: AsyncMobilerun)
cooldown_scope="flow",
cooldown_seconds=0,
description="description",
+ device_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
enabled=True,
name="x",
+ notify_on_failure=True,
+ notify_on_success=True,
+ notify_webhook_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
)
assert_matches_type(FlowUpdateResponse, flow, path=["response"])
@@ -679,6 +692,7 @@ async def test_method_clone(self, async_client: AsyncMobilerun) -> None:
async def test_method_clone_with_all_params(self, async_client: AsyncMobilerun) -> None:
flow = await async_client.workflows.flows.clone(
flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ device_ids=["182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e"],
name="x",
)
assert_matches_type(FlowCloneResponse, flow, path=["response"])
diff --git a/tests/api_resources/workflows/test_secrets.py b/tests/api_resources/workflows/test_secrets.py
deleted file mode 100644
index 6d98cae..0000000
--- a/tests/api_resources/workflows/test_secrets.py
+++ /dev/null
@@ -1,262 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import os
-from typing import Any, cast
-
-import pytest
-
-from tests.utils import assert_matches_type
-from mobilerun_sdk import Mobilerun, AsyncMobilerun
-from mobilerun_sdk.types.workflows import (
- SecretListResponse,
- SecretCreateResponse,
- SecretDeleteResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestSecrets:
- parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create(self, client: Mobilerun) -> None:
- secret = client.workflows.secrets.create(
- name="name",
- value="x",
- )
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create_with_all_params(self, client: Mobilerun) -> None:
- secret = client.workflows.secrets.create(
- name="name",
- value="x",
- description="description",
- )
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: Mobilerun) -> None:
- response = client.workflows.secrets.with_raw_response.create(
- name="name",
- value="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- secret = response.parse()
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: Mobilerun) -> None:
- with client.workflows.secrets.with_streaming_response.create(
- name="name",
- value="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- secret = response.parse()
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list(self, client: Mobilerun) -> None:
- secret = client.workflows.secrets.list()
- assert_matches_type(SecretListResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.secrets.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- secret = response.parse()
- assert_matches_type(SecretListResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.secrets.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- secret = response.parse()
- assert_matches_type(SecretListResponse, secret, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_delete(self, client: Mobilerun) -> None:
- secret = client.workflows.secrets.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(SecretDeleteResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: Mobilerun) -> None:
- response = client.workflows.secrets.with_raw_response.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- secret = response.parse()
- assert_matches_type(SecretDeleteResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: Mobilerun) -> None:
- with client.workflows.secrets.with_streaming_response.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- secret = response.parse()
- assert_matches_type(SecretDeleteResponse, secret, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_delete(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `secret_id` but received ''"):
- client.workflows.secrets.with_raw_response.delete(
- "",
- )
-
-
-class TestAsyncSecrets:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_create(self, async_client: AsyncMobilerun) -> None:
- secret = await async_client.workflows.secrets.create(
- name="name",
- value="x",
- )
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_create_with_all_params(self, async_client: AsyncMobilerun) -> None:
- secret = await async_client.workflows.secrets.create(
- name="name",
- value="x",
- description="description",
- )
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_create(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.secrets.with_raw_response.create(
- name="name",
- value="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- secret = await response.parse()
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_create(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.secrets.with_streaming_response.create(
- name="name",
- value="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- secret = await response.parse()
- assert_matches_type(SecretCreateResponse, secret, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list(self, async_client: AsyncMobilerun) -> None:
- secret = await async_client.workflows.secrets.list()
- assert_matches_type(SecretListResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_list(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.secrets.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- secret = await response.parse()
- assert_matches_type(SecretListResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_list(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.secrets.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- secret = await response.parse()
- assert_matches_type(SecretListResponse, secret, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_delete(self, async_client: AsyncMobilerun) -> None:
- secret = await async_client.workflows.secrets.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(SecretDeleteResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_delete(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.secrets.with_raw_response.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- secret = await response.parse()
- assert_matches_type(SecretDeleteResponse, secret, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_delete(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.secrets.with_streaming_response.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- secret = await response.parse()
- assert_matches_type(SecretDeleteResponse, secret, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_path_params_delete(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `secret_id` but received ''"):
- await async_client.workflows.secrets.with_raw_response.delete(
- "",
- )
diff --git a/tests/api_resources/workflows/test_triggers.py b/tests/api_resources/workflows/test_triggers.py
index 9a71326..5f9b669 100644
--- a/tests/api_resources/workflows/test_triggers.py
+++ b/tests/api_resources/workflows/test_triggers.py
@@ -285,16 +285,6 @@ def test_method_fire(self, client: Mobilerun) -> None:
)
assert_matches_type(TriggerFireResponse, trigger, path=["response"])
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_fire_with_all_params(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerFireResponse, trigger, path=["response"])
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
def test_raw_response_fire(self, client: Mobilerun) -> None:
@@ -599,16 +589,6 @@ async def test_method_fire(self, async_client: AsyncMobilerun) -> None:
)
assert_matches_type(TriggerFireResponse, trigger, path=["response"])
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_fire_with_all_params(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- device_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerFireResponse, trigger, path=["response"])
-
@pytest.mark.skip(reason="Mock server tests are disabled")
@parametrize
async def test_raw_response_fire(self, async_client: AsyncMobilerun) -> None: