From 93a672ceb48abc041a26ea744d797048ebc894b0 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 19 Jun 2026 16:14:20 +0000
Subject: [PATCH 1/3] feat(api): api update
---
.stats.yml | 6 +-
api.md | 210 -----
src/mobilerun_sdk/_client.py | 38 -
src/mobilerun_sdk/resources/__init__.py | 14 -
.../resources/workflows/__init__.py | 131 ---
.../resources/workflows/action_catalog.py | 268 ------
.../resources/workflows/actions/__init__.py | 33 -
.../resources/workflows/actions/actions.py | 592 -------------
.../resources/workflows/actions/services.py | 215 -----
.../resources/workflows/events/__init__.py | 33 -
.../resources/workflows/events/catalog.py | 267 ------
.../resources/workflows/events/events.py | 316 -------
.../resources/workflows/executions.py | 402 ---------
.../resources/workflows/flows/__init__.py | 33 -
.../resources/workflows/flows/actions.py | 458 ----------
.../resources/workflows/flows/flows.py | 790 ------------------
.../resources/workflows/secrets.py | 311 -------
.../resources/workflows/timezones.py | 135 ---
.../resources/workflows/triggers.py | 753 -----------------
.../resources/workflows/workflows.py | 326 --------
src/mobilerun_sdk/types/__init__.py | 1 -
.../app_create_signed_upload_url_params.py | 9 +-
src/mobilerun_sdk/types/flow.py | 46 -
src/mobilerun_sdk/types/workflows/__init__.py | 53 --
src/mobilerun_sdk/types/workflows/action.py | 36 -
.../types/workflows/action_catalog_entry.py | 30 -
.../workflows/action_catalog_list_params.py | 17 -
.../workflows/action_catalog_list_response.py | 15 -
.../action_catalog_retrieve_response.py | 10 -
.../types/workflows/action_create_params.py | 20 -
.../types/workflows/action_create_response.py | 10 -
.../types/workflows/action_delete_response.py | 9 -
.../types/workflows/action_list_params.py | 23 -
.../types/workflows/action_list_response.py | 15 -
.../workflows/action_retrieve_response.py | 10 -
.../types/workflows/action_update_params.py | 16 -
.../types/workflows/action_update_response.py | 10 -
.../types/workflows/actions/__init__.py | 3 -
.../actions/service_list_methods_response.py | 38 -
.../actions/service_list_response.py | 11 -
.../types/workflows/event_dry_run_params.py | 18 -
.../types/workflows/event_dry_run_response.py | 105 ---
.../types/workflows/event_ingest_params.py | 18 -
.../types/workflows/event_ingest_response.py | 11 -
.../types/workflows/events/__init__.py | 5 -
.../workflows/events/catalog_list_params.py | 17 -
.../workflows/events/catalog_list_response.py | 32 -
.../events/catalog_register_params.py | 26 -
.../events/catalog_register_response.py | 9 -
.../workflows/execution_get_metrics_params.py | 20 -
.../execution_get_metrics_response.py | 33 -
.../types/workflows/execution_list_params.py | 32 -
.../workflows/execution_list_response.py | 15 -
.../workflows/execution_retrieve_response.py | 10 -
.../workflows/flow_action_overrides_param.py | 12 -
.../flow_child_action_input_param.py | 25 -
.../types/workflows/flow_clone_params.py | 11 -
.../types/workflows/flow_clone_response.py | 10 -
.../types/workflows/flow_create_params.py | 44 -
.../types/workflows/flow_create_response.py | 10 -
.../types/workflows/flow_delete_response.py | 9 -
.../types/workflows/flow_execution.py | 34 -
.../types/workflows/flow_list_params.py | 28 -
.../types/workflows/flow_list_response.py | 15 -
.../types/workflows/flow_retrieve_response.py | 10 -
.../types/workflows/flow_unblock_response.py | 10 -
.../types/workflows/flow_update_params.py | 24 -
.../types/workflows/flow_update_response.py | 10 -
.../types/workflows/flows/__init__.py | 8 -
.../workflows/flows/action_add_params.py | 30 -
.../workflows/flows/action_add_response.py | 10 -
.../workflows/flows/action_list_response.py | 12 -
.../workflows/flows/action_remove_response.py | 9 -
.../workflows/flows/action_replace_params.py | 32 -
.../flows/action_replace_response.py | 12 -
.../types/workflows/flows/flow_action.py | 35 -
.../types/workflows/secret_create_params.py | 15 -
.../types/workflows/secret_create_response.py | 10 -
.../types/workflows/secret_delete_response.py | 9 -
.../types/workflows/secret_list_response.py | 12 -
.../types/workflows/timezone_list_response.py | 11 -
.../types/workflows/trigger_create_params.py | 48 --
.../workflows/trigger_create_response.py | 55 --
.../workflows/trigger_delete_response.py | 9 -
.../types/workflows/trigger_fire_params.py | 26 -
.../types/workflows/trigger_fire_response.py | 22 -
.../types/workflows/trigger_list_params.py | 25 -
.../types/workflows/trigger_list_response.py | 58 --
.../workflows/trigger_retrieve_response.py | 55 --
.../types/workflows/trigger_update_params.py | 48 --
.../workflows/trigger_update_response.py | 55 --
.../types/workflows/user_secret.py | 21 -
.../packages/credentials/test_fields.py | 96 +--
.../credentials/packages/test_credentials.py | 76 +-
.../credentials/test_packages.py | 24 +-
tests/api_resources/test_apps.py | 50 +-
tests/api_resources/workflows/__init__.py | 1 -
.../workflows/actions/__init__.py | 1 -
.../workflows/actions/test_services.py | 164 ----
.../workflows/events/__init__.py | 1 -
.../workflows/events/test_catalog.py | 201 -----
.../api_resources/workflows/flows/__init__.py | 1 -
.../workflows/flows/test_actions.py | 499 -----------
.../workflows/test_action_catalog.py | 187 -----
tests/api_resources/workflows/test_actions.py | 482 -----------
tests/api_resources/workflows/test_events.py | 203 -----
.../workflows/test_executions.py | 280 -------
tests/api_resources/workflows/test_flows.py | 760 -----------------
tests/api_resources/workflows/test_secrets.py | 262 ------
.../api_resources/workflows/test_timezones.py | 80 --
.../api_resources/workflows/test_triggers.py | 647 --------------
111 files changed, 135 insertions(+), 10823 deletions(-)
delete mode 100644 src/mobilerun_sdk/resources/workflows/__init__.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/action_catalog.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/actions/__init__.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/actions/actions.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/actions/services.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/events/__init__.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/events/catalog.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/events/events.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/executions.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/flows/__init__.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/flows/actions.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/flows/flows.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/secrets.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/timezones.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/triggers.py
delete mode 100644 src/mobilerun_sdk/resources/workflows/workflows.py
delete mode 100644 src/mobilerun_sdk/types/flow.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_entry.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_list_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_create_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_create_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_delete_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_list_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_retrieve_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_update_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/action_update_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/actions/service_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/event_dry_run_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/event_dry_run_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/event_ingest_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/event_ingest_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_list_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_register_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_register_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/execution_list_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/execution_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/execution_retrieve_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_clone_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_clone_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_create_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_create_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_delete_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_execution.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_list_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_retrieve_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_unblock_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_update_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flow_update_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/action_add_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/action_add_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/action_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/action_remove_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/action_replace_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/flows/flow_action.py
delete mode 100644 src/mobilerun_sdk/types/workflows/secret_create_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/secret_create_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/secret_delete_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/secret_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/timezone_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_create_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_create_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_delete_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_fire_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_fire_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_list_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_list_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_update_params.py
delete mode 100644 src/mobilerun_sdk/types/workflows/trigger_update_response.py
delete mode 100644 src/mobilerun_sdk/types/workflows/user_secret.py
delete mode 100644 tests/api_resources/workflows/__init__.py
delete mode 100644 tests/api_resources/workflows/actions/__init__.py
delete mode 100644 tests/api_resources/workflows/actions/test_services.py
delete mode 100644 tests/api_resources/workflows/events/__init__.py
delete mode 100644 tests/api_resources/workflows/events/test_catalog.py
delete mode 100644 tests/api_resources/workflows/flows/__init__.py
delete mode 100644 tests/api_resources/workflows/flows/test_actions.py
delete mode 100644 tests/api_resources/workflows/test_action_catalog.py
delete mode 100644 tests/api_resources/workflows/test_actions.py
delete mode 100644 tests/api_resources/workflows/test_events.py
delete mode 100644 tests/api_resources/workflows/test_executions.py
delete mode 100644 tests/api_resources/workflows/test_flows.py
delete mode 100644 tests/api_resources/workflows/test_secrets.py
delete mode 100644 tests/api_resources/workflows/test_timezones.py
delete mode 100644 tests/api_resources/workflows/test_triggers.py
diff --git a/.stats.yml b/.stats.yml
index ecc682c..8f1ec0a 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: 126
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/droidrun/droidrun-cloud-6bac5609a802d599b148bd22cce6266096a1a9a5fb157f327e20b18d6f77ad8f.yml
+openapi_spec_hash: 63ba4f5e4896e2b35845491596dc5d32
config_hash: dcea68e3d1becafc8b349671e3a0763d
diff --git a/api.md b/api.md
index d19900e..f7e9c61 100644
--- a/api.md
+++ b/api.md
@@ -518,216 +518,6 @@ Methods:
- client.tasks.ui_states.retrieve(index, \*, task_id) -> MediaResponse
- client.tasks.ui_states.list(task_id) -> UiStateListResponse
-# Workflows
-
-Types:
-
-```python
-from mobilerun_sdk.types import Flow
-```
-
-## Triggers
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import (
- TriggerCreateResponse,
- TriggerRetrieveResponse,
- TriggerUpdateResponse,
- TriggerListResponse,
- TriggerDeleteResponse,
- TriggerFireResponse,
-)
-```
-
-Methods:
-
-- client.workflows.triggers.create(\*\*params) -> TriggerCreateResponse
-- client.workflows.triggers.retrieve(trigger_id) -> TriggerRetrieveResponse
-- client.workflows.triggers.update(trigger_id, \*\*params) -> TriggerUpdateResponse
-- client.workflows.triggers.list(\*\*params) -> TriggerListResponse
-- client.workflows.triggers.delete(trigger_id) -> TriggerDeleteResponse
-- client.workflows.triggers.fire(trigger_id, \*\*params) -> TriggerFireResponse
-
-## ActionCatalog
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import (
- ActionCatalogEntry,
- ActionCatalogRetrieveResponse,
- ActionCatalogListResponse,
-)
-```
-
-Methods:
-
-- client.workflows.action_catalog.retrieve(catalog_entry_id) -> ActionCatalogRetrieveResponse
-- client.workflows.action_catalog.list(\*\*params) -> ActionCatalogListResponse
-
-## Actions
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import (
- Action,
- ActionCreateResponse,
- ActionRetrieveResponse,
- ActionUpdateResponse,
- ActionListResponse,
- ActionDeleteResponse,
-)
-```
-
-Methods:
-
-- client.workflows.actions.create(\*\*params) -> ActionCreateResponse
-- client.workflows.actions.retrieve(action_id) -> ActionRetrieveResponse
-- client.workflows.actions.update(action_id, \*\*params) -> ActionUpdateResponse
-- client.workflows.actions.list(\*\*params) -> ActionListResponse
-- client.workflows.actions.delete(action_id) -> ActionDeleteResponse
-
-### Services
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows.actions import ServiceListResponse, ServiceListMethodsResponse
-```
-
-Methods:
-
-- client.workflows.actions.services.list() -> ServiceListResponse
-- client.workflows.actions.services.list_methods(service) -> ServiceListMethodsResponse
-
-## Flows
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import (
- FlowActionOverrides,
- FlowChildActionInput,
- FlowCreateResponse,
- FlowRetrieveResponse,
- FlowUpdateResponse,
- FlowListResponse,
- FlowDeleteResponse,
- FlowCloneResponse,
- FlowUnblockResponse,
-)
-```
-
-Methods:
-
-- client.workflows.flows.create(\*\*params) -> FlowCreateResponse
-- client.workflows.flows.retrieve(flow_id) -> FlowRetrieveResponse
-- client.workflows.flows.update(flow_id, \*\*params) -> FlowUpdateResponse
-- client.workflows.flows.list(\*\*params) -> FlowListResponse
-- client.workflows.flows.delete(flow_id) -> FlowDeleteResponse
-- client.workflows.flows.clone(flow_id, \*\*params) -> FlowCloneResponse
-- client.workflows.flows.unblock(flow_id) -> FlowUnblockResponse
-
-### Actions
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows.flows import (
- FlowAction,
- ActionListResponse,
- ActionAddResponse,
- ActionRemoveResponse,
- ActionReplaceResponse,
-)
-```
-
-Methods:
-
-- client.workflows.flows.actions.list(flow_id) -> ActionListResponse
-- client.workflows.flows.actions.add(flow_id, \*\*params) -> ActionAddResponse
-- client.workflows.flows.actions.remove(flow_action_id, \*, flow_id) -> ActionRemoveResponse
-- client.workflows.flows.actions.replace(flow_id, \*\*params) -> ActionReplaceResponse
-
-## Events
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import EventDryRunResponse, EventIngestResponse
-```
-
-Methods:
-
-- client.workflows.events.dry_run(\*\*params) -> EventDryRunResponse
-- client.workflows.events.ingest(\*\*params) -> EventIngestResponse
-
-### Catalog
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows.events import CatalogListResponse, CatalogRegisterResponse
-```
-
-Methods:
-
-- client.workflows.events.catalog.list(\*\*params) -> CatalogListResponse
-- client.workflows.events.catalog.register(\*\*params) -> CatalogRegisterResponse
-
-## Executions
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import (
- FlowExecution,
- ExecutionRetrieveResponse,
- ExecutionListResponse,
- ExecutionGetMetricsResponse,
-)
-```
-
-Methods:
-
-- client.workflows.executions.retrieve(execution_id) -> ExecutionRetrieveResponse
-- client.workflows.executions.list(\*\*params) -> ExecutionListResponse
-- client.workflows.executions.get_metrics(\*\*params) -> ExecutionGetMetricsResponse
-
-## Timezones
-
-Types:
-
-```python
-from mobilerun_sdk.types.workflows import TimezoneListResponse
-```
-
-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/src/mobilerun_sdk/_client.py b/src/mobilerun_sdk/_client.py
index f43b8dd..4811cb0 100644
--- a/src/mobilerun_sdk/_client.py
+++ b/src/mobilerun_sdk/_client.py
@@ -47,7 +47,6 @@
carriers,
profiles,
webhooks,
- workflows,
credentials,
)
from .resources.apps import AppsResource, AsyncAppsResource
@@ -60,7 +59,6 @@
from .resources.connect.connect import ConnectResource, AsyncConnectResource
from .resources.devices.devices import DevicesResource, AsyncDevicesResource
from .resources.webhooks.webhooks import WebhooksResource, AsyncWebhooksResource
- from .resources.workflows.workflows import WorkflowsResource, AsyncWorkflowsResource
from .resources.credentials.credentials import CredentialsResource, AsyncCredentialsResource
__all__ = [
@@ -201,12 +199,6 @@ def tasks(self) -> TasksResource:
return TasksResource(self)
- @cached_property
- def workflows(self) -> WorkflowsResource:
- from .resources.workflows import WorkflowsResource
-
- return WorkflowsResource(self)
-
@cached_property
def webhooks(self) -> WebhooksResource:
from .resources.webhooks import WebhooksResource
@@ -463,12 +455,6 @@ def tasks(self) -> AsyncTasksResource:
return AsyncTasksResource(self)
- @cached_property
- def workflows(self) -> AsyncWorkflowsResource:
- from .resources.workflows import AsyncWorkflowsResource
-
- return AsyncWorkflowsResource(self)
-
@cached_property
def webhooks(self) -> AsyncWebhooksResource:
from .resources.webhooks import AsyncWebhooksResource
@@ -671,12 +657,6 @@ def tasks(self) -> tasks.TasksResourceWithRawResponse:
return TasksResourceWithRawResponse(self._client.tasks)
- @cached_property
- def workflows(self) -> workflows.WorkflowsResourceWithRawResponse:
- from .resources.workflows import WorkflowsResourceWithRawResponse
-
- return WorkflowsResourceWithRawResponse(self._client.workflows)
-
@cached_property
def webhooks(self) -> webhooks.WebhooksResourceWithRawResponse:
from .resources.webhooks import WebhooksResourceWithRawResponse
@@ -756,12 +736,6 @@ def tasks(self) -> tasks.AsyncTasksResourceWithRawResponse:
return AsyncTasksResourceWithRawResponse(self._client.tasks)
- @cached_property
- def workflows(self) -> workflows.AsyncWorkflowsResourceWithRawResponse:
- from .resources.workflows import AsyncWorkflowsResourceWithRawResponse
-
- return AsyncWorkflowsResourceWithRawResponse(self._client.workflows)
-
@cached_property
def webhooks(self) -> webhooks.AsyncWebhooksResourceWithRawResponse:
from .resources.webhooks import AsyncWebhooksResourceWithRawResponse
@@ -841,12 +815,6 @@ def tasks(self) -> tasks.TasksResourceWithStreamingResponse:
return TasksResourceWithStreamingResponse(self._client.tasks)
- @cached_property
- def workflows(self) -> workflows.WorkflowsResourceWithStreamingResponse:
- from .resources.workflows import WorkflowsResourceWithStreamingResponse
-
- return WorkflowsResourceWithStreamingResponse(self._client.workflows)
-
@cached_property
def webhooks(self) -> webhooks.WebhooksResourceWithStreamingResponse:
from .resources.webhooks import WebhooksResourceWithStreamingResponse
@@ -926,12 +894,6 @@ def tasks(self) -> tasks.AsyncTasksResourceWithStreamingResponse:
return AsyncTasksResourceWithStreamingResponse(self._client.tasks)
- @cached_property
- def workflows(self) -> workflows.AsyncWorkflowsResourceWithStreamingResponse:
- from .resources.workflows import AsyncWorkflowsResourceWithStreamingResponse
-
- return AsyncWorkflowsResourceWithStreamingResponse(self._client.workflows)
-
@cached_property
def webhooks(self) -> webhooks.AsyncWebhooksResourceWithStreamingResponse:
from .resources.webhooks import AsyncWebhooksResourceWithStreamingResponse
diff --git a/src/mobilerun_sdk/resources/__init__.py b/src/mobilerun_sdk/resources/__init__.py
index a0e7538..47cc179 100644
--- a/src/mobilerun_sdk/resources/__init__.py
+++ b/src/mobilerun_sdk/resources/__init__.py
@@ -80,14 +80,6 @@
WebhooksResourceWithStreamingResponse,
AsyncWebhooksResourceWithStreamingResponse,
)
-from .workflows import (
- WorkflowsResource,
- AsyncWorkflowsResource,
- WorkflowsResourceWithRawResponse,
- AsyncWorkflowsResourceWithRawResponse,
- WorkflowsResourceWithStreamingResponse,
- AsyncWorkflowsResourceWithStreamingResponse,
-)
from .credentials import (
CredentialsResource,
AsyncCredentialsResource,
@@ -158,12 +150,6 @@
"AsyncTasksResourceWithRawResponse",
"TasksResourceWithStreamingResponse",
"AsyncTasksResourceWithStreamingResponse",
- "WorkflowsResource",
- "AsyncWorkflowsResource",
- "WorkflowsResourceWithRawResponse",
- "AsyncWorkflowsResourceWithRawResponse",
- "WorkflowsResourceWithStreamingResponse",
- "AsyncWorkflowsResourceWithStreamingResponse",
"WebhooksResource",
"AsyncWebhooksResource",
"WebhooksResourceWithRawResponse",
diff --git a/src/mobilerun_sdk/resources/workflows/__init__.py b/src/mobilerun_sdk/resources/workflows/__init__.py
deleted file mode 100644
index 9923a1b..0000000
--- a/src/mobilerun_sdk/resources/workflows/__init__.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .flows import (
- FlowsResource,
- AsyncFlowsResource,
- FlowsResourceWithRawResponse,
- AsyncFlowsResourceWithRawResponse,
- FlowsResourceWithStreamingResponse,
- AsyncFlowsResourceWithStreamingResponse,
-)
-from .events import (
- EventsResource,
- AsyncEventsResource,
- EventsResourceWithRawResponse,
- AsyncEventsResourceWithRawResponse,
- EventsResourceWithStreamingResponse,
- AsyncEventsResourceWithStreamingResponse,
-)
-from .actions import (
- ActionsResource,
- AsyncActionsResource,
- ActionsResourceWithRawResponse,
- AsyncActionsResourceWithRawResponse,
- ActionsResourceWithStreamingResponse,
- AsyncActionsResourceWithStreamingResponse,
-)
-from .secrets import (
- SecretsResource,
- AsyncSecretsResource,
- SecretsResourceWithRawResponse,
- AsyncSecretsResourceWithRawResponse,
- SecretsResourceWithStreamingResponse,
- AsyncSecretsResourceWithStreamingResponse,
-)
-from .triggers import (
- TriggersResource,
- AsyncTriggersResource,
- TriggersResourceWithRawResponse,
- AsyncTriggersResourceWithRawResponse,
- TriggersResourceWithStreamingResponse,
- AsyncTriggersResourceWithStreamingResponse,
-)
-from .timezones import (
- TimezonesResource,
- AsyncTimezonesResource,
- TimezonesResourceWithRawResponse,
- AsyncTimezonesResourceWithRawResponse,
- TimezonesResourceWithStreamingResponse,
- AsyncTimezonesResourceWithStreamingResponse,
-)
-from .workflows import (
- WorkflowsResource,
- AsyncWorkflowsResource,
- WorkflowsResourceWithRawResponse,
- AsyncWorkflowsResourceWithRawResponse,
- WorkflowsResourceWithStreamingResponse,
- AsyncWorkflowsResourceWithStreamingResponse,
-)
-from .executions import (
- ExecutionsResource,
- AsyncExecutionsResource,
- ExecutionsResourceWithRawResponse,
- AsyncExecutionsResourceWithRawResponse,
- ExecutionsResourceWithStreamingResponse,
- AsyncExecutionsResourceWithStreamingResponse,
-)
-from .action_catalog import (
- ActionCatalogResource,
- AsyncActionCatalogResource,
- ActionCatalogResourceWithRawResponse,
- AsyncActionCatalogResourceWithRawResponse,
- ActionCatalogResourceWithStreamingResponse,
- AsyncActionCatalogResourceWithStreamingResponse,
-)
-
-__all__ = [
- "TriggersResource",
- "AsyncTriggersResource",
- "TriggersResourceWithRawResponse",
- "AsyncTriggersResourceWithRawResponse",
- "TriggersResourceWithStreamingResponse",
- "AsyncTriggersResourceWithStreamingResponse",
- "ActionCatalogResource",
- "AsyncActionCatalogResource",
- "ActionCatalogResourceWithRawResponse",
- "AsyncActionCatalogResourceWithRawResponse",
- "ActionCatalogResourceWithStreamingResponse",
- "AsyncActionCatalogResourceWithStreamingResponse",
- "ActionsResource",
- "AsyncActionsResource",
- "ActionsResourceWithRawResponse",
- "AsyncActionsResourceWithRawResponse",
- "ActionsResourceWithStreamingResponse",
- "AsyncActionsResourceWithStreamingResponse",
- "FlowsResource",
- "AsyncFlowsResource",
- "FlowsResourceWithRawResponse",
- "AsyncFlowsResourceWithRawResponse",
- "FlowsResourceWithStreamingResponse",
- "AsyncFlowsResourceWithStreamingResponse",
- "EventsResource",
- "AsyncEventsResource",
- "EventsResourceWithRawResponse",
- "AsyncEventsResourceWithRawResponse",
- "EventsResourceWithStreamingResponse",
- "AsyncEventsResourceWithStreamingResponse",
- "ExecutionsResource",
- "AsyncExecutionsResource",
- "ExecutionsResourceWithRawResponse",
- "AsyncExecutionsResourceWithRawResponse",
- "ExecutionsResourceWithStreamingResponse",
- "AsyncExecutionsResourceWithStreamingResponse",
- "TimezonesResource",
- "AsyncTimezonesResource",
- "TimezonesResourceWithRawResponse",
- "AsyncTimezonesResourceWithRawResponse",
- "TimezonesResourceWithStreamingResponse",
- "AsyncTimezonesResourceWithStreamingResponse",
- "SecretsResource",
- "AsyncSecretsResource",
- "SecretsResourceWithRawResponse",
- "AsyncSecretsResourceWithRawResponse",
- "SecretsResourceWithStreamingResponse",
- "AsyncSecretsResourceWithStreamingResponse",
- "WorkflowsResource",
- "AsyncWorkflowsResource",
- "WorkflowsResourceWithRawResponse",
- "AsyncWorkflowsResourceWithRawResponse",
- "WorkflowsResourceWithStreamingResponse",
- "AsyncWorkflowsResourceWithStreamingResponse",
-]
diff --git a/src/mobilerun_sdk/resources/workflows/action_catalog.py b/src/mobilerun_sdk/resources/workflows/action_catalog.py
deleted file mode 100644
index b637dd4..0000000
--- a/src/mobilerun_sdk/resources/workflows/action_catalog.py
+++ /dev/null
@@ -1,268 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Literal
-
-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 action_catalog_list_params
-from ...types.workflows.action_catalog_list_response import ActionCatalogListResponse
-from ...types.workflows.action_catalog_retrieve_response import ActionCatalogRetrieveResponse
-
-__all__ = ["ActionCatalogResource", "AsyncActionCatalogResource"]
-
-
-class ActionCatalogResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> ActionCatalogResourceWithRawResponse:
- """
- 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 ActionCatalogResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> ActionCatalogResourceWithStreamingResponse:
- """
- 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 ActionCatalogResourceWithStreamingResponse(self)
-
- def retrieve(
- self,
- catalog_entry_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,
- ) -> ActionCatalogRetrieveResponse:
- """
- Get a catalog entry
-
- 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 catalog_entry_id:
- raise ValueError(f"Expected a non-empty value for `catalog_entry_id` but received {catalog_entry_id!r}")
- return self._get(
- path_template("/action-catalog/{catalog_entry_id}", catalog_entry_id=catalog_entry_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionCatalogRetrieveResponse,
- )
-
- def list(
- self,
- *,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
- ) -> ActionCatalogListResponse:
- """
- List action catalog entries
-
- 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._get(
- "/action-catalog",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "page": page,
- "page_size": page_size,
- "service": service,
- },
- action_catalog_list_params.ActionCatalogListParams,
- ),
- ),
- cast_to=ActionCatalogListResponse,
- )
-
-
-class AsyncActionCatalogResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncActionCatalogResourceWithRawResponse:
- """
- 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 AsyncActionCatalogResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncActionCatalogResourceWithStreamingResponse:
- """
- 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 AsyncActionCatalogResourceWithStreamingResponse(self)
-
- async def retrieve(
- self,
- catalog_entry_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,
- ) -> ActionCatalogRetrieveResponse:
- """
- Get a catalog entry
-
- 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 catalog_entry_id:
- raise ValueError(f"Expected a non-empty value for `catalog_entry_id` but received {catalog_entry_id!r}")
- return await self._get(
- path_template("/action-catalog/{catalog_entry_id}", catalog_entry_id=catalog_entry_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionCatalogRetrieveResponse,
- )
-
- async def list(
- self,
- *,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
- ) -> ActionCatalogListResponse:
- """
- List action catalog entries
-
- 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._get(
- "/action-catalog",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "page": page,
- "page_size": page_size,
- "service": service,
- },
- action_catalog_list_params.ActionCatalogListParams,
- ),
- ),
- cast_to=ActionCatalogListResponse,
- )
-
-
-class ActionCatalogResourceWithRawResponse:
- def __init__(self, action_catalog: ActionCatalogResource) -> None:
- self._action_catalog = action_catalog
-
- self.retrieve = to_raw_response_wrapper(
- action_catalog.retrieve,
- )
- self.list = to_raw_response_wrapper(
- action_catalog.list,
- )
-
-
-class AsyncActionCatalogResourceWithRawResponse:
- def __init__(self, action_catalog: AsyncActionCatalogResource) -> None:
- self._action_catalog = action_catalog
-
- self.retrieve = async_to_raw_response_wrapper(
- action_catalog.retrieve,
- )
- self.list = async_to_raw_response_wrapper(
- action_catalog.list,
- )
-
-
-class ActionCatalogResourceWithStreamingResponse:
- def __init__(self, action_catalog: ActionCatalogResource) -> None:
- self._action_catalog = action_catalog
-
- self.retrieve = to_streamed_response_wrapper(
- action_catalog.retrieve,
- )
- self.list = to_streamed_response_wrapper(
- action_catalog.list,
- )
-
-
-class AsyncActionCatalogResourceWithStreamingResponse:
- def __init__(self, action_catalog: AsyncActionCatalogResource) -> None:
- self._action_catalog = action_catalog
-
- self.retrieve = async_to_streamed_response_wrapper(
- action_catalog.retrieve,
- )
- self.list = async_to_streamed_response_wrapper(
- action_catalog.list,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/actions/__init__.py b/src/mobilerun_sdk/resources/workflows/actions/__init__.py
deleted file mode 100644
index f4307e4..0000000
--- a/src/mobilerun_sdk/resources/workflows/actions/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .actions import (
- ActionsResource,
- AsyncActionsResource,
- ActionsResourceWithRawResponse,
- AsyncActionsResourceWithRawResponse,
- ActionsResourceWithStreamingResponse,
- AsyncActionsResourceWithStreamingResponse,
-)
-from .services import (
- ServicesResource,
- AsyncServicesResource,
- ServicesResourceWithRawResponse,
- AsyncServicesResourceWithRawResponse,
- ServicesResourceWithStreamingResponse,
- AsyncServicesResourceWithStreamingResponse,
-)
-
-__all__ = [
- "ServicesResource",
- "AsyncServicesResource",
- "ServicesResourceWithRawResponse",
- "AsyncServicesResourceWithRawResponse",
- "ServicesResourceWithStreamingResponse",
- "AsyncServicesResourceWithStreamingResponse",
- "ActionsResource",
- "AsyncActionsResource",
- "ActionsResourceWithRawResponse",
- "AsyncActionsResourceWithRawResponse",
- "ActionsResourceWithStreamingResponse",
- "AsyncActionsResourceWithStreamingResponse",
-]
diff --git a/src/mobilerun_sdk/resources/workflows/actions/actions.py b/src/mobilerun_sdk/resources/workflows/actions/actions.py
deleted file mode 100644
index 2b4723a..0000000
--- a/src/mobilerun_sdk/resources/workflows/actions/actions.py
+++ /dev/null
@@ -1,592 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import Literal
-
-import httpx
-
-from .services import (
- ServicesResource,
- AsyncServicesResource,
- ServicesResourceWithRawResponse,
- AsyncServicesResourceWithRawResponse,
- ServicesResourceWithStreamingResponse,
- AsyncServicesResourceWithStreamingResponse,
-)
-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 action_list_params, action_create_params, action_update_params
-from ....types.workflows.action_list_response import ActionListResponse
-from ....types.workflows.action_create_response import ActionCreateResponse
-from ....types.workflows.action_delete_response import ActionDeleteResponse
-from ....types.workflows.action_update_response import ActionUpdateResponse
-from ....types.workflows.action_retrieve_response import ActionRetrieveResponse
-
-__all__ = ["ActionsResource", "AsyncActionsResource"]
-
-
-class ActionsResource(SyncAPIResource):
- @cached_property
- def services(self) -> ServicesResource:
- return ServicesResource(self._client)
-
- @cached_property
- def with_raw_response(self) -> ActionsResourceWithRawResponse:
- """
- 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 ActionsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> ActionsResourceWithStreamingResponse:
- """
- 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 ActionsResourceWithStreamingResponse(self)
-
- def create(
- self,
- *,
- catalog_entry_id: str,
- name: str,
- description: str | Omit = omit,
- params: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ActionCreateResponse:
- """
- Create an action
-
- 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(
- "/actions",
- body=maybe_transform(
- {
- "catalog_entry_id": catalog_entry_id,
- "name": name,
- "description": description,
- "params": params,
- },
- action_create_params.ActionCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionCreateResponse,
- )
-
- def retrieve(
- self,
- action_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,
- ) -> ActionRetrieveResponse:
- """
- Get an action
-
- 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 action_id:
- raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
- return self._get(
- path_template("/actions/{action_id}", action_id=action_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionRetrieveResponse,
- )
-
- def update(
- self,
- action_id: str,
- *,
- description: str | Omit = omit,
- name: str | Omit = omit,
- params: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ActionUpdateResponse:
- """
- Update an action
-
- 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 action_id:
- raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
- return self._patch(
- path_template("/actions/{action_id}", action_id=action_id),
- body=maybe_transform(
- {
- "description": description,
- "name": name,
- "params": params,
- },
- action_update_params.ActionUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionUpdateResponse,
- )
-
- def list(
- self,
- *,
- order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: str | Omit = omit,
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
- ) -> ActionListResponse:
- """
- List actions
-
- 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._get(
- "/actions",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- "service": service,
- },
- action_list_params.ActionListParams,
- ),
- ),
- cast_to=ActionListResponse,
- )
-
- def delete(
- self,
- action_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,
- ) -> ActionDeleteResponse:
- """
- Delete an action
-
- 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 action_id:
- raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
- return self._delete(
- path_template("/actions/{action_id}", action_id=action_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionDeleteResponse,
- )
-
-
-class AsyncActionsResource(AsyncAPIResource):
- @cached_property
- def services(self) -> AsyncServicesResource:
- return AsyncServicesResource(self._client)
-
- @cached_property
- def with_raw_response(self) -> AsyncActionsResourceWithRawResponse:
- """
- 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 AsyncActionsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncActionsResourceWithStreamingResponse:
- """
- 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 AsyncActionsResourceWithStreamingResponse(self)
-
- async def create(
- self,
- *,
- catalog_entry_id: str,
- name: str,
- description: str | Omit = omit,
- params: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ActionCreateResponse:
- """
- Create an action
-
- 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(
- "/actions",
- body=await async_maybe_transform(
- {
- "catalog_entry_id": catalog_entry_id,
- "name": name,
- "description": description,
- "params": params,
- },
- action_create_params.ActionCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionCreateResponse,
- )
-
- async def retrieve(
- self,
- action_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,
- ) -> ActionRetrieveResponse:
- """
- Get an action
-
- 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 action_id:
- raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
- return await self._get(
- path_template("/actions/{action_id}", action_id=action_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionRetrieveResponse,
- )
-
- async def update(
- self,
- action_id: str,
- *,
- description: str | Omit = omit,
- name: str | Omit = omit,
- params: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> ActionUpdateResponse:
- """
- Update an action
-
- 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 action_id:
- raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
- return await self._patch(
- path_template("/actions/{action_id}", action_id=action_id),
- body=await async_maybe_transform(
- {
- "description": description,
- "name": name,
- "params": params,
- },
- action_update_params.ActionUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionUpdateResponse,
- )
-
- async def list(
- self,
- *,
- order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: str | Omit = omit,
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
- ) -> ActionListResponse:
- """
- List actions
-
- 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._get(
- "/actions",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- "service": service,
- },
- action_list_params.ActionListParams,
- ),
- ),
- cast_to=ActionListResponse,
- )
-
- async def delete(
- self,
- action_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,
- ) -> ActionDeleteResponse:
- """
- Delete an action
-
- 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 action_id:
- raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
- return await self._delete(
- path_template("/actions/{action_id}", action_id=action_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionDeleteResponse,
- )
-
-
-class ActionsResourceWithRawResponse:
- def __init__(self, actions: ActionsResource) -> None:
- self._actions = actions
-
- self.create = to_raw_response_wrapper(
- actions.create,
- )
- self.retrieve = to_raw_response_wrapper(
- actions.retrieve,
- )
- self.update = to_raw_response_wrapper(
- actions.update,
- )
- self.list = to_raw_response_wrapper(
- actions.list,
- )
- self.delete = to_raw_response_wrapper(
- actions.delete,
- )
-
- @cached_property
- def services(self) -> ServicesResourceWithRawResponse:
- return ServicesResourceWithRawResponse(self._actions.services)
-
-
-class AsyncActionsResourceWithRawResponse:
- def __init__(self, actions: AsyncActionsResource) -> None:
- self._actions = actions
-
- self.create = async_to_raw_response_wrapper(
- actions.create,
- )
- self.retrieve = async_to_raw_response_wrapper(
- actions.retrieve,
- )
- self.update = async_to_raw_response_wrapper(
- actions.update,
- )
- self.list = async_to_raw_response_wrapper(
- actions.list,
- )
- self.delete = async_to_raw_response_wrapper(
- actions.delete,
- )
-
- @cached_property
- def services(self) -> AsyncServicesResourceWithRawResponse:
- return AsyncServicesResourceWithRawResponse(self._actions.services)
-
-
-class ActionsResourceWithStreamingResponse:
- def __init__(self, actions: ActionsResource) -> None:
- self._actions = actions
-
- self.create = to_streamed_response_wrapper(
- actions.create,
- )
- self.retrieve = to_streamed_response_wrapper(
- actions.retrieve,
- )
- self.update = to_streamed_response_wrapper(
- actions.update,
- )
- self.list = to_streamed_response_wrapper(
- actions.list,
- )
- self.delete = to_streamed_response_wrapper(
- actions.delete,
- )
-
- @cached_property
- def services(self) -> ServicesResourceWithStreamingResponse:
- return ServicesResourceWithStreamingResponse(self._actions.services)
-
-
-class AsyncActionsResourceWithStreamingResponse:
- def __init__(self, actions: AsyncActionsResource) -> None:
- self._actions = actions
-
- self.create = async_to_streamed_response_wrapper(
- actions.create,
- )
- self.retrieve = async_to_streamed_response_wrapper(
- actions.retrieve,
- )
- self.update = async_to_streamed_response_wrapper(
- actions.update,
- )
- self.list = async_to_streamed_response_wrapper(
- actions.list,
- )
- self.delete = async_to_streamed_response_wrapper(
- actions.delete,
- )
-
- @cached_property
- def services(self) -> AsyncServicesResourceWithStreamingResponse:
- return AsyncServicesResourceWithStreamingResponse(self._actions.services)
diff --git a/src/mobilerun_sdk/resources/workflows/actions/services.py b/src/mobilerun_sdk/resources/workflows/actions/services.py
deleted file mode 100644
index fd46c48..0000000
--- a/src/mobilerun_sdk/resources/workflows/actions/services.py
+++ /dev/null
@@ -1,215 +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, Query, Headers, NotGiven, not_given
-from ...._utils import path_template
-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.actions.service_list_response import ServiceListResponse
-from ....types.workflows.actions.service_list_methods_response import ServiceListMethodsResponse
-
-__all__ = ["ServicesResource", "AsyncServicesResource"]
-
-
-class ServicesResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> ServicesResourceWithRawResponse:
- """
- 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 ServicesResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> ServicesResourceWithStreamingResponse:
- """
- 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 ServicesResourceWithStreamingResponse(self)
-
- 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,
- ) -> ServiceListResponse:
- """List available services"""
- return self._get(
- "/actions/services",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ServiceListResponse,
- )
-
- def list_methods(
- self,
- service: 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,
- ) -> ServiceListMethodsResponse:
- """
- List allowed methods for a service
-
- 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 service:
- raise ValueError(f"Expected a non-empty value for `service` but received {service!r}")
- return self._get(
- path_template("/actions/services/{service}/methods", service=service),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ServiceListMethodsResponse,
- )
-
-
-class AsyncServicesResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncServicesResourceWithRawResponse:
- """
- 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 AsyncServicesResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncServicesResourceWithStreamingResponse:
- """
- 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 AsyncServicesResourceWithStreamingResponse(self)
-
- 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,
- ) -> ServiceListResponse:
- """List available services"""
- return await self._get(
- "/actions/services",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ServiceListResponse,
- )
-
- async def list_methods(
- self,
- service: 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,
- ) -> ServiceListMethodsResponse:
- """
- List allowed methods for a service
-
- 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 service:
- raise ValueError(f"Expected a non-empty value for `service` but received {service!r}")
- return await self._get(
- path_template("/actions/services/{service}/methods", service=service),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ServiceListMethodsResponse,
- )
-
-
-class ServicesResourceWithRawResponse:
- def __init__(self, services: ServicesResource) -> None:
- self._services = services
-
- self.list = to_raw_response_wrapper(
- services.list,
- )
- self.list_methods = to_raw_response_wrapper(
- services.list_methods,
- )
-
-
-class AsyncServicesResourceWithRawResponse:
- def __init__(self, services: AsyncServicesResource) -> None:
- self._services = services
-
- self.list = async_to_raw_response_wrapper(
- services.list,
- )
- self.list_methods = async_to_raw_response_wrapper(
- services.list_methods,
- )
-
-
-class ServicesResourceWithStreamingResponse:
- def __init__(self, services: ServicesResource) -> None:
- self._services = services
-
- self.list = to_streamed_response_wrapper(
- services.list,
- )
- self.list_methods = to_streamed_response_wrapper(
- services.list_methods,
- )
-
-
-class AsyncServicesResourceWithStreamingResponse:
- def __init__(self, services: AsyncServicesResource) -> None:
- self._services = services
-
- self.list = async_to_streamed_response_wrapper(
- services.list,
- )
- self.list_methods = async_to_streamed_response_wrapper(
- services.list_methods,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/events/__init__.py b/src/mobilerun_sdk/resources/workflows/events/__init__.py
deleted file mode 100644
index 2c1e382..0000000
--- a/src/mobilerun_sdk/resources/workflows/events/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .events import (
- EventsResource,
- AsyncEventsResource,
- EventsResourceWithRawResponse,
- AsyncEventsResourceWithRawResponse,
- EventsResourceWithStreamingResponse,
- AsyncEventsResourceWithStreamingResponse,
-)
-from .catalog import (
- CatalogResource,
- AsyncCatalogResource,
- CatalogResourceWithRawResponse,
- AsyncCatalogResourceWithRawResponse,
- CatalogResourceWithStreamingResponse,
- AsyncCatalogResourceWithStreamingResponse,
-)
-
-__all__ = [
- "CatalogResource",
- "AsyncCatalogResource",
- "CatalogResourceWithRawResponse",
- "AsyncCatalogResourceWithRawResponse",
- "CatalogResourceWithStreamingResponse",
- "AsyncCatalogResourceWithStreamingResponse",
- "EventsResource",
- "AsyncEventsResource",
- "EventsResourceWithRawResponse",
- "AsyncEventsResourceWithRawResponse",
- "EventsResourceWithStreamingResponse",
- "AsyncEventsResourceWithStreamingResponse",
-]
diff --git a/src/mobilerun_sdk/resources/workflows/events/catalog.py b/src/mobilerun_sdk/resources/workflows/events/catalog.py
deleted file mode 100644
index 73c22cc..0000000
--- a/src/mobilerun_sdk/resources/workflows/events/catalog.py
+++ /dev/null
@@ -1,267 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Iterable
-from typing_extensions import Literal
-
-import httpx
-
-from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
-from ...._utils import 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.events import catalog_list_params, catalog_register_params
-from ....types.workflows.events.catalog_list_response import CatalogListResponse
-from ....types.workflows.events.catalog_register_response import CatalogRegisterResponse
-
-__all__ = ["CatalogResource", "AsyncCatalogResource"]
-
-
-class CatalogResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> CatalogResourceWithRawResponse:
- """
- 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 CatalogResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> CatalogResourceWithStreamingResponse:
- """
- 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 CatalogResourceWithStreamingResponse(self)
-
- def list(
- self,
- *,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- source: Literal["device", "system", "webhook"] | 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,
- ) -> CatalogListResponse:
- """
- List event catalog
-
- 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._get(
- "/events/catalog",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "page": page,
- "page_size": page_size,
- "source": source,
- },
- catalog_list_params.CatalogListParams,
- ),
- ),
- cast_to=CatalogListResponse,
- )
-
- def register(
- self,
- *,
- events: Iterable[catalog_register_params.Event],
- # 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,
- ) -> CatalogRegisterResponse:
- """
- Register event types in the catalog
-
- 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(
- "/events/catalog/register",
- body=maybe_transform({"events": events}, catalog_register_params.CatalogRegisterParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CatalogRegisterResponse,
- )
-
-
-class AsyncCatalogResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncCatalogResourceWithRawResponse:
- """
- 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 AsyncCatalogResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncCatalogResourceWithStreamingResponse:
- """
- 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 AsyncCatalogResourceWithStreamingResponse(self)
-
- async def list(
- self,
- *,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- source: Literal["device", "system", "webhook"] | 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,
- ) -> CatalogListResponse:
- """
- List event catalog
-
- 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._get(
- "/events/catalog",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "page": page,
- "page_size": page_size,
- "source": source,
- },
- catalog_list_params.CatalogListParams,
- ),
- ),
- cast_to=CatalogListResponse,
- )
-
- async def register(
- self,
- *,
- events: Iterable[catalog_register_params.Event],
- # 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,
- ) -> CatalogRegisterResponse:
- """
- Register event types in the catalog
-
- 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(
- "/events/catalog/register",
- body=await async_maybe_transform({"events": events}, catalog_register_params.CatalogRegisterParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CatalogRegisterResponse,
- )
-
-
-class CatalogResourceWithRawResponse:
- def __init__(self, catalog: CatalogResource) -> None:
- self._catalog = catalog
-
- self.list = to_raw_response_wrapper(
- catalog.list,
- )
- self.register = to_raw_response_wrapper(
- catalog.register,
- )
-
-
-class AsyncCatalogResourceWithRawResponse:
- def __init__(self, catalog: AsyncCatalogResource) -> None:
- self._catalog = catalog
-
- self.list = async_to_raw_response_wrapper(
- catalog.list,
- )
- self.register = async_to_raw_response_wrapper(
- catalog.register,
- )
-
-
-class CatalogResourceWithStreamingResponse:
- def __init__(self, catalog: CatalogResource) -> None:
- self._catalog = catalog
-
- self.list = to_streamed_response_wrapper(
- catalog.list,
- )
- self.register = to_streamed_response_wrapper(
- catalog.register,
- )
-
-
-class AsyncCatalogResourceWithStreamingResponse:
- def __init__(self, catalog: AsyncCatalogResource) -> None:
- self._catalog = catalog
-
- self.list = async_to_streamed_response_wrapper(
- catalog.list,
- )
- self.register = async_to_streamed_response_wrapper(
- catalog.register,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/events/events.py b/src/mobilerun_sdk/resources/workflows/events/events.py
deleted file mode 100644
index 09d9238..0000000
--- a/src/mobilerun_sdk/resources/workflows/events/events.py
+++ /dev/null
@@ -1,316 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-
-import httpx
-
-from .catalog import (
- CatalogResource,
- AsyncCatalogResource,
- CatalogResourceWithRawResponse,
- AsyncCatalogResourceWithRawResponse,
- CatalogResourceWithStreamingResponse,
- AsyncCatalogResourceWithStreamingResponse,
-)
-from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
-from ...._utils import 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 event_ingest_params, event_dry_run_params
-from ....types.workflows.event_ingest_response import EventIngestResponse
-from ....types.workflows.event_dry_run_response import EventDryRunResponse
-
-__all__ = ["EventsResource", "AsyncEventsResource"]
-
-
-class EventsResource(SyncAPIResource):
- @cached_property
- def catalog(self) -> CatalogResource:
- return CatalogResource(self._client)
-
- @cached_property
- def with_raw_response(self) -> EventsResourceWithRawResponse:
- """
- 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 EventsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> EventsResourceWithStreamingResponse:
- """
- 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 EventsResourceWithStreamingResponse(self)
-
- 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> EventDryRunResponse:
- """Simulate an event against all configured flows.
-
- Returns which flows would match
- and what actions would run, without storing the event or enqueuing jobs.
-
- 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(
- "/events/dry-run",
- body=maybe_transform(
- {
- "event_type": event_type,
- "device_id": device_id,
- "payload": payload,
- },
- event_dry_run_params.EventDryRunParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=EventDryRunResponse,
- )
-
- 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> EventIngestResponse:
- """Ingest an event for trigger evaluation.
-
- Returns immediately with 202 Accepted.
-
- 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(
- "/events/ingest",
- body=maybe_transform(
- {
- "event_type": event_type,
- "device_id": device_id,
- "payload": payload,
- },
- event_ingest_params.EventIngestParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=EventIngestResponse,
- )
-
-
-class AsyncEventsResource(AsyncAPIResource):
- @cached_property
- def catalog(self) -> AsyncCatalogResource:
- return AsyncCatalogResource(self._client)
-
- @cached_property
- def with_raw_response(self) -> AsyncEventsResourceWithRawResponse:
- """
- 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 AsyncEventsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncEventsResourceWithStreamingResponse:
- """
- 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 AsyncEventsResourceWithStreamingResponse(self)
-
- 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> EventDryRunResponse:
- """Simulate an event against all configured flows.
-
- Returns which flows would match
- and what actions would run, without storing the event or enqueuing jobs.
-
- 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(
- "/events/dry-run",
- body=await async_maybe_transform(
- {
- "event_type": event_type,
- "device_id": device_id,
- "payload": payload,
- },
- event_dry_run_params.EventDryRunParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=EventDryRunResponse,
- )
-
- 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> EventIngestResponse:
- """Ingest an event for trigger evaluation.
-
- Returns immediately with 202 Accepted.
-
- 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(
- "/events/ingest",
- body=await async_maybe_transform(
- {
- "event_type": event_type,
- "device_id": device_id,
- "payload": payload,
- },
- event_ingest_params.EventIngestParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=EventIngestResponse,
- )
-
-
-class EventsResourceWithRawResponse:
- def __init__(self, events: EventsResource) -> None:
- self._events = events
-
- self.dry_run = to_raw_response_wrapper(
- events.dry_run,
- )
- self.ingest = to_raw_response_wrapper(
- events.ingest,
- )
-
- @cached_property
- def catalog(self) -> CatalogResourceWithRawResponse:
- return CatalogResourceWithRawResponse(self._events.catalog)
-
-
-class AsyncEventsResourceWithRawResponse:
- def __init__(self, events: AsyncEventsResource) -> None:
- self._events = events
-
- self.dry_run = async_to_raw_response_wrapper(
- events.dry_run,
- )
- self.ingest = async_to_raw_response_wrapper(
- events.ingest,
- )
-
- @cached_property
- def catalog(self) -> AsyncCatalogResourceWithRawResponse:
- return AsyncCatalogResourceWithRawResponse(self._events.catalog)
-
-
-class EventsResourceWithStreamingResponse:
- def __init__(self, events: EventsResource) -> None:
- self._events = events
-
- self.dry_run = to_streamed_response_wrapper(
- events.dry_run,
- )
- self.ingest = to_streamed_response_wrapper(
- events.ingest,
- )
-
- @cached_property
- def catalog(self) -> CatalogResourceWithStreamingResponse:
- return CatalogResourceWithStreamingResponse(self._events.catalog)
-
-
-class AsyncEventsResourceWithStreamingResponse:
- def __init__(self, events: AsyncEventsResource) -> None:
- self._events = events
-
- self.dry_run = async_to_streamed_response_wrapper(
- events.dry_run,
- )
- self.ingest = async_to_streamed_response_wrapper(
- events.ingest,
- )
-
- @cached_property
- def catalog(self) -> AsyncCatalogResourceWithStreamingResponse:
- return AsyncCatalogResourceWithStreamingResponse(self._events.catalog)
diff --git a/src/mobilerun_sdk/resources/workflows/executions.py b/src/mobilerun_sdk/resources/workflows/executions.py
deleted file mode 100644
index cb5a0dd..0000000
--- a/src/mobilerun_sdk/resources/workflows/executions.py
+++ /dev/null
@@ -1,402 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Optional
-from typing_extensions import Literal
-
-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 execution_list_params, execution_get_metrics_params
-from ...types.workflows.execution_list_response import ExecutionListResponse
-from ...types.workflows.execution_retrieve_response import ExecutionRetrieveResponse
-from ...types.workflows.execution_get_metrics_response import ExecutionGetMetricsResponse
-
-__all__ = ["ExecutionsResource", "AsyncExecutionsResource"]
-
-
-class ExecutionsResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> ExecutionsResourceWithRawResponse:
- """
- 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 ExecutionsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> ExecutionsResourceWithStreamingResponse:
- """
- 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 ExecutionsResourceWithStreamingResponse(self)
-
- def retrieve(
- self,
- execution_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,
- ) -> ExecutionRetrieveResponse:
- """
- Get execution details
-
- 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 execution_id:
- raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}")
- return self._get(
- path_template("/executions/{execution_id}", execution_id=execution_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ExecutionRetrieveResponse,
- )
-
- def list(
- self,
- *,
- flow_id: str | Omit = omit,
- from_: Optional[str] | Omit = omit,
- order_by: Literal["startedAt", "finishedAt", "status"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: str | Omit = omit,
- status: Literal["pending", "running", "success", "failed"] | 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.
- # 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,
- ) -> ExecutionListResponse:
- """
- List flow executions
-
- 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._get(
- "/executions",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "flow_id": flow_id,
- "from_": from_,
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- "status": status,
- "to": to,
- "trigger_id": trigger_id,
- },
- execution_list_params.ExecutionListParams,
- ),
- ),
- cast_to=ExecutionListResponse,
- )
-
- def get_metrics(
- self,
- *,
- flow_id: str | Omit = omit,
- from_: Optional[str] | 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.
- # 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,
- ) -> ExecutionGetMetricsResponse:
- """
- Get execution metrics
-
- 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._get(
- "/executions/metrics",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "flow_id": flow_id,
- "from_": from_,
- "to": to,
- "trigger_id": trigger_id,
- },
- execution_get_metrics_params.ExecutionGetMetricsParams,
- ),
- ),
- cast_to=ExecutionGetMetricsResponse,
- )
-
-
-class AsyncExecutionsResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncExecutionsResourceWithRawResponse:
- """
- 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 AsyncExecutionsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncExecutionsResourceWithStreamingResponse:
- """
- 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 AsyncExecutionsResourceWithStreamingResponse(self)
-
- async def retrieve(
- self,
- execution_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,
- ) -> ExecutionRetrieveResponse:
- """
- Get execution details
-
- 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 execution_id:
- raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}")
- return await self._get(
- path_template("/executions/{execution_id}", execution_id=execution_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ExecutionRetrieveResponse,
- )
-
- async def list(
- self,
- *,
- flow_id: str | Omit = omit,
- from_: Optional[str] | Omit = omit,
- order_by: Literal["startedAt", "finishedAt", "status"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: str | Omit = omit,
- status: Literal["pending", "running", "success", "failed"] | 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.
- # 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,
- ) -> ExecutionListResponse:
- """
- List flow executions
-
- 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._get(
- "/executions",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "flow_id": flow_id,
- "from_": from_,
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- "status": status,
- "to": to,
- "trigger_id": trigger_id,
- },
- execution_list_params.ExecutionListParams,
- ),
- ),
- cast_to=ExecutionListResponse,
- )
-
- async def get_metrics(
- self,
- *,
- flow_id: str | Omit = omit,
- from_: Optional[str] | 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.
- # 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,
- ) -> ExecutionGetMetricsResponse:
- """
- Get execution metrics
-
- 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._get(
- "/executions/metrics",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "flow_id": flow_id,
- "from_": from_,
- "to": to,
- "trigger_id": trigger_id,
- },
- execution_get_metrics_params.ExecutionGetMetricsParams,
- ),
- ),
- cast_to=ExecutionGetMetricsResponse,
- )
-
-
-class ExecutionsResourceWithRawResponse:
- def __init__(self, executions: ExecutionsResource) -> None:
- self._executions = executions
-
- self.retrieve = to_raw_response_wrapper(
- executions.retrieve,
- )
- self.list = to_raw_response_wrapper(
- executions.list,
- )
- self.get_metrics = to_raw_response_wrapper(
- executions.get_metrics,
- )
-
-
-class AsyncExecutionsResourceWithRawResponse:
- def __init__(self, executions: AsyncExecutionsResource) -> None:
- self._executions = executions
-
- self.retrieve = async_to_raw_response_wrapper(
- executions.retrieve,
- )
- self.list = async_to_raw_response_wrapper(
- executions.list,
- )
- self.get_metrics = async_to_raw_response_wrapper(
- executions.get_metrics,
- )
-
-
-class ExecutionsResourceWithStreamingResponse:
- def __init__(self, executions: ExecutionsResource) -> None:
- self._executions = executions
-
- self.retrieve = to_streamed_response_wrapper(
- executions.retrieve,
- )
- self.list = to_streamed_response_wrapper(
- executions.list,
- )
- self.get_metrics = to_streamed_response_wrapper(
- executions.get_metrics,
- )
-
-
-class AsyncExecutionsResourceWithStreamingResponse:
- def __init__(self, executions: AsyncExecutionsResource) -> None:
- self._executions = executions
-
- self.retrieve = async_to_streamed_response_wrapper(
- executions.retrieve,
- )
- self.list = async_to_streamed_response_wrapper(
- executions.list,
- )
- self.get_metrics = async_to_streamed_response_wrapper(
- executions.get_metrics,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/flows/__init__.py b/src/mobilerun_sdk/resources/workflows/flows/__init__.py
deleted file mode 100644
index bfeb155..0000000
--- a/src/mobilerun_sdk/resources/workflows/flows/__init__.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .flows import (
- FlowsResource,
- AsyncFlowsResource,
- FlowsResourceWithRawResponse,
- AsyncFlowsResourceWithRawResponse,
- FlowsResourceWithStreamingResponse,
- AsyncFlowsResourceWithStreamingResponse,
-)
-from .actions import (
- ActionsResource,
- AsyncActionsResource,
- ActionsResourceWithRawResponse,
- AsyncActionsResourceWithRawResponse,
- ActionsResourceWithStreamingResponse,
- AsyncActionsResourceWithStreamingResponse,
-)
-
-__all__ = [
- "ActionsResource",
- "AsyncActionsResource",
- "ActionsResourceWithRawResponse",
- "AsyncActionsResourceWithRawResponse",
- "ActionsResourceWithStreamingResponse",
- "AsyncActionsResourceWithStreamingResponse",
- "FlowsResource",
- "AsyncFlowsResource",
- "FlowsResourceWithRawResponse",
- "AsyncFlowsResourceWithRawResponse",
- "FlowsResourceWithStreamingResponse",
- "AsyncFlowsResourceWithStreamingResponse",
-]
diff --git a/src/mobilerun_sdk/resources/workflows/flows/actions.py b/src/mobilerun_sdk/resources/workflows/flows/actions.py
deleted file mode 100644
index caea3b8..0000000
--- a/src/mobilerun_sdk/resources/workflows/flows/actions.py
+++ /dev/null
@@ -1,458 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Iterable, Optional
-
-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.flows import action_add_params, action_replace_params
-from ....types.workflows.flows.action_add_response import ActionAddResponse
-from ....types.workflows.flows.action_list_response import ActionListResponse
-from ....types.workflows.flow_action_overrides_param import FlowActionOverridesParam
-from ....types.workflows.flows.action_remove_response import ActionRemoveResponse
-from ....types.workflows.flow_child_action_input_param import FlowChildActionInputParam
-from ....types.workflows.flows.action_replace_response import ActionReplaceResponse
-
-__all__ = ["ActionsResource", "AsyncActionsResource"]
-
-
-class ActionsResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> ActionsResourceWithRawResponse:
- """
- 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 ActionsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> ActionsResourceWithStreamingResponse:
- """
- 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 ActionsResourceWithStreamingResponse(self)
-
- def list(
- self,
- flow_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,
- ) -> ActionListResponse:
- """
- List actions for a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._get(
- path_template("/flows/{flow_id}/actions", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionListResponse,
- )
-
- def add(
- self,
- flow_id: str,
- *,
- action_id: str,
- 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,
- # 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,
- ) -> ActionAddResponse:
- """
- Add an action to a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._post(
- path_template("/flows/{flow_id}/actions", flow_id=flow_id),
- body=maybe_transform(
- {
- "action_id": action_id,
- "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,
- },
- action_add_params.ActionAddParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionAddResponse,
- )
-
- def remove(
- self,
- flow_action_id: str,
- *,
- flow_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,
- ) -> ActionRemoveResponse:
- """
- Remove an action from a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- if not flow_action_id:
- raise ValueError(f"Expected a non-empty value for `flow_action_id` but received {flow_action_id!r}")
- return self._delete(
- path_template("/flows/{flow_id}/actions/{flow_action_id}", flow_id=flow_id, flow_action_id=flow_action_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionRemoveResponse,
- )
-
- def replace(
- self,
- flow_id: str,
- *,
- actions: Iterable[action_replace_params.Action],
- # 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,
- ) -> ActionReplaceResponse:
- """
- Replace all actions for a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._put(
- path_template("/flows/{flow_id}/actions", flow_id=flow_id),
- body=maybe_transform({"actions": actions}, action_replace_params.ActionReplaceParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionReplaceResponse,
- )
-
-
-class AsyncActionsResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncActionsResourceWithRawResponse:
- """
- 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 AsyncActionsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncActionsResourceWithStreamingResponse:
- """
- 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 AsyncActionsResourceWithStreamingResponse(self)
-
- async def list(
- self,
- flow_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,
- ) -> ActionListResponse:
- """
- List actions for a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return await self._get(
- path_template("/flows/{flow_id}/actions", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionListResponse,
- )
-
- async def add(
- self,
- flow_id: str,
- *,
- action_id: str,
- 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,
- # 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,
- ) -> ActionAddResponse:
- """
- Add an action to a flow
-
- 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 flow_id:
- 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}/actions", flow_id=flow_id),
- body=await async_maybe_transform(
- {
- "action_id": action_id,
- "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,
- },
- action_add_params.ActionAddParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionAddResponse,
- )
-
- async def remove(
- self,
- flow_action_id: str,
- *,
- flow_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,
- ) -> ActionRemoveResponse:
- """
- Remove an action from a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- if not flow_action_id:
- raise ValueError(f"Expected a non-empty value for `flow_action_id` but received {flow_action_id!r}")
- return await self._delete(
- path_template("/flows/{flow_id}/actions/{flow_action_id}", flow_id=flow_id, flow_action_id=flow_action_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionRemoveResponse,
- )
-
- async def replace(
- self,
- flow_id: str,
- *,
- actions: Iterable[action_replace_params.Action],
- # 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,
- ) -> ActionReplaceResponse:
- """
- Replace all actions for a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return await self._put(
- path_template("/flows/{flow_id}/actions", flow_id=flow_id),
- body=await async_maybe_transform({"actions": actions}, action_replace_params.ActionReplaceParams),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=ActionReplaceResponse,
- )
-
-
-class ActionsResourceWithRawResponse:
- def __init__(self, actions: ActionsResource) -> None:
- self._actions = actions
-
- self.list = to_raw_response_wrapper(
- actions.list,
- )
- self.add = to_raw_response_wrapper(
- actions.add,
- )
- self.remove = to_raw_response_wrapper(
- actions.remove,
- )
- self.replace = to_raw_response_wrapper(
- actions.replace,
- )
-
-
-class AsyncActionsResourceWithRawResponse:
- def __init__(self, actions: AsyncActionsResource) -> None:
- self._actions = actions
-
- self.list = async_to_raw_response_wrapper(
- actions.list,
- )
- self.add = async_to_raw_response_wrapper(
- actions.add,
- )
- self.remove = async_to_raw_response_wrapper(
- actions.remove,
- )
- self.replace = async_to_raw_response_wrapper(
- actions.replace,
- )
-
-
-class ActionsResourceWithStreamingResponse:
- def __init__(self, actions: ActionsResource) -> None:
- self._actions = actions
-
- self.list = to_streamed_response_wrapper(
- actions.list,
- )
- self.add = to_streamed_response_wrapper(
- actions.add,
- )
- self.remove = to_streamed_response_wrapper(
- actions.remove,
- )
- self.replace = to_streamed_response_wrapper(
- actions.replace,
- )
-
-
-class AsyncActionsResourceWithStreamingResponse:
- def __init__(self, actions: AsyncActionsResource) -> None:
- self._actions = actions
-
- self.list = async_to_streamed_response_wrapper(
- actions.list,
- )
- self.add = async_to_streamed_response_wrapper(
- actions.add,
- )
- self.remove = async_to_streamed_response_wrapper(
- actions.remove,
- )
- self.replace = async_to_streamed_response_wrapper(
- actions.replace,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/flows/flows.py b/src/mobilerun_sdk/resources/workflows/flows/flows.py
deleted file mode 100644
index d6881fa..0000000
--- a/src/mobilerun_sdk/resources/workflows/flows/flows.py
+++ /dev/null
@@ -1,790 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import List, Iterable, Optional
-from typing_extensions import Literal
-
-import httpx
-
-from .actions import (
- ActionsResource,
- AsyncActionsResource,
- ActionsResourceWithRawResponse,
- AsyncActionsResourceWithRawResponse,
- ActionsResourceWithStreamingResponse,
- AsyncActionsResourceWithStreamingResponse,
-)
-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 flow_list_params, flow_clone_params, flow_create_params, flow_update_params
-from ....types.workflows.flow_list_response import FlowListResponse
-from ....types.workflows.flow_clone_response import FlowCloneResponse
-from ....types.workflows.flow_create_response import FlowCreateResponse
-from ....types.workflows.flow_delete_response import FlowDeleteResponse
-from ....types.workflows.flow_update_response import FlowUpdateResponse
-from ....types.workflows.flow_unblock_response import FlowUnblockResponse
-from ....types.workflows.flow_retrieve_response import FlowRetrieveResponse
-
-__all__ = ["FlowsResource", "AsyncFlowsResource"]
-
-
-class FlowsResource(SyncAPIResource):
- @cached_property
- def actions(self) -> ActionsResource:
- return ActionsResource(self._client)
-
- @cached_property
- def with_raw_response(self) -> FlowsResourceWithRawResponse:
- """
- 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 FlowsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> FlowsResourceWithStreamingResponse:
- """
- 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 FlowsResourceWithStreamingResponse(self)
-
- def create(
- self,
- *,
- actions: Iterable[flow_create_params.Action],
- name: str,
- trigger_id: str,
- cooldown_scope: Literal["flow", "device"] | Omit = omit,
- cooldown_seconds: Optional[int] | Omit = omit,
- description: str | Omit = omit,
- enabled: bool | 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,
- ) -> FlowCreateResponse:
- """
- Create a flow
-
- 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(
- "/flows",
- body=maybe_transform(
- {
- "actions": actions,
- "name": name,
- "trigger_id": trigger_id,
- "cooldown_scope": cooldown_scope,
- "cooldown_seconds": cooldown_seconds,
- "description": description,
- "enabled": enabled,
- },
- flow_create_params.FlowCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowCreateResponse,
- )
-
- def retrieve(
- self,
- flow_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,
- ) -> FlowRetrieveResponse:
- """
- Get a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._get(
- path_template("/flows/{flow_id}", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowRetrieveResponse,
- )
-
- def update(
- self,
- flow_id: str,
- *,
- cooldown_scope: Literal["flow", "device"] | Omit = omit,
- cooldown_seconds: Optional[int] | Omit = omit,
- description: str | Omit = omit,
- enabled: bool | Omit = omit,
- name: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FlowUpdateResponse:
- """
- Update a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._patch(
- path_template("/flows/{flow_id}", flow_id=flow_id),
- body=maybe_transform(
- {
- "cooldown_scope": cooldown_scope,
- "cooldown_seconds": cooldown_seconds,
- "description": description,
- "enabled": enabled,
- "name": name,
- "trigger_id": trigger_id,
- },
- flow_update_params.FlowUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowUpdateResponse,
- )
-
- def list(
- self,
- *,
- enabled: Optional[bool] | Omit = omit,
- order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: str | Omit = omit,
- status: List[Literal["healthy", "failing", "blocked"]] | 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FlowListResponse:
- """
- List flows
-
- 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._get(
- "/flows",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "enabled": enabled,
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- "status": status,
- "trigger_id": trigger_id,
- },
- flow_list_params.FlowListParams,
- ),
- ),
- cast_to=FlowListResponse,
- )
-
- def delete(
- self,
- flow_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,
- ) -> FlowDeleteResponse:
- """
- Delete a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._delete(
- path_template("/flows/{flow_id}", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowDeleteResponse,
- )
-
- def clone(
- self,
- flow_id: str,
- *,
- 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FlowCloneResponse:
- """
- Clone a flow
-
- 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 flow_id:
- 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),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowCloneResponse,
- )
-
- def unblock(
- self,
- flow_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,
- ) -> FlowUnblockResponse:
- """Clear a flow's blocked status after fixing the underlying issue.
-
- Idempotent —
- safe to call on already-healthy flows.
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return self._post(
- path_template("/flows/{flow_id}/unblock", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowUnblockResponse,
- )
-
-
-class AsyncFlowsResource(AsyncAPIResource):
- @cached_property
- def actions(self) -> AsyncActionsResource:
- return AsyncActionsResource(self._client)
-
- @cached_property
- def with_raw_response(self) -> AsyncFlowsResourceWithRawResponse:
- """
- 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 AsyncFlowsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncFlowsResourceWithStreamingResponse:
- """
- 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 AsyncFlowsResourceWithStreamingResponse(self)
-
- async def create(
- self,
- *,
- actions: Iterable[flow_create_params.Action],
- name: str,
- trigger_id: str,
- cooldown_scope: Literal["flow", "device"] | Omit = omit,
- cooldown_seconds: Optional[int] | Omit = omit,
- description: str | Omit = omit,
- enabled: bool | 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,
- ) -> FlowCreateResponse:
- """
- Create a flow
-
- 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(
- "/flows",
- body=await async_maybe_transform(
- {
- "actions": actions,
- "name": name,
- "trigger_id": trigger_id,
- "cooldown_scope": cooldown_scope,
- "cooldown_seconds": cooldown_seconds,
- "description": description,
- "enabled": enabled,
- },
- flow_create_params.FlowCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowCreateResponse,
- )
-
- async def retrieve(
- self,
- flow_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,
- ) -> FlowRetrieveResponse:
- """
- Get a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return await self._get(
- path_template("/flows/{flow_id}", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowRetrieveResponse,
- )
-
- async def update(
- self,
- flow_id: str,
- *,
- cooldown_scope: Literal["flow", "device"] | Omit = omit,
- cooldown_seconds: Optional[int] | Omit = omit,
- description: str | Omit = omit,
- enabled: bool | Omit = omit,
- name: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FlowUpdateResponse:
- """
- Update a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return await self._patch(
- path_template("/flows/{flow_id}", flow_id=flow_id),
- body=await async_maybe_transform(
- {
- "cooldown_scope": cooldown_scope,
- "cooldown_seconds": cooldown_seconds,
- "description": description,
- "enabled": enabled,
- "name": name,
- "trigger_id": trigger_id,
- },
- flow_update_params.FlowUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowUpdateResponse,
- )
-
- async def list(
- self,
- *,
- enabled: Optional[bool] | Omit = omit,
- order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: str | Omit = omit,
- status: List[Literal["healthy", "failing", "blocked"]] | 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FlowListResponse:
- """
- List flows
-
- 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._get(
- "/flows",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "enabled": enabled,
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- "status": status,
- "trigger_id": trigger_id,
- },
- flow_list_params.FlowListParams,
- ),
- ),
- cast_to=FlowListResponse,
- )
-
- async def delete(
- self,
- flow_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,
- ) -> FlowDeleteResponse:
- """
- Delete a flow
-
- 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 flow_id:
- raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
- return await self._delete(
- path_template("/flows/{flow_id}", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowDeleteResponse,
- )
-
- async def clone(
- self,
- flow_id: str,
- *,
- 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> FlowCloneResponse:
- """
- Clone a flow
-
- 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 flow_id:
- 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),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowCloneResponse,
- )
-
- async def unblock(
- self,
- flow_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,
- ) -> FlowUnblockResponse:
- """Clear a flow's blocked status after fixing the underlying issue.
-
- Idempotent —
- safe to call on already-healthy flows.
-
- 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 flow_id:
- 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}/unblock", flow_id=flow_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=FlowUnblockResponse,
- )
-
-
-class FlowsResourceWithRawResponse:
- def __init__(self, flows: FlowsResource) -> None:
- self._flows = flows
-
- self.create = to_raw_response_wrapper(
- flows.create,
- )
- self.retrieve = to_raw_response_wrapper(
- flows.retrieve,
- )
- self.update = to_raw_response_wrapper(
- flows.update,
- )
- self.list = to_raw_response_wrapper(
- flows.list,
- )
- self.delete = to_raw_response_wrapper(
- flows.delete,
- )
- self.clone = to_raw_response_wrapper(
- flows.clone,
- )
- self.unblock = to_raw_response_wrapper(
- flows.unblock,
- )
-
- @cached_property
- def actions(self) -> ActionsResourceWithRawResponse:
- return ActionsResourceWithRawResponse(self._flows.actions)
-
-
-class AsyncFlowsResourceWithRawResponse:
- def __init__(self, flows: AsyncFlowsResource) -> None:
- self._flows = flows
-
- self.create = async_to_raw_response_wrapper(
- flows.create,
- )
- self.retrieve = async_to_raw_response_wrapper(
- flows.retrieve,
- )
- self.update = async_to_raw_response_wrapper(
- flows.update,
- )
- self.list = async_to_raw_response_wrapper(
- flows.list,
- )
- self.delete = async_to_raw_response_wrapper(
- flows.delete,
- )
- self.clone = async_to_raw_response_wrapper(
- flows.clone,
- )
- self.unblock = async_to_raw_response_wrapper(
- flows.unblock,
- )
-
- @cached_property
- def actions(self) -> AsyncActionsResourceWithRawResponse:
- return AsyncActionsResourceWithRawResponse(self._flows.actions)
-
-
-class FlowsResourceWithStreamingResponse:
- def __init__(self, flows: FlowsResource) -> None:
- self._flows = flows
-
- self.create = to_streamed_response_wrapper(
- flows.create,
- )
- self.retrieve = to_streamed_response_wrapper(
- flows.retrieve,
- )
- self.update = to_streamed_response_wrapper(
- flows.update,
- )
- self.list = to_streamed_response_wrapper(
- flows.list,
- )
- self.delete = to_streamed_response_wrapper(
- flows.delete,
- )
- self.clone = to_streamed_response_wrapper(
- flows.clone,
- )
- self.unblock = to_streamed_response_wrapper(
- flows.unblock,
- )
-
- @cached_property
- def actions(self) -> ActionsResourceWithStreamingResponse:
- return ActionsResourceWithStreamingResponse(self._flows.actions)
-
-
-class AsyncFlowsResourceWithStreamingResponse:
- def __init__(self, flows: AsyncFlowsResource) -> None:
- self._flows = flows
-
- self.create = async_to_streamed_response_wrapper(
- flows.create,
- )
- self.retrieve = async_to_streamed_response_wrapper(
- flows.retrieve,
- )
- self.update = async_to_streamed_response_wrapper(
- flows.update,
- )
- self.list = async_to_streamed_response_wrapper(
- flows.list,
- )
- self.delete = async_to_streamed_response_wrapper(
- flows.delete,
- )
- self.clone = async_to_streamed_response_wrapper(
- flows.clone,
- )
- self.unblock = async_to_streamed_response_wrapper(
- flows.unblock,
- )
-
- @cached_property
- def actions(self) -> AsyncActionsResourceWithStreamingResponse:
- return AsyncActionsResourceWithStreamingResponse(self._flows.actions)
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/timezones.py b/src/mobilerun_sdk/resources/workflows/timezones.py
deleted file mode 100644
index 5b7e797..0000000
--- a/src/mobilerun_sdk/resources/workflows/timezones.py
+++ /dev/null
@@ -1,135 +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, Query, Headers, NotGiven, not_given
-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.timezone_list_response import TimezoneListResponse
-
-__all__ = ["TimezonesResource", "AsyncTimezonesResource"]
-
-
-class TimezonesResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> TimezonesResourceWithRawResponse:
- """
- 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 TimezonesResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> TimezonesResourceWithStreamingResponse:
- """
- 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 TimezonesResourceWithStreamingResponse(self)
-
- 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,
- ) -> TimezoneListResponse:
- """List supported IANA timezones"""
- return self._get(
- "/timezones",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TimezoneListResponse,
- )
-
-
-class AsyncTimezonesResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncTimezonesResourceWithRawResponse:
- """
- 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 AsyncTimezonesResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncTimezonesResourceWithStreamingResponse:
- """
- 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 AsyncTimezonesResourceWithStreamingResponse(self)
-
- 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,
- ) -> TimezoneListResponse:
- """List supported IANA timezones"""
- return await self._get(
- "/timezones",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TimezoneListResponse,
- )
-
-
-class TimezonesResourceWithRawResponse:
- def __init__(self, timezones: TimezonesResource) -> None:
- self._timezones = timezones
-
- self.list = to_raw_response_wrapper(
- timezones.list,
- )
-
-
-class AsyncTimezonesResourceWithRawResponse:
- def __init__(self, timezones: AsyncTimezonesResource) -> None:
- self._timezones = timezones
-
- self.list = async_to_raw_response_wrapper(
- timezones.list,
- )
-
-
-class TimezonesResourceWithStreamingResponse:
- def __init__(self, timezones: TimezonesResource) -> None:
- self._timezones = timezones
-
- self.list = to_streamed_response_wrapper(
- timezones.list,
- )
-
-
-class AsyncTimezonesResourceWithStreamingResponse:
- def __init__(self, timezones: AsyncTimezonesResource) -> None:
- self._timezones = timezones
-
- self.list = async_to_streamed_response_wrapper(
- timezones.list,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/triggers.py b/src/mobilerun_sdk/resources/workflows/triggers.py
deleted file mode 100644
index 99ed8c3..0000000
--- a/src/mobilerun_sdk/resources/workflows/triggers.py
+++ /dev/null
@@ -1,753 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import Literal
-
-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 trigger_fire_params, trigger_list_params, trigger_create_params, trigger_update_params
-from ...types.workflows.trigger_fire_response import TriggerFireResponse
-from ...types.workflows.trigger_list_response import TriggerListResponse
-from ...types.workflows.trigger_create_response import TriggerCreateResponse
-from ...types.workflows.trigger_delete_response import TriggerDeleteResponse
-from ...types.workflows.trigger_update_response import TriggerUpdateResponse
-from ...types.workflows.trigger_retrieve_response import TriggerRetrieveResponse
-
-__all__ = ["TriggersResource", "AsyncTriggersResource"]
-
-
-class TriggersResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> TriggersResourceWithRawResponse:
- """
- 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 TriggersResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> TriggersResourceWithStreamingResponse:
- """
- 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 TriggersResourceWithStreamingResponse(self)
-
- def create(
- self,
- *,
- activation: Literal["event", "schedule", "custom"],
- name: str,
- conditions: trigger_create_params.Conditions | Omit = omit,
- custom_payload_schema: Dict[str, object] | Omit = omit,
- description: str | Omit = omit,
- event_type: str | Omit = omit,
- schedule_rule: trigger_create_params.ScheduleRule | Omit = omit,
- timezone: 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,
- ) -> TriggerCreateResponse:
- """
- Create a trigger
-
- Args:
- custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
-
- 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(
- "/triggers",
- body=maybe_transform(
- {
- "activation": activation,
- "name": name,
- "conditions": conditions,
- "custom_payload_schema": custom_payload_schema,
- "description": description,
- "event_type": event_type,
- "schedule_rule": schedule_rule,
- "timezone": timezone,
- },
- trigger_create_params.TriggerCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerCreateResponse,
- )
-
- def retrieve(
- self,
- trigger_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,
- ) -> TriggerRetrieveResponse:
- """
- Get a trigger
-
- 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 trigger_id:
- raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
- return self._get(
- path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerRetrieveResponse,
- )
-
- def update(
- self,
- trigger_id: str,
- *,
- activation: Literal["event", "schedule", "custom"] | Omit = omit,
- conditions: trigger_update_params.Conditions | Omit = omit,
- custom_payload_schema: Optional[Dict[str, object]] | Omit = omit,
- description: str | Omit = omit,
- event_type: str | Omit = omit,
- name: str | Omit = omit,
- schedule_rule: trigger_update_params.ScheduleRule | Omit = omit,
- timezone: 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,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TriggerUpdateResponse:
- """
- Update a trigger
-
- Args:
- custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
-
- 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 trigger_id:
- raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
- return self._patch(
- path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
- body=maybe_transform(
- {
- "activation": activation,
- "conditions": conditions,
- "custom_payload_schema": custom_payload_schema,
- "description": description,
- "event_type": event_type,
- "name": name,
- "schedule_rule": schedule_rule,
- "timezone": timezone,
- },
- trigger_update_params.TriggerUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerUpdateResponse,
- )
-
- def list(
- self,
- *,
- activation: Literal["event", "schedule", "custom"] | Omit = omit,
- event_type: str | Omit = omit,
- order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: 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,
- ) -> TriggerListResponse:
- """
- List triggers
-
- 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._get(
- "/triggers",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=maybe_transform(
- {
- "activation": activation,
- "event_type": event_type,
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- },
- trigger_list_params.TriggerListParams,
- ),
- ),
- cast_to=TriggerListResponse,
- )
-
- def delete(
- self,
- trigger_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,
- ) -> TriggerDeleteResponse:
- """
- Delete a trigger
-
- 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 trigger_id:
- raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
- return self._delete(
- path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerDeleteResponse,
- )
-
- def fire(
- self,
- 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,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TriggerFireResponse:
- """
- Invoke a custom trigger directly with an arbitrary JSON payload.
-
- Fan-out: a trigger may be referenced by multiple flows (workflows). Firing it
- enqueues one execution per enabled, non-deleted flow attached to this trigger,
- each receiving the same payload. The `enqueuedCount` in the response reports how
- many were enqueued (0 if no flows are attached, or if all matching flows are
- gated by a cooldown).
-
- Payload validation:
-
- - If the trigger has a `customPayloadSchema`, the payload is validated against
- it (JSON Schema via AJV).
- - If no schema is configured, the payload only needs to be a JSON object — any
- keys and values are accepted.
-
- Only triggers with `activation = "custom"` can be fired through this endpoint;
- event and schedule triggers return 409.
-
- Args:
- payload: Arbitrary JSON object forwarded to every flow attached to this trigger.
- 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
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not trigger_id:
- 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,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerFireResponse,
- )
-
-
-class AsyncTriggersResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncTriggersResourceWithRawResponse:
- """
- 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 AsyncTriggersResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncTriggersResourceWithStreamingResponse:
- """
- 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 AsyncTriggersResourceWithStreamingResponse(self)
-
- async def create(
- self,
- *,
- activation: Literal["event", "schedule", "custom"],
- name: str,
- conditions: trigger_create_params.Conditions | Omit = omit,
- custom_payload_schema: Dict[str, object] | Omit = omit,
- description: str | Omit = omit,
- event_type: str | Omit = omit,
- schedule_rule: trigger_create_params.ScheduleRule | Omit = omit,
- timezone: 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,
- ) -> TriggerCreateResponse:
- """
- Create a trigger
-
- Args:
- custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
-
- 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(
- "/triggers",
- body=await async_maybe_transform(
- {
- "activation": activation,
- "name": name,
- "conditions": conditions,
- "custom_payload_schema": custom_payload_schema,
- "description": description,
- "event_type": event_type,
- "schedule_rule": schedule_rule,
- "timezone": timezone,
- },
- trigger_create_params.TriggerCreateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerCreateResponse,
- )
-
- async def retrieve(
- self,
- trigger_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,
- ) -> TriggerRetrieveResponse:
- """
- Get a trigger
-
- 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 trigger_id:
- raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
- return await self._get(
- path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerRetrieveResponse,
- )
-
- async def update(
- self,
- trigger_id: str,
- *,
- activation: Literal["event", "schedule", "custom"] | Omit = omit,
- conditions: trigger_update_params.Conditions | Omit = omit,
- custom_payload_schema: Optional[Dict[str, object]] | Omit = omit,
- description: str | Omit = omit,
- event_type: str | Omit = omit,
- name: str | Omit = omit,
- schedule_rule: trigger_update_params.ScheduleRule | Omit = omit,
- timezone: 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,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TriggerUpdateResponse:
- """
- Update a trigger
-
- Args:
- custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
-
- 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 trigger_id:
- raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
- return await self._patch(
- path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
- body=await async_maybe_transform(
- {
- "activation": activation,
- "conditions": conditions,
- "custom_payload_schema": custom_payload_schema,
- "description": description,
- "event_type": event_type,
- "name": name,
- "schedule_rule": schedule_rule,
- "timezone": timezone,
- },
- trigger_update_params.TriggerUpdateParams,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerUpdateResponse,
- )
-
- async def list(
- self,
- *,
- activation: Literal["event", "schedule", "custom"] | Omit = omit,
- event_type: str | Omit = omit,
- order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
- order_by_direction: Literal["asc", "desc"] | Omit = omit,
- page: int | Omit = omit,
- page_size: int | Omit = omit,
- search: 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,
- ) -> TriggerListResponse:
- """
- List triggers
-
- 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._get(
- "/triggers",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- query=await async_maybe_transform(
- {
- "activation": activation,
- "event_type": event_type,
- "order_by": order_by,
- "order_by_direction": order_by_direction,
- "page": page,
- "page_size": page_size,
- "search": search,
- },
- trigger_list_params.TriggerListParams,
- ),
- ),
- cast_to=TriggerListResponse,
- )
-
- async def delete(
- self,
- trigger_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,
- ) -> TriggerDeleteResponse:
- """
- Delete a trigger
-
- 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 trigger_id:
- raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
- return await self._delete(
- path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerDeleteResponse,
- )
-
- async def fire(
- self,
- 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,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> TriggerFireResponse:
- """
- Invoke a custom trigger directly with an arbitrary JSON payload.
-
- Fan-out: a trigger may be referenced by multiple flows (workflows). Firing it
- enqueues one execution per enabled, non-deleted flow attached to this trigger,
- each receiving the same payload. The `enqueuedCount` in the response reports how
- many were enqueued (0 if no flows are attached, or if all matching flows are
- gated by a cooldown).
-
- Payload validation:
-
- - If the trigger has a `customPayloadSchema`, the payload is validated against
- it (JSON Schema via AJV).
- - If no schema is configured, the payload only needs to be a JSON object — any
- keys and values are accepted.
-
- Only triggers with `activation = "custom"` can be fired through this endpoint;
- event and schedule triggers return 409.
-
- Args:
- payload: Arbitrary JSON object forwarded to every flow attached to this trigger.
- 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
-
- extra_body: Add additional JSON properties to the request
-
- timeout: Override the client-level default timeout for this request, in seconds
- """
- if not trigger_id:
- 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,
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=TriggerFireResponse,
- )
-
-
-class TriggersResourceWithRawResponse:
- def __init__(self, triggers: TriggersResource) -> None:
- self._triggers = triggers
-
- self.create = to_raw_response_wrapper(
- triggers.create,
- )
- self.retrieve = to_raw_response_wrapper(
- triggers.retrieve,
- )
- self.update = to_raw_response_wrapper(
- triggers.update,
- )
- self.list = to_raw_response_wrapper(
- triggers.list,
- )
- self.delete = to_raw_response_wrapper(
- triggers.delete,
- )
- self.fire = to_raw_response_wrapper(
- triggers.fire,
- )
-
-
-class AsyncTriggersResourceWithRawResponse:
- def __init__(self, triggers: AsyncTriggersResource) -> None:
- self._triggers = triggers
-
- self.create = async_to_raw_response_wrapper(
- triggers.create,
- )
- self.retrieve = async_to_raw_response_wrapper(
- triggers.retrieve,
- )
- self.update = async_to_raw_response_wrapper(
- triggers.update,
- )
- self.list = async_to_raw_response_wrapper(
- triggers.list,
- )
- self.delete = async_to_raw_response_wrapper(
- triggers.delete,
- )
- self.fire = async_to_raw_response_wrapper(
- triggers.fire,
- )
-
-
-class TriggersResourceWithStreamingResponse:
- def __init__(self, triggers: TriggersResource) -> None:
- self._triggers = triggers
-
- self.create = to_streamed_response_wrapper(
- triggers.create,
- )
- self.retrieve = to_streamed_response_wrapper(
- triggers.retrieve,
- )
- self.update = to_streamed_response_wrapper(
- triggers.update,
- )
- self.list = to_streamed_response_wrapper(
- triggers.list,
- )
- self.delete = to_streamed_response_wrapper(
- triggers.delete,
- )
- self.fire = to_streamed_response_wrapper(
- triggers.fire,
- )
-
-
-class AsyncTriggersResourceWithStreamingResponse:
- def __init__(self, triggers: AsyncTriggersResource) -> None:
- self._triggers = triggers
-
- self.create = async_to_streamed_response_wrapper(
- triggers.create,
- )
- self.retrieve = async_to_streamed_response_wrapper(
- triggers.retrieve,
- )
- self.update = async_to_streamed_response_wrapper(
- triggers.update,
- )
- self.list = async_to_streamed_response_wrapper(
- triggers.list,
- )
- self.delete = async_to_streamed_response_wrapper(
- triggers.delete,
- )
- self.fire = async_to_streamed_response_wrapper(
- triggers.fire,
- )
diff --git a/src/mobilerun_sdk/resources/workflows/workflows.py b/src/mobilerun_sdk/resources/workflows/workflows.py
deleted file mode 100644
index 75a9afa..0000000
--- a/src/mobilerun_sdk/resources/workflows/workflows.py
+++ /dev/null
@@ -1,326 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from .secrets import (
- SecretsResource,
- AsyncSecretsResource,
- SecretsResourceWithRawResponse,
- AsyncSecretsResourceWithRawResponse,
- SecretsResourceWithStreamingResponse,
- AsyncSecretsResourceWithStreamingResponse,
-)
-from .triggers import (
- TriggersResource,
- AsyncTriggersResource,
- TriggersResourceWithRawResponse,
- AsyncTriggersResourceWithRawResponse,
- TriggersResourceWithStreamingResponse,
- AsyncTriggersResourceWithStreamingResponse,
-)
-from ..._compat import cached_property
-from .timezones import (
- TimezonesResource,
- AsyncTimezonesResource,
- TimezonesResourceWithRawResponse,
- AsyncTimezonesResourceWithRawResponse,
- TimezonesResourceWithStreamingResponse,
- AsyncTimezonesResourceWithStreamingResponse,
-)
-from .executions import (
- ExecutionsResource,
- AsyncExecutionsResource,
- ExecutionsResourceWithRawResponse,
- AsyncExecutionsResourceWithRawResponse,
- ExecutionsResourceWithStreamingResponse,
- AsyncExecutionsResourceWithStreamingResponse,
-)
-from ..._resource import SyncAPIResource, AsyncAPIResource
-from .flows.flows import (
- FlowsResource,
- AsyncFlowsResource,
- FlowsResourceWithRawResponse,
- AsyncFlowsResourceWithRawResponse,
- FlowsResourceWithStreamingResponse,
- AsyncFlowsResourceWithStreamingResponse,
-)
-from .events.events import (
- EventsResource,
- AsyncEventsResource,
- EventsResourceWithRawResponse,
- AsyncEventsResourceWithRawResponse,
- EventsResourceWithStreamingResponse,
- AsyncEventsResourceWithStreamingResponse,
-)
-from .action_catalog import (
- ActionCatalogResource,
- AsyncActionCatalogResource,
- ActionCatalogResourceWithRawResponse,
- AsyncActionCatalogResourceWithRawResponse,
- ActionCatalogResourceWithStreamingResponse,
- AsyncActionCatalogResourceWithStreamingResponse,
-)
-from .actions.actions import (
- ActionsResource,
- AsyncActionsResource,
- ActionsResourceWithRawResponse,
- AsyncActionsResourceWithRawResponse,
- ActionsResourceWithStreamingResponse,
- AsyncActionsResourceWithStreamingResponse,
-)
-
-__all__ = ["WorkflowsResource", "AsyncWorkflowsResource"]
-
-
-class WorkflowsResource(SyncAPIResource):
- @cached_property
- def triggers(self) -> TriggersResource:
- return TriggersResource(self._client)
-
- @cached_property
- def action_catalog(self) -> ActionCatalogResource:
- return ActionCatalogResource(self._client)
-
- @cached_property
- def actions(self) -> ActionsResource:
- return ActionsResource(self._client)
-
- @cached_property
- def flows(self) -> FlowsResource:
- return FlowsResource(self._client)
-
- @cached_property
- def events(self) -> EventsResource:
- return EventsResource(self._client)
-
- @cached_property
- def executions(self) -> ExecutionsResource:
- return ExecutionsResource(self._client)
-
- @cached_property
- 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:
- """
- 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 WorkflowsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> WorkflowsResourceWithStreamingResponse:
- """
- 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 WorkflowsResourceWithStreamingResponse(self)
-
-
-class AsyncWorkflowsResource(AsyncAPIResource):
- @cached_property
- def triggers(self) -> AsyncTriggersResource:
- return AsyncTriggersResource(self._client)
-
- @cached_property
- def action_catalog(self) -> AsyncActionCatalogResource:
- return AsyncActionCatalogResource(self._client)
-
- @cached_property
- def actions(self) -> AsyncActionsResource:
- return AsyncActionsResource(self._client)
-
- @cached_property
- def flows(self) -> AsyncFlowsResource:
- return AsyncFlowsResource(self._client)
-
- @cached_property
- def events(self) -> AsyncEventsResource:
- return AsyncEventsResource(self._client)
-
- @cached_property
- def executions(self) -> AsyncExecutionsResource:
- return AsyncExecutionsResource(self._client)
-
- @cached_property
- 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:
- """
- 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 AsyncWorkflowsResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncWorkflowsResourceWithStreamingResponse:
- """
- 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 AsyncWorkflowsResourceWithStreamingResponse(self)
-
-
-class WorkflowsResourceWithRawResponse:
- def __init__(self, workflows: WorkflowsResource) -> None:
- self._workflows = workflows
-
- @cached_property
- def triggers(self) -> TriggersResourceWithRawResponse:
- return TriggersResourceWithRawResponse(self._workflows.triggers)
-
- @cached_property
- def action_catalog(self) -> ActionCatalogResourceWithRawResponse:
- return ActionCatalogResourceWithRawResponse(self._workflows.action_catalog)
-
- @cached_property
- def actions(self) -> ActionsResourceWithRawResponse:
- return ActionsResourceWithRawResponse(self._workflows.actions)
-
- @cached_property
- def flows(self) -> FlowsResourceWithRawResponse:
- return FlowsResourceWithRawResponse(self._workflows.flows)
-
- @cached_property
- def events(self) -> EventsResourceWithRawResponse:
- return EventsResourceWithRawResponse(self._workflows.events)
-
- @cached_property
- def executions(self) -> ExecutionsResourceWithRawResponse:
- return ExecutionsResourceWithRawResponse(self._workflows.executions)
-
- @cached_property
- 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:
- self._workflows = workflows
-
- @cached_property
- def triggers(self) -> AsyncTriggersResourceWithRawResponse:
- return AsyncTriggersResourceWithRawResponse(self._workflows.triggers)
-
- @cached_property
- def action_catalog(self) -> AsyncActionCatalogResourceWithRawResponse:
- return AsyncActionCatalogResourceWithRawResponse(self._workflows.action_catalog)
-
- @cached_property
- def actions(self) -> AsyncActionsResourceWithRawResponse:
- return AsyncActionsResourceWithRawResponse(self._workflows.actions)
-
- @cached_property
- def flows(self) -> AsyncFlowsResourceWithRawResponse:
- return AsyncFlowsResourceWithRawResponse(self._workflows.flows)
-
- @cached_property
- def events(self) -> AsyncEventsResourceWithRawResponse:
- return AsyncEventsResourceWithRawResponse(self._workflows.events)
-
- @cached_property
- def executions(self) -> AsyncExecutionsResourceWithRawResponse:
- return AsyncExecutionsResourceWithRawResponse(self._workflows.executions)
-
- @cached_property
- 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:
- self._workflows = workflows
-
- @cached_property
- def triggers(self) -> TriggersResourceWithStreamingResponse:
- return TriggersResourceWithStreamingResponse(self._workflows.triggers)
-
- @cached_property
- def action_catalog(self) -> ActionCatalogResourceWithStreamingResponse:
- return ActionCatalogResourceWithStreamingResponse(self._workflows.action_catalog)
-
- @cached_property
- def actions(self) -> ActionsResourceWithStreamingResponse:
- return ActionsResourceWithStreamingResponse(self._workflows.actions)
-
- @cached_property
- def flows(self) -> FlowsResourceWithStreamingResponse:
- return FlowsResourceWithStreamingResponse(self._workflows.flows)
-
- @cached_property
- def events(self) -> EventsResourceWithStreamingResponse:
- return EventsResourceWithStreamingResponse(self._workflows.events)
-
- @cached_property
- def executions(self) -> ExecutionsResourceWithStreamingResponse:
- return ExecutionsResourceWithStreamingResponse(self._workflows.executions)
-
- @cached_property
- 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:
- self._workflows = workflows
-
- @cached_property
- def triggers(self) -> AsyncTriggersResourceWithStreamingResponse:
- return AsyncTriggersResourceWithStreamingResponse(self._workflows.triggers)
-
- @cached_property
- def action_catalog(self) -> AsyncActionCatalogResourceWithStreamingResponse:
- return AsyncActionCatalogResourceWithStreamingResponse(self._workflows.action_catalog)
-
- @cached_property
- def actions(self) -> AsyncActionsResourceWithStreamingResponse:
- return AsyncActionsResourceWithStreamingResponse(self._workflows.actions)
-
- @cached_property
- def flows(self) -> AsyncFlowsResourceWithStreamingResponse:
- return AsyncFlowsResourceWithStreamingResponse(self._workflows.flows)
-
- @cached_property
- def events(self) -> AsyncEventsResourceWithStreamingResponse:
- return AsyncEventsResourceWithStreamingResponse(self._workflows.events)
-
- @cached_property
- def executions(self) -> AsyncExecutionsResourceWithStreamingResponse:
- return AsyncExecutionsResourceWithStreamingResponse(self._workflows.executions)
-
- @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/__init__.py b/src/mobilerun_sdk/types/__init__.py
index 47250ab..de028e7 100644
--- a/src/mobilerun_sdk/types/__init__.py
+++ b/src/mobilerun_sdk/types/__init__.py
@@ -4,7 +4,6 @@
from . import devices
from .. import _compat
-from .flow import Flow as Flow
from .task import Task as Task
from .device import Device as Device
from .shared import (
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
deleted file mode 100644
index 908b874..0000000
--- a/src/mobilerun_sdk/types/flow.py
+++ /dev/null
@@ -1,46 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from .._models import BaseModel
-
-__all__ = ["Flow"]
-
-
-class Flow(BaseModel):
- id: str
-
- blocked_at: Optional[str] = FieldInfo(alias="blockedAt", default=None)
-
- consecutive_failures: int = FieldInfo(alias="consecutiveFailures")
-
- cooldown_scope: Literal["flow", "device"] = FieldInfo(alias="cooldownScope")
-
- cooldown_seconds: Optional[int] = FieldInfo(alias="cooldownSeconds", default=None)
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- description: Optional[str] = None
-
- 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"]
- ] = FieldInfo(alias="lastFailureCode", default=None)
-
- last_triggered_at: Optional[str] = FieldInfo(alias="lastTriggeredAt", default=None)
-
- name: str
-
- status: Literal["healthy", "failing", "blocked"]
-
- trigger_id: str = FieldInfo(alias="triggerId")
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
diff --git a/src/mobilerun_sdk/types/workflows/__init__.py b/src/mobilerun_sdk/types/workflows/__init__.py
index 89853e2..f8ee8b1 100644
--- a/src/mobilerun_sdk/types/workflows/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/__init__.py
@@ -1,56 +1,3 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
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
-from .action_list_params import ActionListParams as ActionListParams
-from .flow_create_params import FlowCreateParams as FlowCreateParams
-from .flow_list_response import FlowListResponse as FlowListResponse
-from .flow_update_params import FlowUpdateParams as FlowUpdateParams
-from .event_ingest_params import EventIngestParams as EventIngestParams
-from .flow_clone_response import FlowCloneResponse as FlowCloneResponse
-from .trigger_fire_params import TriggerFireParams as TriggerFireParams
-from .trigger_list_params import TriggerListParams as TriggerListParams
-from .action_catalog_entry import ActionCatalogEntry as ActionCatalogEntry
-from .action_create_params import ActionCreateParams as ActionCreateParams
-from .action_list_response import ActionListResponse as ActionListResponse
-from .action_update_params import ActionUpdateParams as ActionUpdateParams
-from .event_dry_run_params import EventDryRunParams as EventDryRunParams
-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
-from .trigger_create_params import TriggerCreateParams as TriggerCreateParams
-from .trigger_fire_response import TriggerFireResponse as TriggerFireResponse
-from .trigger_list_response import TriggerListResponse as TriggerListResponse
-from .trigger_update_params import TriggerUpdateParams as TriggerUpdateParams
-from .action_create_response import ActionCreateResponse as ActionCreateResponse
-from .action_delete_response import ActionDeleteResponse as ActionDeleteResponse
-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
-from .trigger_delete_response import TriggerDeleteResponse as TriggerDeleteResponse
-from .trigger_update_response import TriggerUpdateResponse as TriggerUpdateResponse
-from .action_retrieve_response import ActionRetrieveResponse as ActionRetrieveResponse
-from .trigger_retrieve_response import TriggerRetrieveResponse as TriggerRetrieveResponse
-from .action_catalog_list_params import ActionCatalogListParams as ActionCatalogListParams
-from .execution_retrieve_response import ExecutionRetrieveResponse as ExecutionRetrieveResponse
-from .flow_action_overrides_param import FlowActionOverridesParam as FlowActionOverridesParam
-from .action_catalog_list_response import ActionCatalogListResponse as ActionCatalogListResponse
-from .execution_get_metrics_params import ExecutionGetMetricsParams as ExecutionGetMetricsParams
-from .flow_child_action_input_param import FlowChildActionInputParam as FlowChildActionInputParam
-from .execution_get_metrics_response import ExecutionGetMetricsResponse as ExecutionGetMetricsResponse
-from .action_catalog_retrieve_response import ActionCatalogRetrieveResponse as ActionCatalogRetrieveResponse
diff --git a/src/mobilerun_sdk/types/workflows/action.py b/src/mobilerun_sdk/types/workflows/action.py
deleted file mode 100644
index fb111f1..0000000
--- a/src/mobilerun_sdk/types/workflows/action.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["Action"]
-
-
-class Action(BaseModel):
- id: str
-
- catalog_entry_id: str = FieldInfo(alias="catalogEntryId")
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- description: Optional[str] = None
-
- is_async: bool = FieldInfo(alias="isAsync")
-
- method: str
-
- name: str
-
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
-
- params: Optional[object] = None
-
- params_schema: Optional[object] = FieldInfo(alias="paramsSchema", default=None)
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_entry.py b/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
deleted file mode 100644
index 4eb711f..0000000
--- a/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["ActionCatalogEntry"]
-
-
-class ActionCatalogEntry(BaseModel):
- id: str
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- description: Optional[str] = None
-
- is_async: bool = FieldInfo(alias="isAsync")
-
- method: str
-
- name: str
-
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- params_schema: Optional[object] = FieldInfo(alias="paramsSchema", default=None)
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_list_params.py b/src/mobilerun_sdk/types/workflows/action_catalog_list_params.py
deleted file mode 100644
index 4e756a9..0000000
--- a/src/mobilerun_sdk/types/workflows/action_catalog_list_params.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["ActionCatalogListParams"]
-
-
-class ActionCatalogListParams(TypedDict, total=False):
- page: int
-
- page_size: Annotated[int, PropertyInfo(alias="pageSize")]
-
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_list_response.py b/src/mobilerun_sdk/types/workflows/action_catalog_list_response.py
deleted file mode 100644
index 967cfd0..0000000
--- a/src/mobilerun_sdk/types/workflows/action_catalog_list_response.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ..._models import BaseModel
-from ..shared.pagination import Pagination
-from .action_catalog_entry import ActionCatalogEntry
-
-__all__ = ["ActionCatalogListResponse"]
-
-
-class ActionCatalogListResponse(BaseModel):
- items: List[ActionCatalogEntry]
-
- pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py b/src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py
deleted file mode 100644
index 81d1b5f..0000000
--- a/src/mobilerun_sdk/types/workflows/action_catalog_retrieve_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 .action_catalog_entry import ActionCatalogEntry
-
-__all__ = ["ActionCatalogRetrieveResponse"]
-
-
-class ActionCatalogRetrieveResponse(BaseModel):
- data: ActionCatalogEntry
diff --git a/src/mobilerun_sdk/types/workflows/action_create_params.py b/src/mobilerun_sdk/types/workflows/action_create_params.py
deleted file mode 100644
index b85ffed..0000000
--- a/src/mobilerun_sdk/types/workflows/action_create_params.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["ActionCreateParams"]
-
-
-class ActionCreateParams(TypedDict, total=False):
- catalog_entry_id: Required[Annotated[str, PropertyInfo(alias="catalogEntryId")]]
-
- name: Required[str]
-
- description: str
-
- params: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/action_create_response.py b/src/mobilerun_sdk/types/workflows/action_create_response.py
deleted file mode 100644
index acd7aa5..0000000
--- a/src/mobilerun_sdk/types/workflows/action_create_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .action import Action
-from ..._models import BaseModel
-
-__all__ = ["ActionCreateResponse"]
-
-
-class ActionCreateResponse(BaseModel):
- data: Action
diff --git a/src/mobilerun_sdk/types/workflows/action_delete_response.py b/src/mobilerun_sdk/types/workflows/action_delete_response.py
deleted file mode 100644
index 157bb1f..0000000
--- a/src/mobilerun_sdk/types/workflows/action_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__ = ["ActionDeleteResponse"]
-
-
-class ActionDeleteResponse(BaseModel):
- message: str
diff --git a/src/mobilerun_sdk/types/workflows/action_list_params.py b/src/mobilerun_sdk/types/workflows/action_list_params.py
deleted file mode 100644
index 9873843..0000000
--- a/src/mobilerun_sdk/types/workflows/action_list_params.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["ActionListParams"]
-
-
-class ActionListParams(TypedDict, total=False):
- order_by: Annotated[Literal["name", "createdAt", "updatedAt"], PropertyInfo(alias="orderBy")]
-
- order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
-
- page: int
-
- page_size: Annotated[int, PropertyInfo(alias="pageSize")]
-
- search: str
-
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
diff --git a/src/mobilerun_sdk/types/workflows/action_list_response.py b/src/mobilerun_sdk/types/workflows/action_list_response.py
deleted file mode 100644
index 2d5e996..0000000
--- a/src/mobilerun_sdk/types/workflows/action_list_response.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from .action import Action
-from ..._models import BaseModel
-from ..shared.pagination import Pagination
-
-__all__ = ["ActionListResponse"]
-
-
-class ActionListResponse(BaseModel):
- items: List[Action]
-
- pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/action_retrieve_response.py b/src/mobilerun_sdk/types/workflows/action_retrieve_response.py
deleted file mode 100644
index 7dc33b0..0000000
--- a/src/mobilerun_sdk/types/workflows/action_retrieve_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .action import Action
-from ..._models import BaseModel
-
-__all__ = ["ActionRetrieveResponse"]
-
-
-class ActionRetrieveResponse(BaseModel):
- data: Action
diff --git a/src/mobilerun_sdk/types/workflows/action_update_params.py b/src/mobilerun_sdk/types/workflows/action_update_params.py
deleted file mode 100644
index 4644bac..0000000
--- a/src/mobilerun_sdk/types/workflows/action_update_params.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import TypedDict
-
-__all__ = ["ActionUpdateParams"]
-
-
-class ActionUpdateParams(TypedDict, total=False):
- description: str
-
- name: str
-
- params: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/action_update_response.py b/src/mobilerun_sdk/types/workflows/action_update_response.py
deleted file mode 100644
index 4d6b872..0000000
--- a/src/mobilerun_sdk/types/workflows/action_update_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from .action import Action
-from ..._models import BaseModel
-
-__all__ = ["ActionUpdateResponse"]
-
-
-class ActionUpdateResponse(BaseModel):
- data: Action
diff --git a/src/mobilerun_sdk/types/workflows/actions/__init__.py b/src/mobilerun_sdk/types/workflows/actions/__init__.py
index 57284e5..f8ee8b1 100644
--- a/src/mobilerun_sdk/types/workflows/actions/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/actions/__init__.py
@@ -1,6 +1,3 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
-
-from .service_list_response import ServiceListResponse as ServiceListResponse
-from .service_list_methods_response import ServiceListMethodsResponse as ServiceListMethodsResponse
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
deleted file mode 100644
index 0ebef39..0000000
--- a/src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ...._models import BaseModel
-
-__all__ = ["ServiceListMethodsResponse", "Data", "DataParam"]
-
-
-class DataParam(BaseModel):
- description: str
-
- name: str
-
- required: bool
-
- type: Literal["string", "number", "boolean", "object", "array"]
-
- default: Optional[object] = None
-
- example: Optional[object] = None
-
-
-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/actions/service_list_response.py b/src/mobilerun_sdk/types/workflows/actions/service_list_response.py
deleted file mode 100644
index e8e712c..0000000
--- a/src/mobilerun_sdk/types/workflows/actions/service_list_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ...._models import BaseModel
-
-__all__ = ["ServiceListResponse"]
-
-
-class ServiceListResponse(BaseModel):
- data: List[str]
diff --git a/src/mobilerun_sdk/types/workflows/event_dry_run_params.py b/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
deleted file mode 100644
index c55498e..0000000
--- a/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["EventDryRunParams"]
-
-
-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
deleted file mode 100644
index 13df857..0000000
--- a/src/mobilerun_sdk/types/workflows/event_dry_run_response.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, List, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..flow import Flow
-from ..._models import BaseModel
-
-__all__ = [
- "EventDryRunResponse",
- "Data",
- "DataMatchedFlow",
- "DataMatchedFlowAction",
- "DataMatchedFlowTrigger",
- "DataMatchedFlowTriggerScheduleRule",
- "DataValidation",
- "DataValidationError",
-]
-
-
-class DataMatchedFlowAction(BaseModel):
- continue_on_error: bool = FieldInfo(alias="continueOnError")
-
- method: str
-
- name: str
-
- service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
-
- device_id: Optional[str] = FieldInfo(alias="deviceId", default=None)
-
- params: Optional[Dict[str, Optional[object]]] = None
-
-
-class DataMatchedFlowTriggerScheduleRule(BaseModel):
- type: Literal["once", "cron", "recurring"]
-
- date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
- """ISO 8601 datetime (for type=once)"""
-
- expression: Optional[str] = None
- """Cron expression (for type=cron)"""
-
- rrule: Optional[str] = None
- """RRULE string (for type=recurring)"""
-
-
-class DataMatchedFlowTrigger(BaseModel):
- id: str
-
- activation: Literal["event", "schedule", "custom"]
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
-
- description: Optional[str] = None
-
- event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
-
- name: str
-
- schedule_rule: Optional[DataMatchedFlowTriggerScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
-
- timezone: Optional[str] = None
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
-
- conditions: Optional[object] = None
-
- next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
-
-
-class DataMatchedFlow(BaseModel):
- actions: List[DataMatchedFlowAction]
-
- flow: Flow
-
- trigger: DataMatchedFlowTrigger
-
-
-class DataValidationError(BaseModel):
- field: str
-
- message: str
-
-
-class DataValidation(BaseModel):
- valid: bool
-
- errors: Optional[List[DataValidationError]] = None
-
-
-class Data(BaseModel):
- matched_flows: List[DataMatchedFlow] = FieldInfo(alias="matchedFlows")
-
- validation: DataValidation
-
-
-class EventDryRunResponse(BaseModel):
- data: Data
diff --git a/src/mobilerun_sdk/types/workflows/event_ingest_params.py b/src/mobilerun_sdk/types/workflows/event_ingest_params.py
deleted file mode 100644
index d8edf19..0000000
--- a/src/mobilerun_sdk/types/workflows/event_ingest_params.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["EventIngestParams"]
-
-
-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/event_ingest_response.py b/src/mobilerun_sdk/types/workflows/event_ingest_response.py
deleted file mode 100644
index 6136565..0000000
--- a/src/mobilerun_sdk/types/workflows/event_ingest_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["EventIngestResponse"]
-
-
-class EventIngestResponse(BaseModel):
- event_id: str = FieldInfo(alias="eventId")
diff --git a/src/mobilerun_sdk/types/workflows/events/__init__.py b/src/mobilerun_sdk/types/workflows/events/__init__.py
index 32807f2..f8ee8b1 100644
--- a/src/mobilerun_sdk/types/workflows/events/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/events/__init__.py
@@ -1,8 +1,3 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
-
-from .catalog_list_params import CatalogListParams as CatalogListParams
-from .catalog_list_response import CatalogListResponse as CatalogListResponse
-from .catalog_register_params import CatalogRegisterParams as CatalogRegisterParams
-from .catalog_register_response import CatalogRegisterResponse as CatalogRegisterResponse
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_list_params.py b/src/mobilerun_sdk/types/workflows/events/catalog_list_params.py
deleted file mode 100644
index ca0def1..0000000
--- a/src/mobilerun_sdk/types/workflows/events/catalog_list_params.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ...._utils import PropertyInfo
-
-__all__ = ["CatalogListParams"]
-
-
-class CatalogListParams(TypedDict, total=False):
- page: int
-
- page_size: Annotated[int, PropertyInfo(alias="pageSize")]
-
- source: Literal["device", "system", "webhook"]
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_list_response.py b/src/mobilerun_sdk/types/workflows/events/catalog_list_response.py
deleted file mode 100644
index 86c96b2..0000000
--- a/src/mobilerun_sdk/types/workflows/events/catalog_list_response.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List, Optional
-
-from pydantic import Field as FieldInfo
-
-from ...._models import BaseModel
-from ...shared.pagination import Pagination
-
-__all__ = ["CatalogListResponse", "Item"]
-
-
-class Item(BaseModel):
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- description: Optional[str] = None
-
- event_type: str = FieldInfo(alias="eventType")
-
- label: str
-
- source: Optional[str] = None
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- payload_schema: Optional[object] = FieldInfo(alias="payloadSchema", default=None)
-
-
-class CatalogListResponse(BaseModel):
- items: List[Item]
-
- pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_register_params.py b/src/mobilerun_sdk/types/workflows/events/catalog_register_params.py
deleted file mode 100644
index da648c3..0000000
--- a/src/mobilerun_sdk/types/workflows/events/catalog_register_params.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Iterable, Optional
-from typing_extensions import Literal, Required, Annotated, TypedDict
-
-from ...._utils import PropertyInfo
-
-__all__ = ["CatalogRegisterParams", "Event"]
-
-
-class CatalogRegisterParams(TypedDict, total=False):
- events: Required[Iterable[Event]]
-
-
-class Event(TypedDict, total=False):
- event_type: Required[Annotated[str, PropertyInfo(alias="eventType")]]
-
- label: Required[str]
-
- description: str
-
- payload_schema: Annotated[Dict[str, Optional[object]], PropertyInfo(alias="payloadSchema")]
-
- source: Literal["device", "system", "webhook"]
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_register_response.py b/src/mobilerun_sdk/types/workflows/events/catalog_register_response.py
deleted file mode 100644
index 116b6cc..0000000
--- a/src/mobilerun_sdk/types/workflows/events/catalog_register_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__ = ["CatalogRegisterResponse"]
-
-
-class CatalogRegisterResponse(BaseModel):
- message: str
diff --git a/src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py b/src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py
deleted file mode 100644
index b5d8cda..0000000
--- a/src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Optional
-from typing_extensions import Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["ExecutionGetMetricsParams"]
-
-
-class ExecutionGetMetricsParams(TypedDict, total=False):
- flow_id: Annotated[str, PropertyInfo(alias="flowId")]
-
- from_: Annotated[Optional[str], PropertyInfo(alias="from")]
-
- to: Optional[str]
-
- trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py b/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
deleted file mode 100644
index 774f398..0000000
--- a/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
+++ /dev/null
@@ -1,33 +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__ = ["ExecutionGetMetricsResponse", "Data", "DataByStatus"]
-
-
-class DataByStatus(BaseModel):
- failed: int
-
- pending: int
-
- running: int
-
- success: int
-
-
-class Data(BaseModel):
- avg_duration_ms: Optional[float] = FieldInfo(alias="avgDurationMs", default=None)
-
- by_status: DataByStatus = FieldInfo(alias="byStatus")
-
- last_execution_at: Optional[str] = FieldInfo(alias="lastExecutionAt", default=None)
-
- total: int
-
-
-class ExecutionGetMetricsResponse(BaseModel):
- data: Data
diff --git a/src/mobilerun_sdk/types/workflows/execution_list_params.py b/src/mobilerun_sdk/types/workflows/execution_list_params.py
deleted file mode 100644
index 2ffa5c9..0000000
--- a/src/mobilerun_sdk/types/workflows/execution_list_params.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Optional
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["ExecutionListParams"]
-
-
-class ExecutionListParams(TypedDict, total=False):
- flow_id: Annotated[str, PropertyInfo(alias="flowId")]
-
- from_: Annotated[Optional[str], PropertyInfo(alias="from")]
-
- order_by: Annotated[Literal["startedAt", "finishedAt", "status"], PropertyInfo(alias="orderBy")]
-
- order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
-
- page: int
-
- page_size: Annotated[int, PropertyInfo(alias="pageSize")]
-
- search: str
-
- status: Literal["pending", "running", "success", "failed"]
-
- to: Optional[str]
-
- trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/execution_list_response.py b/src/mobilerun_sdk/types/workflows/execution_list_response.py
deleted file mode 100644
index eddf7b3..0000000
--- a/src/mobilerun_sdk/types/workflows/execution_list_response.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ..._models import BaseModel
-from .flow_execution import FlowExecution
-from ..shared.pagination import Pagination
-
-__all__ = ["ExecutionListResponse"]
-
-
-class ExecutionListResponse(BaseModel):
- items: List[FlowExecution]
-
- pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/execution_retrieve_response.py b/src/mobilerun_sdk/types/workflows/execution_retrieve_response.py
deleted file mode 100644
index 6892a2e..0000000
--- a/src/mobilerun_sdk/types/workflows/execution_retrieve_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 .flow_execution import FlowExecution
-
-__all__ = ["ExecutionRetrieveResponse"]
-
-
-class ExecutionRetrieveResponse(BaseModel):
- data: FlowExecution
diff --git a/src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py b/src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py
deleted file mode 100644
index 5f03d3a..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Optional
-from typing_extensions import TypedDict
-
-__all__ = ["FlowActionOverridesParam"]
-
-
-class FlowActionOverridesParam(TypedDict, total=False):
- params: Dict[str, Optional[object]]
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
deleted file mode 100644
index 9c883c4..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Optional
-from typing_extensions import Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-from .flow_action_overrides_param import FlowActionOverridesParam
-
-__all__ = ["FlowChildActionInputParam"]
-
-
-class FlowChildActionInputParam(TypedDict, total=False):
- action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
-
- position: Required[int]
-
- 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
deleted file mode 100644
index e513de2..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_clone_params.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import TypedDict
-
-__all__ = ["FlowCloneParams"]
-
-
-class FlowCloneParams(TypedDict, total=False):
- name: str
diff --git a/src/mobilerun_sdk/types/workflows/flow_clone_response.py b/src/mobilerun_sdk/types/workflows/flow_clone_response.py
deleted file mode 100644
index 57a8637..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_clone_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..flow import Flow
-from ..._models import BaseModel
-
-__all__ = ["FlowCloneResponse"]
-
-
-class FlowCloneResponse(BaseModel):
- data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_create_params.py b/src/mobilerun_sdk/types/workflows/flow_create_params.py
deleted file mode 100644
index 1dcdd12..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_create_params.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Iterable, Optional
-from typing_extensions import Literal, Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-from .flow_action_overrides_param import FlowActionOverridesParam
-from .flow_child_action_input_param import FlowChildActionInputParam
-
-__all__ = ["FlowCreateParams", "Action"]
-
-
-class FlowCreateParams(TypedDict, total=False):
- actions: Required[Iterable[Action]]
-
- name: Required[str]
-
- trigger_id: Required[Annotated[str, PropertyInfo(alias="triggerId")]]
-
- cooldown_scope: Annotated[Literal["flow", "device"], PropertyInfo(alias="cooldownScope")]
-
- cooldown_seconds: Annotated[Optional[int], PropertyInfo(alias="cooldownSeconds")]
-
- description: str
-
- enabled: bool
-
-
-class Action(TypedDict, total=False):
- action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
-
- position: Required[int]
-
- children: Iterable[FlowChildActionInputParam]
-
- 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_create_response.py b/src/mobilerun_sdk/types/workflows/flow_create_response.py
deleted file mode 100644
index f9c5fea..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_create_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..flow import Flow
-from ..._models import BaseModel
-
-__all__ = ["FlowCreateResponse"]
-
-
-class FlowCreateResponse(BaseModel):
- data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_delete_response.py b/src/mobilerun_sdk/types/workflows/flow_delete_response.py
deleted file mode 100644
index a6243e6..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_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__ = ["FlowDeleteResponse"]
-
-
-class FlowDeleteResponse(BaseModel):
- message: str
diff --git a/src/mobilerun_sdk/types/workflows/flow_execution.py b/src/mobilerun_sdk/types/workflows/flow_execution.py
deleted file mode 100644
index ba28012..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_execution.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["FlowExecution"]
-
-
-class FlowExecution(BaseModel):
- id: str
-
- error: Optional[str] = None
-
- event_id: Optional[str] = FieldInfo(alias="eventId", default=None)
-
- finished_at: Optional[str] = FieldInfo(alias="finishedAt", default=None)
-
- flow_id: str = FieldInfo(alias="flowId")
-
- flow_name: Optional[str] = FieldInfo(alias="flowName", default=None)
-
- started_at: Optional[str] = FieldInfo(alias="startedAt", default=None)
-
- status: Optional[Literal["pending", "running", "success", "failed"]] = None
-
- trigger_id: str = FieldInfo(alias="triggerId")
-
- trigger_name: Optional[str] = FieldInfo(alias="triggerName", default=None)
-
- result: Optional[object] = None
diff --git a/src/mobilerun_sdk/types/workflows/flow_list_params.py b/src/mobilerun_sdk/types/workflows/flow_list_params.py
deleted file mode 100644
index 8f00af0..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_list_params.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import List, Optional
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["FlowListParams"]
-
-
-class FlowListParams(TypedDict, total=False):
- enabled: Optional[bool]
-
- order_by: Annotated[Literal["name", "createdAt", "updatedAt"], PropertyInfo(alias="orderBy")]
-
- order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
-
- page: int
-
- page_size: Annotated[int, PropertyInfo(alias="pageSize")]
-
- search: str
-
- status: List[Literal["healthy", "failing", "blocked"]]
-
- trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/flow_list_response.py b/src/mobilerun_sdk/types/workflows/flow_list_response.py
deleted file mode 100644
index ff0feb8..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_list_response.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ..flow import Flow
-from ..._models import BaseModel
-from ..shared.pagination import Pagination
-
-__all__ = ["FlowListResponse"]
-
-
-class FlowListResponse(BaseModel):
- items: List[Flow]
-
- pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/flow_retrieve_response.py b/src/mobilerun_sdk/types/workflows/flow_retrieve_response.py
deleted file mode 100644
index 0a002a6..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_retrieve_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..flow import Flow
-from ..._models import BaseModel
-
-__all__ = ["FlowRetrieveResponse"]
-
-
-class FlowRetrieveResponse(BaseModel):
- data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_unblock_response.py b/src/mobilerun_sdk/types/workflows/flow_unblock_response.py
deleted file mode 100644
index 3771e29..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_unblock_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..flow import Flow
-from ..._models import BaseModel
-
-__all__ = ["FlowUnblockResponse"]
-
-
-class FlowUnblockResponse(BaseModel):
- data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_update_params.py b/src/mobilerun_sdk/types/workflows/flow_update_params.py
deleted file mode 100644
index 8b29afd..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_update_params.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Optional
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["FlowUpdateParams"]
-
-
-class FlowUpdateParams(TypedDict, total=False):
- cooldown_scope: Annotated[Literal["flow", "device"], PropertyInfo(alias="cooldownScope")]
-
- cooldown_seconds: Annotated[Optional[int], PropertyInfo(alias="cooldownSeconds")]
-
- description: str
-
- enabled: bool
-
- name: str
-
- trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/flow_update_response.py b/src/mobilerun_sdk/types/workflows/flow_update_response.py
deleted file mode 100644
index 8725080..0000000
--- a/src/mobilerun_sdk/types/workflows/flow_update_response.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from ..flow import Flow
-from ..._models import BaseModel
-
-__all__ = ["FlowUpdateResponse"]
-
-
-class FlowUpdateResponse(BaseModel):
- data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flows/__init__.py b/src/mobilerun_sdk/types/workflows/flows/__init__.py
index fa77a33..f8ee8b1 100644
--- a/src/mobilerun_sdk/types/workflows/flows/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/flows/__init__.py
@@ -1,11 +1,3 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
-
-from .flow_action import FlowAction as FlowAction
-from .action_add_params import ActionAddParams as ActionAddParams
-from .action_add_response import ActionAddResponse as ActionAddResponse
-from .action_list_response import ActionListResponse as ActionListResponse
-from .action_replace_params import ActionReplaceParams as ActionReplaceParams
-from .action_remove_response import ActionRemoveResponse as ActionRemoveResponse
-from .action_replace_response import ActionReplaceResponse as ActionReplaceResponse
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_add_params.py b/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
deleted file mode 100644
index 7d71e72..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Iterable, Optional
-from typing_extensions import Required, Annotated, TypedDict
-
-from ...._utils import PropertyInfo
-from ..flow_action_overrides_param import FlowActionOverridesParam
-from ..flow_child_action_input_param import FlowChildActionInputParam
-
-__all__ = ["ActionAddParams"]
-
-
-class ActionAddParams(TypedDict, total=False):
- action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
-
- position: Required[int]
-
- children: Iterable[FlowChildActionInputParam]
-
- 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]
-
- parent_flow_action_id: Annotated[Optional[str], PropertyInfo(alias="parentFlowActionId")]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_add_response.py b/src/mobilerun_sdk/types/workflows/flows/action_add_response.py
deleted file mode 100644
index 03d4e31..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/action_add_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 .flow_action import FlowAction
-
-__all__ = ["ActionAddResponse"]
-
-
-class ActionAddResponse(BaseModel):
- data: FlowAction
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_list_response.py b/src/mobilerun_sdk/types/workflows/flows/action_list_response.py
deleted file mode 100644
index 7f6bd53..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/action_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 .flow_action import FlowAction
-
-__all__ = ["ActionListResponse"]
-
-
-class ActionListResponse(BaseModel):
- data: List[FlowAction]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_remove_response.py b/src/mobilerun_sdk/types/workflows/flows/action_remove_response.py
deleted file mode 100644
index a200db1..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/action_remove_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__ = ["ActionRemoveResponse"]
-
-
-class ActionRemoveResponse(BaseModel):
- message: str
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py b/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
deleted file mode 100644
index 2ae1e95..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Iterable, Optional
-from typing_extensions import Required, Annotated, TypedDict
-
-from ...._utils import PropertyInfo
-from ..flow_action_overrides_param import FlowActionOverridesParam
-from ..flow_child_action_input_param import FlowChildActionInputParam
-
-__all__ = ["ActionReplaceParams", "Action"]
-
-
-class ActionReplaceParams(TypedDict, total=False):
- actions: Required[Iterable[Action]]
-
-
-class Action(TypedDict, total=False):
- action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
-
- position: Required[int]
-
- children: Iterable[FlowChildActionInputParam]
-
- 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_response.py b/src/mobilerun_sdk/types/workflows/flows/action_replace_response.py
deleted file mode 100644
index 2914bfa..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/action_replace_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 .flow_action import FlowAction
-
-__all__ = ["ActionReplaceResponse"]
-
-
-class ActionReplaceResponse(BaseModel):
- data: List[FlowAction]
diff --git a/src/mobilerun_sdk/types/workflows/flows/flow_action.py b/src/mobilerun_sdk/types/workflows/flows/flow_action.py
deleted file mode 100644
index cf83cb4..0000000
--- a/src/mobilerun_sdk/types/workflows/flows/flow_action.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, Optional
-
-from pydantic import Field as FieldInfo
-
-from ...._models import BaseModel
-
-__all__ = ["FlowAction", "Overrides"]
-
-
-class Overrides(BaseModel):
- params: Optional[Dict[str, Optional[object]]] = None
-
-
-class FlowAction(BaseModel):
- id: str
-
- action_id: str = FieldInfo(alias="actionId")
-
- continue_on_error: bool = FieldInfo(alias="continueOnError")
-
- 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)
-
- overrides: Optional[Overrides] = None
-
- parent_flow_action_id: Optional[str] = FieldInfo(alias="parentFlowActionId", default=None)
-
- position: int
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/timezone_list_response.py b/src/mobilerun_sdk/types/workflows/timezone_list_response.py
deleted file mode 100644
index 6e49c63..0000000
--- a/src/mobilerun_sdk/types/workflows/timezone_list_response.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ..._models import BaseModel
-
-__all__ = ["TimezoneListResponse"]
-
-
-class TimezoneListResponse(BaseModel):
- data: List[str]
diff --git a/src/mobilerun_sdk/types/workflows/trigger_create_params.py b/src/mobilerun_sdk/types/workflows/trigger_create_params.py
deleted file mode 100644
index 7d8c4b8..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_create_params.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Iterable
-from typing_extensions import Literal, Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["TriggerCreateParams", "Conditions", "ScheduleRule"]
-
-
-class TriggerCreateParams(TypedDict, total=False):
- activation: Required[Literal["event", "schedule", "custom"]]
-
- name: Required[str]
-
- conditions: Conditions
-
- custom_payload_schema: Annotated[Dict[str, object], PropertyInfo(alias="customPayloadSchema")]
- """Optional JSON Schema for validating payloads sent to this custom trigger"""
-
- description: str
-
- event_type: Annotated[str, PropertyInfo(alias="eventType")]
-
- schedule_rule: Annotated[ScheduleRule, PropertyInfo(alias="scheduleRule")]
-
- timezone: str
-
-
-class Conditions(TypedDict, total=False):
- all: Iterable[object]
-
- any: Iterable[object]
-
-
-class ScheduleRule(TypedDict, total=False):
- type: Required[Literal["once", "cron", "recurring"]]
-
- date_time: Annotated[str, PropertyInfo(alias="dateTime")]
- """ISO 8601 datetime (for type=once)"""
-
- expression: str
- """Cron expression (for type=cron)"""
-
- rrule: str
- """RRULE string (for type=recurring)"""
diff --git a/src/mobilerun_sdk/types/workflows/trigger_create_response.py b/src/mobilerun_sdk/types/workflows/trigger_create_response.py
deleted file mode 100644
index b2073b1..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_create_response.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["TriggerCreateResponse", "Data", "DataScheduleRule"]
-
-
-class DataScheduleRule(BaseModel):
- type: Literal["once", "cron", "recurring"]
-
- date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
- """ISO 8601 datetime (for type=once)"""
-
- expression: Optional[str] = None
- """Cron expression (for type=cron)"""
-
- rrule: Optional[str] = None
- """RRULE string (for type=recurring)"""
-
-
-class Data(BaseModel):
- id: str
-
- activation: Literal["event", "schedule", "custom"]
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- custom_payload_schema: Optional[Dict[str, Optional[object]]] = FieldInfo(alias="customPayloadSchema", default=None)
-
- description: Optional[str] = None
-
- event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
-
- name: str
-
- schedule_rule: DataScheduleRule = FieldInfo(alias="scheduleRule")
-
- timezone: Optional[str] = None
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
-
- conditions: Optional[object] = None
-
- next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
-
-
-class TriggerCreateResponse(BaseModel):
- data: Data
diff --git a/src/mobilerun_sdk/types/workflows/trigger_delete_response.py b/src/mobilerun_sdk/types/workflows/trigger_delete_response.py
deleted file mode 100644
index 5a4cf92..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_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__ = ["TriggerDeleteResponse"]
-
-
-class TriggerDeleteResponse(BaseModel):
- message: str
diff --git a/src/mobilerun_sdk/types/workflows/trigger_fire_params.py b/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
deleted file mode 100644
index 756af49..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict
-from typing_extensions import Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["TriggerFireParams"]
-
-
-class TriggerFireParams(TypedDict, total=False):
- payload: Required[Dict[str, object]]
- """Arbitrary JSON object forwarded to every flow attached to this trigger.
-
- 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/trigger_fire_response.py b/src/mobilerun_sdk/types/workflows/trigger_fire_response.py
deleted file mode 100644
index b0b4951..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_fire_response.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["TriggerFireResponse"]
-
-
-class TriggerFireResponse(BaseModel):
- enqueued_count: int = FieldInfo(alias="enqueuedCount")
- """Number of flow executions enqueued.
-
- May be 0 if no flows are attached to this trigger, or if all attached flows are
- currently in cooldown.
- """
-
- invocation_id: str = FieldInfo(alias="invocationId")
- """Unique ID for this fire invocation.
-
- Job IDs in the execution queue are derived from it (one per enqueued flow).
- """
diff --git a/src/mobilerun_sdk/types/workflows/trigger_list_params.py b/src/mobilerun_sdk/types/workflows/trigger_list_params.py
deleted file mode 100644
index dad1a5f..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_list_params.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import Literal, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["TriggerListParams"]
-
-
-class TriggerListParams(TypedDict, total=False):
- activation: Literal["event", "schedule", "custom"]
-
- event_type: Annotated[str, PropertyInfo(alias="eventType")]
-
- order_by: Annotated[Literal["name", "createdAt", "updatedAt"], PropertyInfo(alias="orderBy")]
-
- order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
-
- page: int
-
- page_size: Annotated[int, PropertyInfo(alias="pageSize")]
-
- search: str
diff --git a/src/mobilerun_sdk/types/workflows/trigger_list_response.py b/src/mobilerun_sdk/types/workflows/trigger_list_response.py
deleted file mode 100644
index 703fd4c..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_list_response.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, List, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-from ..shared.pagination import Pagination
-
-__all__ = ["TriggerListResponse", "Item", "ItemScheduleRule"]
-
-
-class ItemScheduleRule(BaseModel):
- type: Literal["once", "cron", "recurring"]
-
- date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
- """ISO 8601 datetime (for type=once)"""
-
- expression: Optional[str] = None
- """Cron expression (for type=cron)"""
-
- rrule: Optional[str] = None
- """RRULE string (for type=recurring)"""
-
-
-class Item(BaseModel):
- id: str
-
- activation: Literal["event", "schedule", "custom"]
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
-
- description: Optional[str] = None
-
- event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
-
- name: str
-
- schedule_rule: Optional[ItemScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
-
- timezone: Optional[str] = None
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
-
- conditions: Optional[object] = None
-
- next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
-
-
-class TriggerListResponse(BaseModel):
- items: List[Item]
-
- pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py b/src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py
deleted file mode 100644
index fc48aa4..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["TriggerRetrieveResponse", "Data", "DataScheduleRule"]
-
-
-class DataScheduleRule(BaseModel):
- type: Literal["once", "cron", "recurring"]
-
- date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
- """ISO 8601 datetime (for type=once)"""
-
- expression: Optional[str] = None
- """Cron expression (for type=cron)"""
-
- rrule: Optional[str] = None
- """RRULE string (for type=recurring)"""
-
-
-class Data(BaseModel):
- id: str
-
- activation: Literal["event", "schedule", "custom"]
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
-
- description: Optional[str] = None
-
- event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
-
- name: str
-
- schedule_rule: Optional[DataScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
-
- timezone: Optional[str] = None
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
-
- conditions: Optional[object] = None
-
- next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
-
-
-class TriggerRetrieveResponse(BaseModel):
- data: Data
diff --git a/src/mobilerun_sdk/types/workflows/trigger_update_params.py b/src/mobilerun_sdk/types/workflows/trigger_update_params.py
deleted file mode 100644
index ecf86b7..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_update_params.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing import Dict, Iterable, Optional
-from typing_extensions import Literal, Required, Annotated, TypedDict
-
-from ..._utils import PropertyInfo
-
-__all__ = ["TriggerUpdateParams", "Conditions", "ScheduleRule"]
-
-
-class TriggerUpdateParams(TypedDict, total=False):
- activation: Literal["event", "schedule", "custom"]
-
- conditions: Conditions
-
- custom_payload_schema: Annotated[Optional[Dict[str, object]], PropertyInfo(alias="customPayloadSchema")]
- """Optional JSON Schema for validating payloads sent to this custom trigger"""
-
- description: str
-
- event_type: Annotated[str, PropertyInfo(alias="eventType")]
-
- name: str
-
- schedule_rule: Annotated[ScheduleRule, PropertyInfo(alias="scheduleRule")]
-
- timezone: Optional[str]
-
-
-class Conditions(TypedDict, total=False):
- all: Iterable[object]
-
- any: Iterable[object]
-
-
-class ScheduleRule(TypedDict, total=False):
- type: Required[Literal["once", "cron", "recurring"]]
-
- date_time: Annotated[str, PropertyInfo(alias="dateTime")]
- """ISO 8601 datetime (for type=once)"""
-
- expression: str
- """Cron expression (for type=cron)"""
-
- rrule: str
- """RRULE string (for type=recurring)"""
diff --git a/src/mobilerun_sdk/types/workflows/trigger_update_response.py b/src/mobilerun_sdk/types/workflows/trigger_update_response.py
deleted file mode 100644
index a5a9418..0000000
--- a/src/mobilerun_sdk/types/workflows/trigger_update_response.py
+++ /dev/null
@@ -1,55 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import Dict, Optional
-from typing_extensions import Literal
-
-from pydantic import Field as FieldInfo
-
-from ..._models import BaseModel
-
-__all__ = ["TriggerUpdateResponse", "Data", "DataScheduleRule"]
-
-
-class DataScheduleRule(BaseModel):
- type: Literal["once", "cron", "recurring"]
-
- date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
- """ISO 8601 datetime (for type=once)"""
-
- expression: Optional[str] = None
- """Cron expression (for type=cron)"""
-
- rrule: Optional[str] = None
- """RRULE string (for type=recurring)"""
-
-
-class Data(BaseModel):
- id: str
-
- activation: Literal["event", "schedule", "custom"]
-
- created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
-
- custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
-
- description: Optional[str] = None
-
- event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
-
- name: str
-
- schedule_rule: Optional[DataScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
-
- timezone: Optional[str] = None
-
- updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
-
- user_id: str = FieldInfo(alias="userId")
-
- conditions: Optional[object] = None
-
- next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
-
-
-class TriggerUpdateResponse(BaseModel):
- data: Data
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/__init__.py b/tests/api_resources/workflows/__init__.py
deleted file mode 100644
index fd8019a..0000000
--- a/tests/api_resources/workflows/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/actions/__init__.py b/tests/api_resources/workflows/actions/__init__.py
deleted file mode 100644
index fd8019a..0000000
--- a/tests/api_resources/workflows/actions/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/actions/test_services.py b/tests/api_resources/workflows/actions/test_services.py
deleted file mode 100644
index 442a3bd..0000000
--- a/tests/api_resources/workflows/actions/test_services.py
+++ /dev/null
@@ -1,164 +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.actions import ServiceListResponse, ServiceListMethodsResponse
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestServices:
- 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_list(self, client: Mobilerun) -> None:
- service = client.workflows.actions.services.list()
- assert_matches_type(ServiceListResponse, service, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.actions.services.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- service = response.parse()
- assert_matches_type(ServiceListResponse, service, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.actions.services.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- service = response.parse()
- assert_matches_type(ServiceListResponse, service, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_methods(self, client: Mobilerun) -> None:
- service = client.workflows.actions.services.list_methods(
- "x",
- )
- assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list_methods(self, client: Mobilerun) -> None:
- response = client.workflows.actions.services.with_raw_response.list_methods(
- "x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- service = response.parse()
- assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list_methods(self, client: Mobilerun) -> None:
- with client.workflows.actions.services.with_streaming_response.list_methods(
- "x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- service = response.parse()
- assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_list_methods(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `service` but received ''"):
- client.workflows.actions.services.with_raw_response.list_methods(
- "",
- )
-
-
-class TestAsyncServices:
- 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_list(self, async_client: AsyncMobilerun) -> None:
- service = await async_client.workflows.actions.services.list()
- assert_matches_type(ServiceListResponse, service, 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.actions.services.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- service = await response.parse()
- assert_matches_type(ServiceListResponse, service, 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.actions.services.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- service = await response.parse()
- assert_matches_type(ServiceListResponse, service, 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_methods(self, async_client: AsyncMobilerun) -> None:
- service = await async_client.workflows.actions.services.list_methods(
- "x",
- )
- assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_list_methods(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.actions.services.with_raw_response.list_methods(
- "x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- service = await response.parse()
- assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_list_methods(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.actions.services.with_streaming_response.list_methods(
- "x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- service = await response.parse()
- assert_matches_type(ServiceListMethodsResponse, service, 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_list_methods(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `service` but received ''"):
- await async_client.workflows.actions.services.with_raw_response.list_methods(
- "",
- )
diff --git a/tests/api_resources/workflows/events/__init__.py b/tests/api_resources/workflows/events/__init__.py
deleted file mode 100644
index fd8019a..0000000
--- a/tests/api_resources/workflows/events/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/events/test_catalog.py b/tests/api_resources/workflows/events/test_catalog.py
deleted file mode 100644
index df97792..0000000
--- a/tests/api_resources/workflows/events/test_catalog.py
+++ /dev/null
@@ -1,201 +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.events import (
- CatalogListResponse,
- CatalogRegisterResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestCatalog:
- 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_list(self, client: Mobilerun) -> None:
- catalog = client.workflows.events.catalog.list()
- assert_matches_type(CatalogListResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_with_all_params(self, client: Mobilerun) -> None:
- catalog = client.workflows.events.catalog.list(
- page=1,
- page_size=1,
- source="device",
- )
- assert_matches_type(CatalogListResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.events.catalog.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- catalog = response.parse()
- assert_matches_type(CatalogListResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.events.catalog.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- catalog = response.parse()
- assert_matches_type(CatalogListResponse, catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_register(self, client: Mobilerun) -> None:
- catalog = client.workflows.events.catalog.register(
- events=[
- {
- "event_type": "x",
- "label": "x",
- }
- ],
- )
- assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_register(self, client: Mobilerun) -> None:
- response = client.workflows.events.catalog.with_raw_response.register(
- events=[
- {
- "event_type": "x",
- "label": "x",
- }
- ],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- catalog = response.parse()
- assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_register(self, client: Mobilerun) -> None:
- with client.workflows.events.catalog.with_streaming_response.register(
- events=[
- {
- "event_type": "x",
- "label": "x",
- }
- ],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- catalog = response.parse()
- assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
-
-class TestAsyncCatalog:
- 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_list(self, async_client: AsyncMobilerun) -> None:
- catalog = await async_client.workflows.events.catalog.list()
- assert_matches_type(CatalogListResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
- catalog = await async_client.workflows.events.catalog.list(
- page=1,
- page_size=1,
- source="device",
- )
- assert_matches_type(CatalogListResponse, catalog, 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.events.catalog.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- catalog = await response.parse()
- assert_matches_type(CatalogListResponse, catalog, 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.events.catalog.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- catalog = await response.parse()
- assert_matches_type(CatalogListResponse, catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_register(self, async_client: AsyncMobilerun) -> None:
- catalog = await async_client.workflows.events.catalog.register(
- events=[
- {
- "event_type": "x",
- "label": "x",
- }
- ],
- )
- assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_register(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.events.catalog.with_raw_response.register(
- events=[
- {
- "event_type": "x",
- "label": "x",
- }
- ],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- catalog = await response.parse()
- assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_register(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.events.catalog.with_streaming_response.register(
- events=[
- {
- "event_type": "x",
- "label": "x",
- }
- ],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- catalog = await response.parse()
- assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/flows/__init__.py b/tests/api_resources/workflows/flows/__init__.py
deleted file mode 100644
index fd8019a..0000000
--- a/tests/api_resources/workflows/flows/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/flows/test_actions.py b/tests/api_resources/workflows/flows/test_actions.py
deleted file mode 100644
index 0343316..0000000
--- a/tests/api_resources/workflows/flows/test_actions.py
+++ /dev/null
@@ -1,499 +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.flows import (
- ActionAddResponse,
- ActionListResponse,
- ActionRemoveResponse,
- ActionReplaceResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestActions:
- 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_list(self, client: Mobilerun) -> None:
- action = client.workflows.flows.actions.list(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.flows.actions.with_raw_response.list(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.flows.actions.with_streaming_response.list(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_list(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.actions.with_raw_response.list(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_add(self, client: Mobilerun) -> None:
- action = client.workflows.flows.actions.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- )
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_add_with_all_params(self, client: Mobilerun) -> None:
- action = client.workflows.flows.actions.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- children=[
- {
- "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",
- )
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_add(self, client: Mobilerun) -> None:
- response = client.workflows.flows.actions.with_raw_response.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_add(self, client: Mobilerun) -> None:
- with client.workflows.flows.actions.with_streaming_response.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_add(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.actions.with_raw_response.add(
- flow_id="",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_remove(self, client: Mobilerun) -> None:
- action = client.workflows.flows.actions.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionRemoveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_remove(self, client: Mobilerun) -> None:
- response = client.workflows.flows.actions.with_raw_response.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionRemoveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_remove(self, client: Mobilerun) -> None:
- with client.workflows.flows.actions.with_streaming_response.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionRemoveResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_remove(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.actions.with_raw_response.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="",
- )
-
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_action_id` but received ''"):
- client.workflows.flows.actions.with_raw_response.remove(
- flow_action_id="",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_replace(self, client: Mobilerun) -> None:
- action = client.workflows.flows.actions.replace(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- )
- assert_matches_type(ActionReplaceResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_replace(self, client: Mobilerun) -> None:
- response = client.workflows.flows.actions.with_raw_response.replace(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionReplaceResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_replace(self, client: Mobilerun) -> None:
- with client.workflows.flows.actions.with_streaming_response.replace(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionReplaceResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_replace(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.actions.with_raw_response.replace(
- flow_id="",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- )
-
-
-class TestAsyncActions:
- 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_list(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.flows.actions.list(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionListResponse, action, 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.flows.actions.with_raw_response.list(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionListResponse, action, 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.flows.actions.with_streaming_response.list(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionListResponse, action, 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_list(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.actions.with_raw_response.list(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_add(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.flows.actions.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- )
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_add_with_all_params(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.flows.actions.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- children=[
- {
- "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",
- )
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_add(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.actions.with_raw_response.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionAddResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_add(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.actions.with_streaming_response.add(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionAddResponse, action, 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_add(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.actions.with_raw_response.add(
- flow_id="",
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- position=0,
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_remove(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.flows.actions.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionRemoveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_remove(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.actions.with_raw_response.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionRemoveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_remove(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.actions.with_streaming_response.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionRemoveResponse, action, 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_remove(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.actions.with_raw_response.remove(
- flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- flow_id="",
- )
-
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_action_id` but received ''"):
- await async_client.workflows.flows.actions.with_raw_response.remove(
- flow_action_id="",
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_replace(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.flows.actions.replace(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- )
- assert_matches_type(ActionReplaceResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_replace(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.actions.with_raw_response.replace(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionReplaceResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_replace(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.actions.with_streaming_response.replace(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionReplaceResponse, action, 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_replace(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.actions.with_raw_response.replace(
- flow_id="",
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- )
diff --git a/tests/api_resources/workflows/test_action_catalog.py b/tests/api_resources/workflows/test_action_catalog.py
deleted file mode 100644
index 9f228db..0000000
--- a/tests/api_resources/workflows/test_action_catalog.py
+++ /dev/null
@@ -1,187 +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 (
- ActionCatalogListResponse,
- ActionCatalogRetrieveResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestActionCatalog:
- 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_retrieve(self, client: Mobilerun) -> None:
- action_catalog = client.workflows.action_catalog.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: Mobilerun) -> None:
- response = client.workflows.action_catalog.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action_catalog = response.parse()
- assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
- with client.workflows.action_catalog.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action_catalog = response.parse()
- assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `catalog_entry_id` but received ''"):
- client.workflows.action_catalog.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list(self, client: Mobilerun) -> None:
- action_catalog = client.workflows.action_catalog.list()
- assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_with_all_params(self, client: Mobilerun) -> None:
- action_catalog = client.workflows.action_catalog.list(
- page=1,
- page_size=1,
- service="tasks_api",
- )
- assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.action_catalog.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action_catalog = response.parse()
- assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.action_catalog.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action_catalog = response.parse()
- assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
-
-class TestAsyncActionCatalog:
- 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- action_catalog = await async_client.workflows.action_catalog.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.action_catalog.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action_catalog = await response.parse()
- assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.action_catalog.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action_catalog = await response.parse()
- assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `catalog_entry_id` but received ''"):
- await async_client.workflows.action_catalog.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list(self, async_client: AsyncMobilerun) -> None:
- action_catalog = await async_client.workflows.action_catalog.list()
- assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
- action_catalog = await async_client.workflows.action_catalog.list(
- page=1,
- page_size=1,
- service="tasks_api",
- )
- assert_matches_type(ActionCatalogListResponse, action_catalog, 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.action_catalog.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action_catalog = await response.parse()
- assert_matches_type(ActionCatalogListResponse, action_catalog, 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.action_catalog.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action_catalog = await response.parse()
- assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
-
- assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_actions.py b/tests/api_resources/workflows/test_actions.py
deleted file mode 100644
index 9533759..0000000
--- a/tests/api_resources/workflows/test_actions.py
+++ /dev/null
@@ -1,482 +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 (
- ActionListResponse,
- ActionCreateResponse,
- ActionDeleteResponse,
- ActionUpdateResponse,
- ActionRetrieveResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestActions:
- 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:
- action = client.workflows.actions.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- )
- assert_matches_type(ActionCreateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create_with_all_params(self, client: Mobilerun) -> None:
- action = client.workflows.actions.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- description="description",
- params={"foo": "bar"},
- )
- assert_matches_type(ActionCreateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: Mobilerun) -> None:
- response = client.workflows.actions.with_raw_response.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionCreateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: Mobilerun) -> None:
- with client.workflows.actions.with_streaming_response.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionCreateResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_retrieve(self, client: Mobilerun) -> None:
- action = client.workflows.actions.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionRetrieveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: Mobilerun) -> None:
- response = client.workflows.actions.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionRetrieveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
- with client.workflows.actions.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionRetrieveResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
- client.workflows.actions.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update(self, client: Mobilerun) -> None:
- action = client.workflows.actions.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update_with_all_params(self, client: Mobilerun) -> None:
- action = client.workflows.actions.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- description="description",
- name="x",
- params={"foo": "bar"},
- )
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_update(self, client: Mobilerun) -> None:
- response = client.workflows.actions.with_raw_response.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_update(self, client: Mobilerun) -> None:
- with client.workflows.actions.with_streaming_response.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_update(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
- client.workflows.actions.with_raw_response.update(
- action_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list(self, client: Mobilerun) -> None:
- action = client.workflows.actions.list()
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_with_all_params(self, client: Mobilerun) -> None:
- action = client.workflows.actions.list(
- order_by="name",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- service="tasks_api",
- )
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.actions.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = response.parse()
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.actions.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = response.parse()
- assert_matches_type(ActionListResponse, action, 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:
- action = client.workflows.actions.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionDeleteResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: Mobilerun) -> None:
- response = client.workflows.actions.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"
- action = response.parse()
- assert_matches_type(ActionDeleteResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: Mobilerun) -> None:
- with client.workflows.actions.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"
-
- action = response.parse()
- assert_matches_type(ActionDeleteResponse, action, 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 `action_id` but received ''"):
- client.workflows.actions.with_raw_response.delete(
- "",
- )
-
-
-class TestAsyncActions:
- 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:
- action = await async_client.workflows.actions.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- )
- assert_matches_type(ActionCreateResponse, action, 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:
- action = await async_client.workflows.actions.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- description="description",
- params={"foo": "bar"},
- )
- assert_matches_type(ActionCreateResponse, action, 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.actions.with_raw_response.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionCreateResponse, action, 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.actions.with_streaming_response.create(
- catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionCreateResponse, action, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.actions.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionRetrieveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.actions.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionRetrieveResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.actions.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionRetrieveResponse, action, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
- await async_client.workflows.actions.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.actions.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update_with_all_params(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.actions.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- description="description",
- name="x",
- params={"foo": "bar"},
- )
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.actions.with_raw_response.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionUpdateResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.actions.with_streaming_response.update(
- action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionUpdateResponse, action, 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_update(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
- await async_client.workflows.actions.with_raw_response.update(
- action_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.actions.list()
- assert_matches_type(ActionListResponse, action, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
- action = await async_client.workflows.actions.list(
- order_by="name",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- service="tasks_api",
- )
- assert_matches_type(ActionListResponse, action, 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.actions.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- action = await response.parse()
- assert_matches_type(ActionListResponse, action, 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.actions.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- action = await response.parse()
- assert_matches_type(ActionListResponse, action, 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:
- action = await async_client.workflows.actions.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ActionDeleteResponse, action, 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.actions.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"
- action = await response.parse()
- assert_matches_type(ActionDeleteResponse, action, 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.actions.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"
-
- action = await response.parse()
- assert_matches_type(ActionDeleteResponse, action, 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 `action_id` but received ''"):
- await async_client.workflows.actions.with_raw_response.delete(
- "",
- )
diff --git a/tests/api_resources/workflows/test_events.py b/tests/api_resources/workflows/test_events.py
deleted file mode 100644
index 8ca70fa..0000000
--- a/tests/api_resources/workflows/test_events.py
+++ /dev/null
@@ -1,203 +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 (
- EventDryRunResponse,
- EventIngestResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestEvents:
- 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_dry_run(self, client: Mobilerun) -> None:
- event = client.workflows.events.dry_run(
- event_type="x",
- )
- assert_matches_type(EventDryRunResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- 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"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_dry_run(self, client: Mobilerun) -> None:
- response = client.workflows.events.with_raw_response.dry_run(
- event_type="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- event = response.parse()
- assert_matches_type(EventDryRunResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_dry_run(self, client: Mobilerun) -> None:
- with client.workflows.events.with_streaming_response.dry_run(
- event_type="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- event = response.parse()
- assert_matches_type(EventDryRunResponse, event, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_ingest(self, client: Mobilerun) -> None:
- event = client.workflows.events.ingest(
- event_type="x",
- )
- assert_matches_type(EventIngestResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- 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"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_ingest(self, client: Mobilerun) -> None:
- response = client.workflows.events.with_raw_response.ingest(
- event_type="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- event = response.parse()
- assert_matches_type(EventIngestResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_ingest(self, client: Mobilerun) -> None:
- with client.workflows.events.with_streaming_response.ingest(
- event_type="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- event = response.parse()
- assert_matches_type(EventIngestResponse, event, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
-
-class TestAsyncEvents:
- 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_dry_run(self, async_client: AsyncMobilerun) -> None:
- event = await async_client.workflows.events.dry_run(
- event_type="x",
- )
- assert_matches_type(EventDryRunResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- 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"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_dry_run(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.events.with_raw_response.dry_run(
- event_type="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- event = await response.parse()
- assert_matches_type(EventDryRunResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_dry_run(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.events.with_streaming_response.dry_run(
- event_type="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- event = await response.parse()
- assert_matches_type(EventDryRunResponse, event, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_ingest(self, async_client: AsyncMobilerun) -> None:
- event = await async_client.workflows.events.ingest(
- event_type="x",
- )
- assert_matches_type(EventIngestResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- 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"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_ingest(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.events.with_raw_response.ingest(
- event_type="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- event = await response.parse()
- assert_matches_type(EventIngestResponse, event, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_ingest(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.events.with_streaming_response.ingest(
- event_type="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- event = await response.parse()
- assert_matches_type(EventIngestResponse, event, path=["response"])
-
- assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_executions.py b/tests/api_resources/workflows/test_executions.py
deleted file mode 100644
index 891bd9b..0000000
--- a/tests/api_resources/workflows/test_executions.py
+++ /dev/null
@@ -1,280 +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 (
- ExecutionListResponse,
- ExecutionRetrieveResponse,
- ExecutionGetMetricsResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestExecutions:
- 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_retrieve(self, client: Mobilerun) -> None:
- execution = client.workflows.executions.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: Mobilerun) -> None:
- response = client.workflows.executions.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- execution = response.parse()
- assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
- with client.workflows.executions.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- execution = response.parse()
- assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `execution_id` but received ''"):
- client.workflows.executions.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list(self, client: Mobilerun) -> None:
- execution = client.workflows.executions.list()
- assert_matches_type(ExecutionListResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_with_all_params(self, client: Mobilerun) -> None:
- execution = client.workflows.executions.list(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- from_="from",
- order_by="startedAt",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- status="pending",
- to="to",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ExecutionListResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.executions.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- execution = response.parse()
- assert_matches_type(ExecutionListResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.executions.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- execution = response.parse()
- assert_matches_type(ExecutionListResponse, execution, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_get_metrics(self, client: Mobilerun) -> None:
- execution = client.workflows.executions.get_metrics()
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_get_metrics_with_all_params(self, client: Mobilerun) -> None:
- execution = client.workflows.executions.get_metrics(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- from_="from",
- to="to",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_get_metrics(self, client: Mobilerun) -> None:
- response = client.workflows.executions.with_raw_response.get_metrics()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- execution = response.parse()
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_get_metrics(self, client: Mobilerun) -> None:
- with client.workflows.executions.with_streaming_response.get_metrics() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- execution = response.parse()
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
-
-class TestAsyncExecutions:
- 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- execution = await async_client.workflows.executions.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.executions.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- execution = await response.parse()
- assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.executions.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- execution = await response.parse()
- assert_matches_type(ExecutionRetrieveResponse, execution, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `execution_id` but received ''"):
- await async_client.workflows.executions.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list(self, async_client: AsyncMobilerun) -> None:
- execution = await async_client.workflows.executions.list()
- assert_matches_type(ExecutionListResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
- execution = await async_client.workflows.executions.list(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- from_="from",
- order_by="startedAt",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- status="pending",
- to="to",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ExecutionListResponse, execution, 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.executions.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- execution = await response.parse()
- assert_matches_type(ExecutionListResponse, execution, 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.executions.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- execution = await response.parse()
- assert_matches_type(ExecutionListResponse, execution, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_get_metrics(self, async_client: AsyncMobilerun) -> None:
- execution = await async_client.workflows.executions.get_metrics()
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_get_metrics_with_all_params(self, async_client: AsyncMobilerun) -> None:
- execution = await async_client.workflows.executions.get_metrics(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- from_="from",
- to="to",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_get_metrics(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.executions.with_raw_response.get_metrics()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- execution = await response.parse()
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_get_metrics(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.executions.with_streaming_response.get_metrics() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- execution = await response.parse()
- assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
-
- assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_flows.py b/tests/api_resources/workflows/test_flows.py
deleted file mode 100644
index d7640f1..0000000
--- a/tests/api_resources/workflows/test_flows.py
+++ /dev/null
@@ -1,760 +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 (
- FlowListResponse,
- FlowCloneResponse,
- FlowCreateResponse,
- FlowDeleteResponse,
- FlowUpdateResponse,
- FlowUnblockResponse,
- FlowRetrieveResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestFlows:
- 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:
- flow = client.workflows.flows.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowCreateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create_with_all_params(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- "children": [
- {
- "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"}},
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- cooldown_scope="flow",
- cooldown_seconds=0,
- description="description",
- enabled=True,
- )
- assert_matches_type(FlowCreateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: Mobilerun) -> None:
- response = client.workflows.flows.with_raw_response.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = response.parse()
- assert_matches_type(FlowCreateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: Mobilerun) -> None:
- with client.workflows.flows.with_streaming_response.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = response.parse()
- assert_matches_type(FlowCreateResponse, flow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_retrieve(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: Mobilerun) -> None:
- response = client.workflows.flows.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = response.parse()
- assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
- with client.workflows.flows.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = response.parse()
- assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update_with_all_params(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- cooldown_scope="flow",
- cooldown_seconds=0,
- description="description",
- enabled=True,
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_update(self, client: Mobilerun) -> None:
- response = client.workflows.flows.with_raw_response.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = response.parse()
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_update(self, client: Mobilerun) -> None:
- with client.workflows.flows.with_streaming_response.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = response.parse()
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_update(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.with_raw_response.update(
- flow_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.list()
- assert_matches_type(FlowListResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_with_all_params(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.list(
- enabled=True,
- order_by="name",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- status=["healthy"],
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowListResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.flows.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = response.parse()
- assert_matches_type(FlowListResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.flows.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = response.parse()
- assert_matches_type(FlowListResponse, flow, 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:
- flow = client.workflows.flows.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowDeleteResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: Mobilerun) -> None:
- response = client.workflows.flows.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"
- flow = response.parse()
- assert_matches_type(FlowDeleteResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: Mobilerun) -> None:
- with client.workflows.flows.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"
-
- flow = response.parse()
- assert_matches_type(FlowDeleteResponse, flow, 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 `flow_id` but received ''"):
- client.workflows.flows.with_raw_response.delete(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_clone(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_clone_with_all_params(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- name="x",
- )
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_clone(self, client: Mobilerun) -> None:
- response = client.workflows.flows.with_raw_response.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = response.parse()
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_clone(self, client: Mobilerun) -> None:
- with client.workflows.flows.with_streaming_response.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = response.parse()
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_clone(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.with_raw_response.clone(
- flow_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_unblock(self, client: Mobilerun) -> None:
- flow = client.workflows.flows.unblock(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowUnblockResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_unblock(self, client: Mobilerun) -> None:
- response = client.workflows.flows.with_raw_response.unblock(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = response.parse()
- assert_matches_type(FlowUnblockResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_unblock(self, client: Mobilerun) -> None:
- with client.workflows.flows.with_streaming_response.unblock(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = response.parse()
- assert_matches_type(FlowUnblockResponse, flow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_unblock(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- client.workflows.flows.with_raw_response.unblock(
- "",
- )
-
-
-class TestAsyncFlows:
- 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:
- flow = await async_client.workflows.flows.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowCreateResponse, flow, 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:
- flow = await async_client.workflows.flows.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- "children": [
- {
- "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"}},
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- cooldown_scope="flow",
- cooldown_seconds=0,
- description="description",
- enabled=True,
- )
- assert_matches_type(FlowCreateResponse, flow, 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.flows.with_raw_response.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = await response.parse()
- assert_matches_type(FlowCreateResponse, flow, 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.flows.with_streaming_response.create(
- actions=[
- {
- "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- "position": 0,
- }
- ],
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = await response.parse()
- assert_matches_type(FlowCreateResponse, flow, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = await response.parse()
- assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = await response.parse()
- assert_matches_type(FlowRetrieveResponse, flow, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update_with_all_params(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- cooldown_scope="flow",
- cooldown_seconds=0,
- description="description",
- enabled=True,
- name="x",
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.with_raw_response.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = await response.parse()
- assert_matches_type(FlowUpdateResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.with_streaming_response.update(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = await response.parse()
- assert_matches_type(FlowUpdateResponse, flow, 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_update(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.with_raw_response.update(
- flow_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.list()
- assert_matches_type(FlowListResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.list(
- enabled=True,
- order_by="name",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- status=["healthy"],
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowListResponse, flow, 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.flows.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = await response.parse()
- assert_matches_type(FlowListResponse, flow, 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.flows.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = await response.parse()
- assert_matches_type(FlowListResponse, flow, 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:
- flow = await async_client.workflows.flows.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowDeleteResponse, flow, 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.flows.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"
- flow = await response.parse()
- assert_matches_type(FlowDeleteResponse, flow, 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.flows.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"
-
- flow = await response.parse()
- assert_matches_type(FlowDeleteResponse, flow, 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 `flow_id` but received ''"):
- await async_client.workflows.flows.with_raw_response.delete(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_clone(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- 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",
- name="x",
- )
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_clone(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.with_raw_response.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = await response.parse()
- assert_matches_type(FlowCloneResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_clone(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.with_streaming_response.clone(
- flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = await response.parse()
- assert_matches_type(FlowCloneResponse, flow, 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_clone(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.with_raw_response.clone(
- flow_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_unblock(self, async_client: AsyncMobilerun) -> None:
- flow = await async_client.workflows.flows.unblock(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(FlowUnblockResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_unblock(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.flows.with_raw_response.unblock(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- flow = await response.parse()
- assert_matches_type(FlowUnblockResponse, flow, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_unblock(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.flows.with_streaming_response.unblock(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- flow = await response.parse()
- assert_matches_type(FlowUnblockResponse, flow, 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_unblock(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
- await async_client.workflows.flows.with_raw_response.unblock(
- "",
- )
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_timezones.py b/tests/api_resources/workflows/test_timezones.py
deleted file mode 100644
index fab060b..0000000
--- a/tests/api_resources/workflows/test_timezones.py
+++ /dev/null
@@ -1,80 +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 TimezoneListResponse
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestTimezones:
- 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_list(self, client: Mobilerun) -> None:
- timezone = client.workflows.timezones.list()
- assert_matches_type(TimezoneListResponse, timezone, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.timezones.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- timezone = response.parse()
- assert_matches_type(TimezoneListResponse, timezone, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.timezones.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- timezone = response.parse()
- assert_matches_type(TimezoneListResponse, timezone, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
-
-class TestAsyncTimezones:
- 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_list(self, async_client: AsyncMobilerun) -> None:
- timezone = await async_client.workflows.timezones.list()
- assert_matches_type(TimezoneListResponse, timezone, 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.timezones.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- timezone = await response.parse()
- assert_matches_type(TimezoneListResponse, timezone, 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.timezones.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- timezone = await response.parse()
- assert_matches_type(TimezoneListResponse, timezone, path=["response"])
-
- assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_triggers.py b/tests/api_resources/workflows/test_triggers.py
deleted file mode 100644
index 9a71326..0000000
--- a/tests/api_resources/workflows/test_triggers.py
+++ /dev/null
@@ -1,647 +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 (
- TriggerFireResponse,
- TriggerListResponse,
- TriggerCreateResponse,
- TriggerDeleteResponse,
- TriggerUpdateResponse,
- TriggerRetrieveResponse,
-)
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestTriggers:
- 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:
- trigger = client.workflows.triggers.create(
- activation="event",
- name="x",
- )
- assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_create_with_all_params(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.create(
- activation="event",
- name="x",
- conditions={
- "all": [{}],
- "any": [{}],
- },
- custom_payload_schema={"foo": "bar"},
- description="description",
- event_type="eventType",
- schedule_rule={
- "type": "once",
- "date_time": "dateTime",
- "expression": "expression",
- "rrule": "rrule",
- },
- timezone="timezone",
- )
- assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_create(self, client: Mobilerun) -> None:
- response = client.workflows.triggers.with_raw_response.create(
- activation="event",
- name="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = response.parse()
- assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_create(self, client: Mobilerun) -> None:
- with client.workflows.triggers.with_streaming_response.create(
- activation="event",
- name="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = response.parse()
- assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_retrieve(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_retrieve(self, client: Mobilerun) -> None:
- response = client.workflows.triggers.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = response.parse()
- assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
- with client.workflows.triggers.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = response.parse()
- assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_retrieve(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
- client.workflows.triggers.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_update_with_all_params(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- activation="event",
- conditions={
- "all": [{}],
- "any": [{}],
- },
- custom_payload_schema={"foo": "bar"},
- description="description",
- event_type="eventType",
- name="x",
- schedule_rule={
- "type": "once",
- "date_time": "dateTime",
- "expression": "expression",
- "rrule": "rrule",
- },
- timezone="timezone",
- )
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_update(self, client: Mobilerun) -> None:
- response = client.workflows.triggers.with_raw_response.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = response.parse()
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_update(self, client: Mobilerun) -> None:
- with client.workflows.triggers.with_streaming_response.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = response.parse()
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_update(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
- client.workflows.triggers.with_raw_response.update(
- trigger_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.list()
- assert_matches_type(TriggerListResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_list_with_all_params(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.list(
- activation="event",
- event_type="eventType",
- order_by="name",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- )
- assert_matches_type(TriggerListResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_list(self, client: Mobilerun) -> None:
- response = client.workflows.triggers.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = response.parse()
- assert_matches_type(TriggerListResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_list(self, client: Mobilerun) -> None:
- with client.workflows.triggers.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = response.parse()
- assert_matches_type(TriggerListResponse, trigger, 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:
- trigger = client.workflows.triggers.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerDeleteResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_raw_response_delete(self, client: Mobilerun) -> None:
- response = client.workflows.triggers.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"
- trigger = response.parse()
- assert_matches_type(TriggerDeleteResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_delete(self, client: Mobilerun) -> None:
- with client.workflows.triggers.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"
-
- trigger = response.parse()
- assert_matches_type(TriggerDeleteResponse, trigger, 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 `trigger_id` but received ''"):
- client.workflows.triggers.with_raw_response.delete(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_method_fire(self, client: Mobilerun) -> None:
- trigger = client.workflows.triggers.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- )
- 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:
- response = client.workflows.triggers.with_raw_response.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = response.parse()
- assert_matches_type(TriggerFireResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_streaming_response_fire(self, client: Mobilerun) -> None:
- with client.workflows.triggers.with_streaming_response.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = response.parse()
- assert_matches_type(TriggerFireResponse, trigger, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- def test_path_params_fire(self, client: Mobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
- client.workflows.triggers.with_raw_response.fire(
- trigger_id="",
- payload={"foo": "bar"},
- )
-
-
-class TestAsyncTriggers:
- 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:
- trigger = await async_client.workflows.triggers.create(
- activation="event",
- name="x",
- )
- assert_matches_type(TriggerCreateResponse, trigger, 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:
- trigger = await async_client.workflows.triggers.create(
- activation="event",
- name="x",
- conditions={
- "all": [{}],
- "any": [{}],
- },
- custom_payload_schema={"foo": "bar"},
- description="description",
- event_type="eventType",
- schedule_rule={
- "type": "once",
- "date_time": "dateTime",
- "expression": "expression",
- "rrule": "rrule",
- },
- timezone="timezone",
- )
- assert_matches_type(TriggerCreateResponse, trigger, 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.triggers.with_raw_response.create(
- activation="event",
- name="x",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = await response.parse()
- assert_matches_type(TriggerCreateResponse, trigger, 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.triggers.with_streaming_response.create(
- activation="event",
- name="x",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = await response.parse()
- assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.triggers.with_raw_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = await response.parse()
- assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.triggers.with_streaming_response.retrieve(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = await response.parse()
- assert_matches_type(TriggerRetrieveResponse, trigger, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
- await async_client.workflows.triggers.with_raw_response.retrieve(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_update_with_all_params(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- activation="event",
- conditions={
- "all": [{}],
- "any": [{}],
- },
- custom_payload_schema={"foo": "bar"},
- description="description",
- event_type="eventType",
- name="x",
- schedule_rule={
- "type": "once",
- "date_time": "dateTime",
- "expression": "expression",
- "rrule": "rrule",
- },
- timezone="timezone",
- )
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
- response = await async_client.workflows.triggers.with_raw_response.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = await response.parse()
- assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.triggers.with_streaming_response.update(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = await response.parse()
- assert_matches_type(TriggerUpdateResponse, trigger, 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_update(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
- await async_client.workflows.triggers.with_raw_response.update(
- trigger_id="",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.list()
- assert_matches_type(TriggerListResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.list(
- activation="event",
- event_type="eventType",
- order_by="name",
- order_by_direction="asc",
- page=1,
- page_size=1,
- search="search",
- )
- assert_matches_type(TriggerListResponse, trigger, 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.triggers.with_raw_response.list()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = await response.parse()
- assert_matches_type(TriggerListResponse, trigger, 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.triggers.with_streaming_response.list() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = await response.parse()
- assert_matches_type(TriggerListResponse, trigger, 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:
- trigger = await async_client.workflows.triggers.delete(
- "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- )
- assert_matches_type(TriggerDeleteResponse, trigger, 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.triggers.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"
- trigger = await response.parse()
- assert_matches_type(TriggerDeleteResponse, trigger, 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.triggers.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"
-
- trigger = await response.parse()
- assert_matches_type(TriggerDeleteResponse, trigger, 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 `trigger_id` but received ''"):
- await async_client.workflows.triggers.with_raw_response.delete(
- "",
- )
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_method_fire(self, async_client: AsyncMobilerun) -> None:
- trigger = await async_client.workflows.triggers.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- )
- 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:
- response = await async_client.workflows.triggers.with_raw_response.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- )
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- trigger = await response.parse()
- assert_matches_type(TriggerFireResponse, trigger, path=["response"])
-
- @pytest.mark.skip(reason="Mock server tests are disabled")
- @parametrize
- async def test_streaming_response_fire(self, async_client: AsyncMobilerun) -> None:
- async with async_client.workflows.triggers.with_streaming_response.fire(
- trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
- payload={"foo": "bar"},
- ) as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- trigger = await response.parse()
- assert_matches_type(TriggerFireResponse, trigger, 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_fire(self, async_client: AsyncMobilerun) -> None:
- with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
- await async_client.workflows.triggers.with_raw_response.fire(
- trigger_id="",
- payload={"foo": "bar"},
- )
From 458209a064d4be4eedfceab7f680bc9329e5de73 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 19 Jun 2026 17:14:21 +0000
Subject: [PATCH 2/3] feat(api): api update
---
.stats.yml | 6 +-
api.md | 191 ++++
src/mobilerun_sdk/_client.py | 38 +
src/mobilerun_sdk/resources/__init__.py | 14 +
.../resources/workflows/__init__.py | 117 +++
.../resources/workflows/action_catalog.py | 268 ++++++
.../resources/workflows/actions/__init__.py | 33 +
.../resources/workflows/actions/actions.py | 592 +++++++++++++
.../resources/workflows/actions/services.py | 215 +++++
.../resources/workflows/events/__init__.py | 33 +
.../resources/workflows/events/catalog.py | 267 ++++++
.../resources/workflows/events/events.py | 308 +++++++
.../resources/workflows/executions.py | 402 +++++++++
.../resources/workflows/flows/__init__.py | 33 +
.../resources/workflows/flows/actions.py | 454 ++++++++++
.../resources/workflows/flows/flows.py | 836 ++++++++++++++++++
.../resources/workflows/timezones.py | 135 +++
.../resources/workflows/triggers.py | 731 +++++++++++++++
.../resources/workflows/workflows.py | 294 ++++++
src/mobilerun_sdk/types/__init__.py | 1 +
src/mobilerun_sdk/types/flow.py | 54 ++
src/mobilerun_sdk/types/workflows/__init__.py | 48 +
src/mobilerun_sdk/types/workflows/action.py | 34 +
.../types/workflows/action_catalog_entry.py | 28 +
.../workflows/action_catalog_list_params.py | 17 +
.../workflows/action_catalog_list_response.py | 15 +
.../action_catalog_retrieve_response.py | 10 +
.../types/workflows/action_create_params.py | 20 +
.../types/workflows/action_create_response.py | 10 +
.../types/workflows/action_delete_response.py | 9 +
.../types/workflows/action_list_params.py | 23 +
.../types/workflows/action_list_response.py | 15 +
.../workflows/action_retrieve_response.py | 10 +
.../types/workflows/action_update_params.py | 16 +
.../types/workflows/action_update_response.py | 10 +
.../types/workflows/actions/__init__.py | 3 +
.../actions/service_list_methods_response.py | 32 +
.../actions/service_list_response.py | 11 +
.../types/workflows/event_dry_run_params.py | 16 +
.../types/workflows/event_dry_run_response.py | 126 +++
.../types/workflows/event_ingest_params.py | 16 +
.../types/workflows/event_ingest_response.py | 11 +
.../types/workflows/events/__init__.py | 5 +
.../workflows/events/catalog_list_params.py | 17 +
.../workflows/events/catalog_list_response.py | 32 +
.../events/catalog_register_params.py | 26 +
.../events/catalog_register_response.py | 9 +
.../workflows/execution_get_metrics_params.py | 20 +
.../execution_get_metrics_response.py | 39 +
.../types/workflows/execution_list_params.py | 32 +
.../workflows/execution_list_response.py | 15 +
.../workflows/execution_retrieve_response.py | 10 +
.../workflows/flow_action_overrides_param.py | 12 +
.../flow_child_action_input_param.py | 23 +
.../types/workflows/flow_clone_params.py | 16 +
.../types/workflows/flow_clone_response.py | 10 +
.../types/workflows/flow_create_params.py | 51 ++
.../types/workflows/flow_create_response.py | 10 +
.../types/workflows/flow_delete_response.py | 9 +
.../types/workflows/flow_execution.py | 36 +
.../types/workflows/flow_list_params.py | 28 +
.../types/workflows/flow_list_response.py | 15 +
.../types/workflows/flow_retrieve_response.py | 10 +
.../types/workflows/flow_unblock_response.py | 10 +
.../types/workflows/flow_update_params.py | 33 +
.../types/workflows/flow_update_response.py | 10 +
.../types/workflows/flows/__init__.py | 8 +
.../workflows/flows/action_add_params.py | 28 +
.../workflows/flows/action_add_response.py | 10 +
.../workflows/flows/action_list_response.py | 12 +
.../workflows/flows/action_remove_response.py | 9 +
.../workflows/flows/action_replace_params.py | 30 +
.../flows/action_replace_response.py | 12 +
.../types/workflows/flows/flow_action.py | 33 +
.../types/workflows/timezone_list_response.py | 11 +
.../types/workflows/trigger_create_params.py | 48 +
.../workflows/trigger_create_response.py | 55 ++
.../workflows/trigger_delete_response.py | 9 +
.../types/workflows/trigger_fire_params.py | 17 +
.../types/workflows/trigger_fire_response.py | 22 +
.../types/workflows/trigger_list_params.py | 25 +
.../types/workflows/trigger_list_response.py | 58 ++
.../workflows/trigger_retrieve_response.py | 55 ++
.../types/workflows/trigger_update_params.py | 48 +
.../workflows/trigger_update_response.py | 55 ++
tests/api_resources/workflows/__init__.py | 1 +
.../workflows/actions/__init__.py | 1 +
.../workflows/actions/test_services.py | 164 ++++
.../workflows/events/__init__.py | 1 +
.../workflows/events/test_catalog.py | 201 +++++
.../api_resources/workflows/flows/__init__.py | 1 +
.../workflows/flows/test_actions.py | 495 +++++++++++
.../workflows/test_action_catalog.py | 187 ++++
tests/api_resources/workflows/test_actions.py | 482 ++++++++++
tests/api_resources/workflows/test_events.py | 199 +++++
.../workflows/test_executions.py | 280 ++++++
tests/api_resources/workflows/test_flows.py | 774 ++++++++++++++++
.../api_resources/workflows/test_timezones.py | 80 ++
.../api_resources/workflows/test_triggers.py | 627 +++++++++++++
99 files changed, 10015 insertions(+), 3 deletions(-)
create mode 100644 src/mobilerun_sdk/resources/workflows/__init__.py
create mode 100644 src/mobilerun_sdk/resources/workflows/action_catalog.py
create mode 100644 src/mobilerun_sdk/resources/workflows/actions/__init__.py
create mode 100644 src/mobilerun_sdk/resources/workflows/actions/actions.py
create mode 100644 src/mobilerun_sdk/resources/workflows/actions/services.py
create mode 100644 src/mobilerun_sdk/resources/workflows/events/__init__.py
create mode 100644 src/mobilerun_sdk/resources/workflows/events/catalog.py
create mode 100644 src/mobilerun_sdk/resources/workflows/events/events.py
create mode 100644 src/mobilerun_sdk/resources/workflows/executions.py
create mode 100644 src/mobilerun_sdk/resources/workflows/flows/__init__.py
create mode 100644 src/mobilerun_sdk/resources/workflows/flows/actions.py
create mode 100644 src/mobilerun_sdk/resources/workflows/flows/flows.py
create mode 100644 src/mobilerun_sdk/resources/workflows/timezones.py
create mode 100644 src/mobilerun_sdk/resources/workflows/triggers.py
create mode 100644 src/mobilerun_sdk/resources/workflows/workflows.py
create mode 100644 src/mobilerun_sdk/types/flow.py
create mode 100644 src/mobilerun_sdk/types/workflows/action.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_entry.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_list_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_create_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_create_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_delete_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_list_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_retrieve_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_update_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/action_update_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/actions/service_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/event_dry_run_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/event_dry_run_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/event_ingest_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/event_ingest_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_list_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_register_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/events/catalog_register_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/execution_list_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/execution_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/execution_retrieve_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_clone_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_clone_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_create_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_create_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_delete_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_execution.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_list_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_retrieve_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_unblock_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_update_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/flow_update_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/action_add_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/action_add_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/action_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/action_remove_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/action_replace_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/flows/flow_action.py
create mode 100644 src/mobilerun_sdk/types/workflows/timezone_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_create_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_create_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_delete_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_fire_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_fire_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_list_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_list_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_update_params.py
create mode 100644 src/mobilerun_sdk/types/workflows/trigger_update_response.py
create mode 100644 tests/api_resources/workflows/__init__.py
create mode 100644 tests/api_resources/workflows/actions/__init__.py
create mode 100644 tests/api_resources/workflows/actions/test_services.py
create mode 100644 tests/api_resources/workflows/events/__init__.py
create mode 100644 tests/api_resources/workflows/events/test_catalog.py
create mode 100644 tests/api_resources/workflows/flows/__init__.py
create mode 100644 tests/api_resources/workflows/flows/test_actions.py
create mode 100644 tests/api_resources/workflows/test_action_catalog.py
create mode 100644 tests/api_resources/workflows/test_actions.py
create mode 100644 tests/api_resources/workflows/test_events.py
create mode 100644 tests/api_resources/workflows/test_executions.py
create mode 100644 tests/api_resources/workflows/test_flows.py
create mode 100644 tests/api_resources/workflows/test_timezones.py
create mode 100644 tests/api_resources/workflows/test_triggers.py
diff --git a/.stats.yml b/.stats.yml
index 8f1ec0a..d1dec4b 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 126
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/droidrun/droidrun-cloud-6bac5609a802d599b148bd22cce6266096a1a9a5fb157f327e20b18d6f77ad8f.yml
-openapi_spec_hash: 63ba4f5e4896e2b35845491596dc5d32
+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/api.md b/api.md
index f7e9c61..1c524a7 100644
--- a/api.md
+++ b/api.md
@@ -518,6 +518,197 @@ Methods:
- client.tasks.ui_states.retrieve(index, \*, task_id) -> MediaResponse
- client.tasks.ui_states.list(task_id) -> UiStateListResponse
+# Workflows
+
+Types:
+
+```python
+from mobilerun_sdk.types import Flow
+```
+
+## Triggers
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import (
+ TriggerCreateResponse,
+ TriggerRetrieveResponse,
+ TriggerUpdateResponse,
+ TriggerListResponse,
+ TriggerDeleteResponse,
+ TriggerFireResponse,
+)
+```
+
+Methods:
+
+- client.workflows.triggers.create(\*\*params) -> TriggerCreateResponse
+- client.workflows.triggers.retrieve(trigger_id) -> TriggerRetrieveResponse
+- client.workflows.triggers.update(trigger_id, \*\*params) -> TriggerUpdateResponse
+- client.workflows.triggers.list(\*\*params) -> TriggerListResponse
+- client.workflows.triggers.delete(trigger_id) -> TriggerDeleteResponse
+- client.workflows.triggers.fire(trigger_id, \*\*params) -> TriggerFireResponse
+
+## ActionCatalog
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import (
+ ActionCatalogEntry,
+ ActionCatalogRetrieveResponse,
+ ActionCatalogListResponse,
+)
+```
+
+Methods:
+
+- client.workflows.action_catalog.retrieve(catalog_entry_id) -> ActionCatalogRetrieveResponse
+- client.workflows.action_catalog.list(\*\*params) -> ActionCatalogListResponse
+
+## Actions
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import (
+ Action,
+ ActionCreateResponse,
+ ActionRetrieveResponse,
+ ActionUpdateResponse,
+ ActionListResponse,
+ ActionDeleteResponse,
+)
+```
+
+Methods:
+
+- client.workflows.actions.create(\*\*params) -> ActionCreateResponse
+- client.workflows.actions.retrieve(action_id) -> ActionRetrieveResponse
+- client.workflows.actions.update(action_id, \*\*params) -> ActionUpdateResponse
+- client.workflows.actions.list(\*\*params) -> ActionListResponse
+- client.workflows.actions.delete(action_id) -> ActionDeleteResponse
+
+### Services
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows.actions import ServiceListResponse, ServiceListMethodsResponse
+```
+
+Methods:
+
+- client.workflows.actions.services.list() -> ServiceListResponse
+- client.workflows.actions.services.list_methods(service) -> ServiceListMethodsResponse
+
+## Flows
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import (
+ FlowActionOverrides,
+ FlowChildActionInput,
+ FlowCreateResponse,
+ FlowRetrieveResponse,
+ FlowUpdateResponse,
+ FlowListResponse,
+ FlowDeleteResponse,
+ FlowCloneResponse,
+ FlowUnblockResponse,
+)
+```
+
+Methods:
+
+- client.workflows.flows.create(\*\*params) -> FlowCreateResponse
+- client.workflows.flows.retrieve(flow_id) -> FlowRetrieveResponse
+- client.workflows.flows.update(flow_id, \*\*params) -> FlowUpdateResponse
+- client.workflows.flows.list(\*\*params) -> FlowListResponse
+- client.workflows.flows.delete(flow_id) -> FlowDeleteResponse
+- client.workflows.flows.clone(flow_id, \*\*params) -> FlowCloneResponse
+- client.workflows.flows.unblock(flow_id) -> FlowUnblockResponse
+
+### Actions
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows.flows import (
+ FlowAction,
+ ActionListResponse,
+ ActionAddResponse,
+ ActionRemoveResponse,
+ ActionReplaceResponse,
+)
+```
+
+Methods:
+
+- client.workflows.flows.actions.list(flow_id) -> ActionListResponse
+- client.workflows.flows.actions.add(flow_id, \*\*params) -> ActionAddResponse
+- client.workflows.flows.actions.remove(flow_action_id, \*, flow_id) -> ActionRemoveResponse
+- client.workflows.flows.actions.replace(flow_id, \*\*params) -> ActionReplaceResponse
+
+## Events
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import EventDryRunResponse, EventIngestResponse
+```
+
+Methods:
+
+- client.workflows.events.dry_run(\*\*params) -> EventDryRunResponse
+- client.workflows.events.ingest(\*\*params) -> EventIngestResponse
+
+### Catalog
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows.events import CatalogListResponse, CatalogRegisterResponse
+```
+
+Methods:
+
+- client.workflows.events.catalog.list(\*\*params) -> CatalogListResponse
+- client.workflows.events.catalog.register(\*\*params) -> CatalogRegisterResponse
+
+## Executions
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import (
+ FlowExecution,
+ ExecutionRetrieveResponse,
+ ExecutionListResponse,
+ ExecutionGetMetricsResponse,
+)
+```
+
+Methods:
+
+- client.workflows.executions.retrieve(execution_id) -> ExecutionRetrieveResponse
+- client.workflows.executions.list(\*\*params) -> ExecutionListResponse
+- client.workflows.executions.get_metrics(\*\*params) -> ExecutionGetMetricsResponse
+
+## Timezones
+
+Types:
+
+```python
+from mobilerun_sdk.types.workflows import TimezoneListResponse
+```
+
+Methods:
+
+- client.workflows.timezones.list() -> TimezoneListResponse
+
# Webhooks
Types:
diff --git a/src/mobilerun_sdk/_client.py b/src/mobilerun_sdk/_client.py
index 4811cb0..f43b8dd 100644
--- a/src/mobilerun_sdk/_client.py
+++ b/src/mobilerun_sdk/_client.py
@@ -47,6 +47,7 @@
carriers,
profiles,
webhooks,
+ workflows,
credentials,
)
from .resources.apps import AppsResource, AsyncAppsResource
@@ -59,6 +60,7 @@
from .resources.connect.connect import ConnectResource, AsyncConnectResource
from .resources.devices.devices import DevicesResource, AsyncDevicesResource
from .resources.webhooks.webhooks import WebhooksResource, AsyncWebhooksResource
+ from .resources.workflows.workflows import WorkflowsResource, AsyncWorkflowsResource
from .resources.credentials.credentials import CredentialsResource, AsyncCredentialsResource
__all__ = [
@@ -199,6 +201,12 @@ def tasks(self) -> TasksResource:
return TasksResource(self)
+ @cached_property
+ def workflows(self) -> WorkflowsResource:
+ from .resources.workflows import WorkflowsResource
+
+ return WorkflowsResource(self)
+
@cached_property
def webhooks(self) -> WebhooksResource:
from .resources.webhooks import WebhooksResource
@@ -455,6 +463,12 @@ def tasks(self) -> AsyncTasksResource:
return AsyncTasksResource(self)
+ @cached_property
+ def workflows(self) -> AsyncWorkflowsResource:
+ from .resources.workflows import AsyncWorkflowsResource
+
+ return AsyncWorkflowsResource(self)
+
@cached_property
def webhooks(self) -> AsyncWebhooksResource:
from .resources.webhooks import AsyncWebhooksResource
@@ -657,6 +671,12 @@ def tasks(self) -> tasks.TasksResourceWithRawResponse:
return TasksResourceWithRawResponse(self._client.tasks)
+ @cached_property
+ def workflows(self) -> workflows.WorkflowsResourceWithRawResponse:
+ from .resources.workflows import WorkflowsResourceWithRawResponse
+
+ return WorkflowsResourceWithRawResponse(self._client.workflows)
+
@cached_property
def webhooks(self) -> webhooks.WebhooksResourceWithRawResponse:
from .resources.webhooks import WebhooksResourceWithRawResponse
@@ -736,6 +756,12 @@ def tasks(self) -> tasks.AsyncTasksResourceWithRawResponse:
return AsyncTasksResourceWithRawResponse(self._client.tasks)
+ @cached_property
+ def workflows(self) -> workflows.AsyncWorkflowsResourceWithRawResponse:
+ from .resources.workflows import AsyncWorkflowsResourceWithRawResponse
+
+ return AsyncWorkflowsResourceWithRawResponse(self._client.workflows)
+
@cached_property
def webhooks(self) -> webhooks.AsyncWebhooksResourceWithRawResponse:
from .resources.webhooks import AsyncWebhooksResourceWithRawResponse
@@ -815,6 +841,12 @@ def tasks(self) -> tasks.TasksResourceWithStreamingResponse:
return TasksResourceWithStreamingResponse(self._client.tasks)
+ @cached_property
+ def workflows(self) -> workflows.WorkflowsResourceWithStreamingResponse:
+ from .resources.workflows import WorkflowsResourceWithStreamingResponse
+
+ return WorkflowsResourceWithStreamingResponse(self._client.workflows)
+
@cached_property
def webhooks(self) -> webhooks.WebhooksResourceWithStreamingResponse:
from .resources.webhooks import WebhooksResourceWithStreamingResponse
@@ -894,6 +926,12 @@ def tasks(self) -> tasks.AsyncTasksResourceWithStreamingResponse:
return AsyncTasksResourceWithStreamingResponse(self._client.tasks)
+ @cached_property
+ def workflows(self) -> workflows.AsyncWorkflowsResourceWithStreamingResponse:
+ from .resources.workflows import AsyncWorkflowsResourceWithStreamingResponse
+
+ return AsyncWorkflowsResourceWithStreamingResponse(self._client.workflows)
+
@cached_property
def webhooks(self) -> webhooks.AsyncWebhooksResourceWithStreamingResponse:
from .resources.webhooks import AsyncWebhooksResourceWithStreamingResponse
diff --git a/src/mobilerun_sdk/resources/__init__.py b/src/mobilerun_sdk/resources/__init__.py
index 47cc179..a0e7538 100644
--- a/src/mobilerun_sdk/resources/__init__.py
+++ b/src/mobilerun_sdk/resources/__init__.py
@@ -80,6 +80,14 @@
WebhooksResourceWithStreamingResponse,
AsyncWebhooksResourceWithStreamingResponse,
)
+from .workflows import (
+ WorkflowsResource,
+ AsyncWorkflowsResource,
+ WorkflowsResourceWithRawResponse,
+ AsyncWorkflowsResourceWithRawResponse,
+ WorkflowsResourceWithStreamingResponse,
+ AsyncWorkflowsResourceWithStreamingResponse,
+)
from .credentials import (
CredentialsResource,
AsyncCredentialsResource,
@@ -150,6 +158,12 @@
"AsyncTasksResourceWithRawResponse",
"TasksResourceWithStreamingResponse",
"AsyncTasksResourceWithStreamingResponse",
+ "WorkflowsResource",
+ "AsyncWorkflowsResource",
+ "WorkflowsResourceWithRawResponse",
+ "AsyncWorkflowsResourceWithRawResponse",
+ "WorkflowsResourceWithStreamingResponse",
+ "AsyncWorkflowsResourceWithStreamingResponse",
"WebhooksResource",
"AsyncWebhooksResource",
"WebhooksResourceWithRawResponse",
diff --git a/src/mobilerun_sdk/resources/workflows/__init__.py b/src/mobilerun_sdk/resources/workflows/__init__.py
new file mode 100644
index 0000000..2b80e07
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/__init__.py
@@ -0,0 +1,117 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .flows import (
+ FlowsResource,
+ AsyncFlowsResource,
+ FlowsResourceWithRawResponse,
+ AsyncFlowsResourceWithRawResponse,
+ FlowsResourceWithStreamingResponse,
+ AsyncFlowsResourceWithStreamingResponse,
+)
+from .events import (
+ EventsResource,
+ AsyncEventsResource,
+ EventsResourceWithRawResponse,
+ AsyncEventsResourceWithRawResponse,
+ EventsResourceWithStreamingResponse,
+ AsyncEventsResourceWithStreamingResponse,
+)
+from .actions import (
+ ActionsResource,
+ AsyncActionsResource,
+ ActionsResourceWithRawResponse,
+ AsyncActionsResourceWithRawResponse,
+ ActionsResourceWithStreamingResponse,
+ AsyncActionsResourceWithStreamingResponse,
+)
+from .triggers import (
+ TriggersResource,
+ AsyncTriggersResource,
+ TriggersResourceWithRawResponse,
+ AsyncTriggersResourceWithRawResponse,
+ TriggersResourceWithStreamingResponse,
+ AsyncTriggersResourceWithStreamingResponse,
+)
+from .timezones import (
+ TimezonesResource,
+ AsyncTimezonesResource,
+ TimezonesResourceWithRawResponse,
+ AsyncTimezonesResourceWithRawResponse,
+ TimezonesResourceWithStreamingResponse,
+ AsyncTimezonesResourceWithStreamingResponse,
+)
+from .workflows import (
+ WorkflowsResource,
+ AsyncWorkflowsResource,
+ WorkflowsResourceWithRawResponse,
+ AsyncWorkflowsResourceWithRawResponse,
+ WorkflowsResourceWithStreamingResponse,
+ AsyncWorkflowsResourceWithStreamingResponse,
+)
+from .executions import (
+ ExecutionsResource,
+ AsyncExecutionsResource,
+ ExecutionsResourceWithRawResponse,
+ AsyncExecutionsResourceWithRawResponse,
+ ExecutionsResourceWithStreamingResponse,
+ AsyncExecutionsResourceWithStreamingResponse,
+)
+from .action_catalog import (
+ ActionCatalogResource,
+ AsyncActionCatalogResource,
+ ActionCatalogResourceWithRawResponse,
+ AsyncActionCatalogResourceWithRawResponse,
+ ActionCatalogResourceWithStreamingResponse,
+ AsyncActionCatalogResourceWithStreamingResponse,
+)
+
+__all__ = [
+ "TriggersResource",
+ "AsyncTriggersResource",
+ "TriggersResourceWithRawResponse",
+ "AsyncTriggersResourceWithRawResponse",
+ "TriggersResourceWithStreamingResponse",
+ "AsyncTriggersResourceWithStreamingResponse",
+ "ActionCatalogResource",
+ "AsyncActionCatalogResource",
+ "ActionCatalogResourceWithRawResponse",
+ "AsyncActionCatalogResourceWithRawResponse",
+ "ActionCatalogResourceWithStreamingResponse",
+ "AsyncActionCatalogResourceWithStreamingResponse",
+ "ActionsResource",
+ "AsyncActionsResource",
+ "ActionsResourceWithRawResponse",
+ "AsyncActionsResourceWithRawResponse",
+ "ActionsResourceWithStreamingResponse",
+ "AsyncActionsResourceWithStreamingResponse",
+ "FlowsResource",
+ "AsyncFlowsResource",
+ "FlowsResourceWithRawResponse",
+ "AsyncFlowsResourceWithRawResponse",
+ "FlowsResourceWithStreamingResponse",
+ "AsyncFlowsResourceWithStreamingResponse",
+ "EventsResource",
+ "AsyncEventsResource",
+ "EventsResourceWithRawResponse",
+ "AsyncEventsResourceWithRawResponse",
+ "EventsResourceWithStreamingResponse",
+ "AsyncEventsResourceWithStreamingResponse",
+ "ExecutionsResource",
+ "AsyncExecutionsResource",
+ "ExecutionsResourceWithRawResponse",
+ "AsyncExecutionsResourceWithRawResponse",
+ "ExecutionsResourceWithStreamingResponse",
+ "AsyncExecutionsResourceWithStreamingResponse",
+ "TimezonesResource",
+ "AsyncTimezonesResource",
+ "TimezonesResourceWithRawResponse",
+ "AsyncTimezonesResourceWithRawResponse",
+ "TimezonesResourceWithStreamingResponse",
+ "AsyncTimezonesResourceWithStreamingResponse",
+ "WorkflowsResource",
+ "AsyncWorkflowsResource",
+ "WorkflowsResourceWithRawResponse",
+ "AsyncWorkflowsResourceWithRawResponse",
+ "WorkflowsResourceWithStreamingResponse",
+ "AsyncWorkflowsResourceWithStreamingResponse",
+]
diff --git a/src/mobilerun_sdk/resources/workflows/action_catalog.py b/src/mobilerun_sdk/resources/workflows/action_catalog.py
new file mode 100644
index 0000000..b637dd4
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/action_catalog.py
@@ -0,0 +1,268 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal
+
+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 action_catalog_list_params
+from ...types.workflows.action_catalog_list_response import ActionCatalogListResponse
+from ...types.workflows.action_catalog_retrieve_response import ActionCatalogRetrieveResponse
+
+__all__ = ["ActionCatalogResource", "AsyncActionCatalogResource"]
+
+
+class ActionCatalogResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> ActionCatalogResourceWithRawResponse:
+ """
+ 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 ActionCatalogResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> ActionCatalogResourceWithStreamingResponse:
+ """
+ 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 ActionCatalogResourceWithStreamingResponse(self)
+
+ def retrieve(
+ self,
+ catalog_entry_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,
+ ) -> ActionCatalogRetrieveResponse:
+ """
+ Get a catalog entry
+
+ 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 catalog_entry_id:
+ raise ValueError(f"Expected a non-empty value for `catalog_entry_id` but received {catalog_entry_id!r}")
+ return self._get(
+ path_template("/action-catalog/{catalog_entry_id}", catalog_entry_id=catalog_entry_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionCatalogRetrieveResponse,
+ )
+
+ def list(
+ self,
+ *,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
+ ) -> ActionCatalogListResponse:
+ """
+ List action catalog entries
+
+ 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._get(
+ "/action-catalog",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "page": page,
+ "page_size": page_size,
+ "service": service,
+ },
+ action_catalog_list_params.ActionCatalogListParams,
+ ),
+ ),
+ cast_to=ActionCatalogListResponse,
+ )
+
+
+class AsyncActionCatalogResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncActionCatalogResourceWithRawResponse:
+ """
+ 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 AsyncActionCatalogResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncActionCatalogResourceWithStreamingResponse:
+ """
+ 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 AsyncActionCatalogResourceWithStreamingResponse(self)
+
+ async def retrieve(
+ self,
+ catalog_entry_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,
+ ) -> ActionCatalogRetrieveResponse:
+ """
+ Get a catalog entry
+
+ 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 catalog_entry_id:
+ raise ValueError(f"Expected a non-empty value for `catalog_entry_id` but received {catalog_entry_id!r}")
+ return await self._get(
+ path_template("/action-catalog/{catalog_entry_id}", catalog_entry_id=catalog_entry_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionCatalogRetrieveResponse,
+ )
+
+ async def list(
+ self,
+ *,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
+ ) -> ActionCatalogListResponse:
+ """
+ List action catalog entries
+
+ 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._get(
+ "/action-catalog",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "page": page,
+ "page_size": page_size,
+ "service": service,
+ },
+ action_catalog_list_params.ActionCatalogListParams,
+ ),
+ ),
+ cast_to=ActionCatalogListResponse,
+ )
+
+
+class ActionCatalogResourceWithRawResponse:
+ def __init__(self, action_catalog: ActionCatalogResource) -> None:
+ self._action_catalog = action_catalog
+
+ self.retrieve = to_raw_response_wrapper(
+ action_catalog.retrieve,
+ )
+ self.list = to_raw_response_wrapper(
+ action_catalog.list,
+ )
+
+
+class AsyncActionCatalogResourceWithRawResponse:
+ def __init__(self, action_catalog: AsyncActionCatalogResource) -> None:
+ self._action_catalog = action_catalog
+
+ self.retrieve = async_to_raw_response_wrapper(
+ action_catalog.retrieve,
+ )
+ self.list = async_to_raw_response_wrapper(
+ action_catalog.list,
+ )
+
+
+class ActionCatalogResourceWithStreamingResponse:
+ def __init__(self, action_catalog: ActionCatalogResource) -> None:
+ self._action_catalog = action_catalog
+
+ self.retrieve = to_streamed_response_wrapper(
+ action_catalog.retrieve,
+ )
+ self.list = to_streamed_response_wrapper(
+ action_catalog.list,
+ )
+
+
+class AsyncActionCatalogResourceWithStreamingResponse:
+ def __init__(self, action_catalog: AsyncActionCatalogResource) -> None:
+ self._action_catalog = action_catalog
+
+ self.retrieve = async_to_streamed_response_wrapper(
+ action_catalog.retrieve,
+ )
+ self.list = async_to_streamed_response_wrapper(
+ action_catalog.list,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/actions/__init__.py b/src/mobilerun_sdk/resources/workflows/actions/__init__.py
new file mode 100644
index 0000000..f4307e4
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/actions/__init__.py
@@ -0,0 +1,33 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .actions import (
+ ActionsResource,
+ AsyncActionsResource,
+ ActionsResourceWithRawResponse,
+ AsyncActionsResourceWithRawResponse,
+ ActionsResourceWithStreamingResponse,
+ AsyncActionsResourceWithStreamingResponse,
+)
+from .services import (
+ ServicesResource,
+ AsyncServicesResource,
+ ServicesResourceWithRawResponse,
+ AsyncServicesResourceWithRawResponse,
+ ServicesResourceWithStreamingResponse,
+ AsyncServicesResourceWithStreamingResponse,
+)
+
+__all__ = [
+ "ServicesResource",
+ "AsyncServicesResource",
+ "ServicesResourceWithRawResponse",
+ "AsyncServicesResourceWithRawResponse",
+ "ServicesResourceWithStreamingResponse",
+ "AsyncServicesResourceWithStreamingResponse",
+ "ActionsResource",
+ "AsyncActionsResource",
+ "ActionsResourceWithRawResponse",
+ "AsyncActionsResourceWithRawResponse",
+ "ActionsResourceWithStreamingResponse",
+ "AsyncActionsResourceWithStreamingResponse",
+]
diff --git a/src/mobilerun_sdk/resources/workflows/actions/actions.py b/src/mobilerun_sdk/resources/workflows/actions/actions.py
new file mode 100644
index 0000000..2b4723a
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/actions/actions.py
@@ -0,0 +1,592 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import Literal
+
+import httpx
+
+from .services import (
+ ServicesResource,
+ AsyncServicesResource,
+ ServicesResourceWithRawResponse,
+ AsyncServicesResourceWithRawResponse,
+ ServicesResourceWithStreamingResponse,
+ AsyncServicesResourceWithStreamingResponse,
+)
+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 action_list_params, action_create_params, action_update_params
+from ....types.workflows.action_list_response import ActionListResponse
+from ....types.workflows.action_create_response import ActionCreateResponse
+from ....types.workflows.action_delete_response import ActionDeleteResponse
+from ....types.workflows.action_update_response import ActionUpdateResponse
+from ....types.workflows.action_retrieve_response import ActionRetrieveResponse
+
+__all__ = ["ActionsResource", "AsyncActionsResource"]
+
+
+class ActionsResource(SyncAPIResource):
+ @cached_property
+ def services(self) -> ServicesResource:
+ return ServicesResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> ActionsResourceWithRawResponse:
+ """
+ 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 ActionsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> ActionsResourceWithStreamingResponse:
+ """
+ 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 ActionsResourceWithStreamingResponse(self)
+
+ def create(
+ self,
+ *,
+ catalog_entry_id: str,
+ name: str,
+ description: str | Omit = omit,
+ params: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> ActionCreateResponse:
+ """
+ Create an action
+
+ 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(
+ "/actions",
+ body=maybe_transform(
+ {
+ "catalog_entry_id": catalog_entry_id,
+ "name": name,
+ "description": description,
+ "params": params,
+ },
+ action_create_params.ActionCreateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionCreateResponse,
+ )
+
+ def retrieve(
+ self,
+ action_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,
+ ) -> ActionRetrieveResponse:
+ """
+ Get an action
+
+ 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 action_id:
+ raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
+ return self._get(
+ path_template("/actions/{action_id}", action_id=action_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionRetrieveResponse,
+ )
+
+ def update(
+ self,
+ action_id: str,
+ *,
+ description: str | Omit = omit,
+ name: str | Omit = omit,
+ params: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> ActionUpdateResponse:
+ """
+ Update an action
+
+ 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 action_id:
+ raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
+ return self._patch(
+ path_template("/actions/{action_id}", action_id=action_id),
+ body=maybe_transform(
+ {
+ "description": description,
+ "name": name,
+ "params": params,
+ },
+ action_update_params.ActionUpdateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionUpdateResponse,
+ )
+
+ def list(
+ self,
+ *,
+ order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: str | Omit = omit,
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
+ ) -> ActionListResponse:
+ """
+ List actions
+
+ 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._get(
+ "/actions",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ "service": service,
+ },
+ action_list_params.ActionListParams,
+ ),
+ ),
+ cast_to=ActionListResponse,
+ )
+
+ def delete(
+ self,
+ action_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,
+ ) -> ActionDeleteResponse:
+ """
+ Delete an action
+
+ 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 action_id:
+ raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
+ return self._delete(
+ path_template("/actions/{action_id}", action_id=action_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionDeleteResponse,
+ )
+
+
+class AsyncActionsResource(AsyncAPIResource):
+ @cached_property
+ def services(self) -> AsyncServicesResource:
+ return AsyncServicesResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> AsyncActionsResourceWithRawResponse:
+ """
+ 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 AsyncActionsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncActionsResourceWithStreamingResponse:
+ """
+ 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 AsyncActionsResourceWithStreamingResponse(self)
+
+ async def create(
+ self,
+ *,
+ catalog_entry_id: str,
+ name: str,
+ description: str | Omit = omit,
+ params: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> ActionCreateResponse:
+ """
+ Create an action
+
+ 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(
+ "/actions",
+ body=await async_maybe_transform(
+ {
+ "catalog_entry_id": catalog_entry_id,
+ "name": name,
+ "description": description,
+ "params": params,
+ },
+ action_create_params.ActionCreateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionCreateResponse,
+ )
+
+ async def retrieve(
+ self,
+ action_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,
+ ) -> ActionRetrieveResponse:
+ """
+ Get an action
+
+ 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 action_id:
+ raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
+ return await self._get(
+ path_template("/actions/{action_id}", action_id=action_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionRetrieveResponse,
+ )
+
+ async def update(
+ self,
+ action_id: str,
+ *,
+ description: str | Omit = omit,
+ name: str | Omit = omit,
+ params: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> ActionUpdateResponse:
+ """
+ Update an action
+
+ 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 action_id:
+ raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
+ return await self._patch(
+ path_template("/actions/{action_id}", action_id=action_id),
+ body=await async_maybe_transform(
+ {
+ "description": description,
+ "name": name,
+ "params": params,
+ },
+ action_update_params.ActionUpdateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionUpdateResponse,
+ )
+
+ async def list(
+ self,
+ *,
+ order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: str | Omit = omit,
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"] | 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,
+ ) -> ActionListResponse:
+ """
+ List actions
+
+ 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._get(
+ "/actions",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ "service": service,
+ },
+ action_list_params.ActionListParams,
+ ),
+ ),
+ cast_to=ActionListResponse,
+ )
+
+ async def delete(
+ self,
+ action_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,
+ ) -> ActionDeleteResponse:
+ """
+ Delete an action
+
+ 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 action_id:
+ raise ValueError(f"Expected a non-empty value for `action_id` but received {action_id!r}")
+ return await self._delete(
+ path_template("/actions/{action_id}", action_id=action_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionDeleteResponse,
+ )
+
+
+class ActionsResourceWithRawResponse:
+ def __init__(self, actions: ActionsResource) -> None:
+ self._actions = actions
+
+ self.create = to_raw_response_wrapper(
+ actions.create,
+ )
+ self.retrieve = to_raw_response_wrapper(
+ actions.retrieve,
+ )
+ self.update = to_raw_response_wrapper(
+ actions.update,
+ )
+ self.list = to_raw_response_wrapper(
+ actions.list,
+ )
+ self.delete = to_raw_response_wrapper(
+ actions.delete,
+ )
+
+ @cached_property
+ def services(self) -> ServicesResourceWithRawResponse:
+ return ServicesResourceWithRawResponse(self._actions.services)
+
+
+class AsyncActionsResourceWithRawResponse:
+ def __init__(self, actions: AsyncActionsResource) -> None:
+ self._actions = actions
+
+ self.create = async_to_raw_response_wrapper(
+ actions.create,
+ )
+ self.retrieve = async_to_raw_response_wrapper(
+ actions.retrieve,
+ )
+ self.update = async_to_raw_response_wrapper(
+ actions.update,
+ )
+ self.list = async_to_raw_response_wrapper(
+ actions.list,
+ )
+ self.delete = async_to_raw_response_wrapper(
+ actions.delete,
+ )
+
+ @cached_property
+ def services(self) -> AsyncServicesResourceWithRawResponse:
+ return AsyncServicesResourceWithRawResponse(self._actions.services)
+
+
+class ActionsResourceWithStreamingResponse:
+ def __init__(self, actions: ActionsResource) -> None:
+ self._actions = actions
+
+ self.create = to_streamed_response_wrapper(
+ actions.create,
+ )
+ self.retrieve = to_streamed_response_wrapper(
+ actions.retrieve,
+ )
+ self.update = to_streamed_response_wrapper(
+ actions.update,
+ )
+ self.list = to_streamed_response_wrapper(
+ actions.list,
+ )
+ self.delete = to_streamed_response_wrapper(
+ actions.delete,
+ )
+
+ @cached_property
+ def services(self) -> ServicesResourceWithStreamingResponse:
+ return ServicesResourceWithStreamingResponse(self._actions.services)
+
+
+class AsyncActionsResourceWithStreamingResponse:
+ def __init__(self, actions: AsyncActionsResource) -> None:
+ self._actions = actions
+
+ self.create = async_to_streamed_response_wrapper(
+ actions.create,
+ )
+ self.retrieve = async_to_streamed_response_wrapper(
+ actions.retrieve,
+ )
+ self.update = async_to_streamed_response_wrapper(
+ actions.update,
+ )
+ self.list = async_to_streamed_response_wrapper(
+ actions.list,
+ )
+ self.delete = async_to_streamed_response_wrapper(
+ actions.delete,
+ )
+
+ @cached_property
+ def services(self) -> AsyncServicesResourceWithStreamingResponse:
+ return AsyncServicesResourceWithStreamingResponse(self._actions.services)
diff --git a/src/mobilerun_sdk/resources/workflows/actions/services.py b/src/mobilerun_sdk/resources/workflows/actions/services.py
new file mode 100644
index 0000000..fd46c48
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/actions/services.py
@@ -0,0 +1,215 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+import httpx
+
+from ...._types import Body, Query, Headers, NotGiven, not_given
+from ...._utils import path_template
+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.actions.service_list_response import ServiceListResponse
+from ....types.workflows.actions.service_list_methods_response import ServiceListMethodsResponse
+
+__all__ = ["ServicesResource", "AsyncServicesResource"]
+
+
+class ServicesResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> ServicesResourceWithRawResponse:
+ """
+ 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 ServicesResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> ServicesResourceWithStreamingResponse:
+ """
+ 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 ServicesResourceWithStreamingResponse(self)
+
+ 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,
+ ) -> ServiceListResponse:
+ """List available services"""
+ return self._get(
+ "/actions/services",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ServiceListResponse,
+ )
+
+ def list_methods(
+ self,
+ service: 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,
+ ) -> ServiceListMethodsResponse:
+ """
+ List allowed methods for a service
+
+ 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 service:
+ raise ValueError(f"Expected a non-empty value for `service` but received {service!r}")
+ return self._get(
+ path_template("/actions/services/{service}/methods", service=service),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ServiceListMethodsResponse,
+ )
+
+
+class AsyncServicesResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncServicesResourceWithRawResponse:
+ """
+ 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 AsyncServicesResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncServicesResourceWithStreamingResponse:
+ """
+ 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 AsyncServicesResourceWithStreamingResponse(self)
+
+ 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,
+ ) -> ServiceListResponse:
+ """List available services"""
+ return await self._get(
+ "/actions/services",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ServiceListResponse,
+ )
+
+ async def list_methods(
+ self,
+ service: 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,
+ ) -> ServiceListMethodsResponse:
+ """
+ List allowed methods for a service
+
+ 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 service:
+ raise ValueError(f"Expected a non-empty value for `service` but received {service!r}")
+ return await self._get(
+ path_template("/actions/services/{service}/methods", service=service),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ServiceListMethodsResponse,
+ )
+
+
+class ServicesResourceWithRawResponse:
+ def __init__(self, services: ServicesResource) -> None:
+ self._services = services
+
+ self.list = to_raw_response_wrapper(
+ services.list,
+ )
+ self.list_methods = to_raw_response_wrapper(
+ services.list_methods,
+ )
+
+
+class AsyncServicesResourceWithRawResponse:
+ def __init__(self, services: AsyncServicesResource) -> None:
+ self._services = services
+
+ self.list = async_to_raw_response_wrapper(
+ services.list,
+ )
+ self.list_methods = async_to_raw_response_wrapper(
+ services.list_methods,
+ )
+
+
+class ServicesResourceWithStreamingResponse:
+ def __init__(self, services: ServicesResource) -> None:
+ self._services = services
+
+ self.list = to_streamed_response_wrapper(
+ services.list,
+ )
+ self.list_methods = to_streamed_response_wrapper(
+ services.list_methods,
+ )
+
+
+class AsyncServicesResourceWithStreamingResponse:
+ def __init__(self, services: AsyncServicesResource) -> None:
+ self._services = services
+
+ self.list = async_to_streamed_response_wrapper(
+ services.list,
+ )
+ self.list_methods = async_to_streamed_response_wrapper(
+ services.list_methods,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/events/__init__.py b/src/mobilerun_sdk/resources/workflows/events/__init__.py
new file mode 100644
index 0000000..2c1e382
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/events/__init__.py
@@ -0,0 +1,33 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .events import (
+ EventsResource,
+ AsyncEventsResource,
+ EventsResourceWithRawResponse,
+ AsyncEventsResourceWithRawResponse,
+ EventsResourceWithStreamingResponse,
+ AsyncEventsResourceWithStreamingResponse,
+)
+from .catalog import (
+ CatalogResource,
+ AsyncCatalogResource,
+ CatalogResourceWithRawResponse,
+ AsyncCatalogResourceWithRawResponse,
+ CatalogResourceWithStreamingResponse,
+ AsyncCatalogResourceWithStreamingResponse,
+)
+
+__all__ = [
+ "CatalogResource",
+ "AsyncCatalogResource",
+ "CatalogResourceWithRawResponse",
+ "AsyncCatalogResourceWithRawResponse",
+ "CatalogResourceWithStreamingResponse",
+ "AsyncCatalogResourceWithStreamingResponse",
+ "EventsResource",
+ "AsyncEventsResource",
+ "EventsResourceWithRawResponse",
+ "AsyncEventsResourceWithRawResponse",
+ "EventsResourceWithStreamingResponse",
+ "AsyncEventsResourceWithStreamingResponse",
+]
diff --git a/src/mobilerun_sdk/resources/workflows/events/catalog.py b/src/mobilerun_sdk/resources/workflows/events/catalog.py
new file mode 100644
index 0000000..73c22cc
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/events/catalog.py
@@ -0,0 +1,267 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Iterable
+from typing_extensions import Literal
+
+import httpx
+
+from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
+from ...._utils import 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.events import catalog_list_params, catalog_register_params
+from ....types.workflows.events.catalog_list_response import CatalogListResponse
+from ....types.workflows.events.catalog_register_response import CatalogRegisterResponse
+
+__all__ = ["CatalogResource", "AsyncCatalogResource"]
+
+
+class CatalogResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> CatalogResourceWithRawResponse:
+ """
+ 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 CatalogResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> CatalogResourceWithStreamingResponse:
+ """
+ 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 CatalogResourceWithStreamingResponse(self)
+
+ def list(
+ self,
+ *,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ source: Literal["device", "system", "webhook"] | 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,
+ ) -> CatalogListResponse:
+ """
+ List event catalog
+
+ 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._get(
+ "/events/catalog",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "page": page,
+ "page_size": page_size,
+ "source": source,
+ },
+ catalog_list_params.CatalogListParams,
+ ),
+ ),
+ cast_to=CatalogListResponse,
+ )
+
+ def register(
+ self,
+ *,
+ events: Iterable[catalog_register_params.Event],
+ # 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,
+ ) -> CatalogRegisterResponse:
+ """
+ Register event types in the catalog
+
+ 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(
+ "/events/catalog/register",
+ body=maybe_transform({"events": events}, catalog_register_params.CatalogRegisterParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CatalogRegisterResponse,
+ )
+
+
+class AsyncCatalogResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncCatalogResourceWithRawResponse:
+ """
+ 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 AsyncCatalogResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncCatalogResourceWithStreamingResponse:
+ """
+ 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 AsyncCatalogResourceWithStreamingResponse(self)
+
+ async def list(
+ self,
+ *,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ source: Literal["device", "system", "webhook"] | 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,
+ ) -> CatalogListResponse:
+ """
+ List event catalog
+
+ 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._get(
+ "/events/catalog",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "page": page,
+ "page_size": page_size,
+ "source": source,
+ },
+ catalog_list_params.CatalogListParams,
+ ),
+ ),
+ cast_to=CatalogListResponse,
+ )
+
+ async def register(
+ self,
+ *,
+ events: Iterable[catalog_register_params.Event],
+ # 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,
+ ) -> CatalogRegisterResponse:
+ """
+ Register event types in the catalog
+
+ 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(
+ "/events/catalog/register",
+ body=await async_maybe_transform({"events": events}, catalog_register_params.CatalogRegisterParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CatalogRegisterResponse,
+ )
+
+
+class CatalogResourceWithRawResponse:
+ def __init__(self, catalog: CatalogResource) -> None:
+ self._catalog = catalog
+
+ self.list = to_raw_response_wrapper(
+ catalog.list,
+ )
+ self.register = to_raw_response_wrapper(
+ catalog.register,
+ )
+
+
+class AsyncCatalogResourceWithRawResponse:
+ def __init__(self, catalog: AsyncCatalogResource) -> None:
+ self._catalog = catalog
+
+ self.list = async_to_raw_response_wrapper(
+ catalog.list,
+ )
+ self.register = async_to_raw_response_wrapper(
+ catalog.register,
+ )
+
+
+class CatalogResourceWithStreamingResponse:
+ def __init__(self, catalog: CatalogResource) -> None:
+ self._catalog = catalog
+
+ self.list = to_streamed_response_wrapper(
+ catalog.list,
+ )
+ self.register = to_streamed_response_wrapper(
+ catalog.register,
+ )
+
+
+class AsyncCatalogResourceWithStreamingResponse:
+ def __init__(self, catalog: AsyncCatalogResource) -> None:
+ self._catalog = catalog
+
+ self.list = async_to_streamed_response_wrapper(
+ catalog.list,
+ )
+ self.register = async_to_streamed_response_wrapper(
+ catalog.register,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/events/events.py b/src/mobilerun_sdk/resources/workflows/events/events.py
new file mode 100644
index 0000000..450f4bb
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/events/events.py
@@ -0,0 +1,308 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+
+import httpx
+
+from .catalog import (
+ CatalogResource,
+ AsyncCatalogResource,
+ CatalogResourceWithRawResponse,
+ AsyncCatalogResourceWithRawResponse,
+ CatalogResourceWithStreamingResponse,
+ AsyncCatalogResourceWithStreamingResponse,
+)
+from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
+from ...._utils import 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 event_ingest_params, event_dry_run_params
+from ....types.workflows.event_ingest_response import EventIngestResponse
+from ....types.workflows.event_dry_run_response import EventDryRunResponse
+
+__all__ = ["EventsResource", "AsyncEventsResource"]
+
+
+class EventsResource(SyncAPIResource):
+ @cached_property
+ def catalog(self) -> CatalogResource:
+ return CatalogResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> EventsResourceWithRawResponse:
+ """
+ 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 EventsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> EventsResourceWithStreamingResponse:
+ """
+ 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 EventsResourceWithStreamingResponse(self)
+
+ def dry_run(
+ self,
+ *,
+ event_type: str,
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> EventDryRunResponse:
+ """Simulate an event against all configured flows.
+
+ Returns which flows would match
+ and what actions would run, without storing the event or enqueuing jobs.
+
+ 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(
+ "/events/dry-run",
+ body=maybe_transform(
+ {
+ "event_type": event_type,
+ "payload": payload,
+ },
+ event_dry_run_params.EventDryRunParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=EventDryRunResponse,
+ )
+
+ def ingest(
+ self,
+ *,
+ event_type: str,
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> EventIngestResponse:
+ """Ingest an event for trigger evaluation.
+
+ Returns immediately with 202 Accepted.
+
+ 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(
+ "/events/ingest",
+ body=maybe_transform(
+ {
+ "event_type": event_type,
+ "payload": payload,
+ },
+ event_ingest_params.EventIngestParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=EventIngestResponse,
+ )
+
+
+class AsyncEventsResource(AsyncAPIResource):
+ @cached_property
+ def catalog(self) -> AsyncCatalogResource:
+ return AsyncCatalogResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> AsyncEventsResourceWithRawResponse:
+ """
+ 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 AsyncEventsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncEventsResourceWithStreamingResponse:
+ """
+ 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 AsyncEventsResourceWithStreamingResponse(self)
+
+ async def dry_run(
+ self,
+ *,
+ event_type: str,
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> EventDryRunResponse:
+ """Simulate an event against all configured flows.
+
+ Returns which flows would match
+ and what actions would run, without storing the event or enqueuing jobs.
+
+ 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(
+ "/events/dry-run",
+ body=await async_maybe_transform(
+ {
+ "event_type": event_type,
+ "payload": payload,
+ },
+ event_dry_run_params.EventDryRunParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=EventDryRunResponse,
+ )
+
+ async def ingest(
+ self,
+ *,
+ event_type: str,
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> EventIngestResponse:
+ """Ingest an event for trigger evaluation.
+
+ Returns immediately with 202 Accepted.
+
+ 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(
+ "/events/ingest",
+ body=await async_maybe_transform(
+ {
+ "event_type": event_type,
+ "payload": payload,
+ },
+ event_ingest_params.EventIngestParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=EventIngestResponse,
+ )
+
+
+class EventsResourceWithRawResponse:
+ def __init__(self, events: EventsResource) -> None:
+ self._events = events
+
+ self.dry_run = to_raw_response_wrapper(
+ events.dry_run,
+ )
+ self.ingest = to_raw_response_wrapper(
+ events.ingest,
+ )
+
+ @cached_property
+ def catalog(self) -> CatalogResourceWithRawResponse:
+ return CatalogResourceWithRawResponse(self._events.catalog)
+
+
+class AsyncEventsResourceWithRawResponse:
+ def __init__(self, events: AsyncEventsResource) -> None:
+ self._events = events
+
+ self.dry_run = async_to_raw_response_wrapper(
+ events.dry_run,
+ )
+ self.ingest = async_to_raw_response_wrapper(
+ events.ingest,
+ )
+
+ @cached_property
+ def catalog(self) -> AsyncCatalogResourceWithRawResponse:
+ return AsyncCatalogResourceWithRawResponse(self._events.catalog)
+
+
+class EventsResourceWithStreamingResponse:
+ def __init__(self, events: EventsResource) -> None:
+ self._events = events
+
+ self.dry_run = to_streamed_response_wrapper(
+ events.dry_run,
+ )
+ self.ingest = to_streamed_response_wrapper(
+ events.ingest,
+ )
+
+ @cached_property
+ def catalog(self) -> CatalogResourceWithStreamingResponse:
+ return CatalogResourceWithStreamingResponse(self._events.catalog)
+
+
+class AsyncEventsResourceWithStreamingResponse:
+ def __init__(self, events: AsyncEventsResource) -> None:
+ self._events = events
+
+ self.dry_run = async_to_streamed_response_wrapper(
+ events.dry_run,
+ )
+ self.ingest = async_to_streamed_response_wrapper(
+ events.ingest,
+ )
+
+ @cached_property
+ def catalog(self) -> AsyncCatalogResourceWithStreamingResponse:
+ return AsyncCatalogResourceWithStreamingResponse(self._events.catalog)
diff --git a/src/mobilerun_sdk/resources/workflows/executions.py b/src/mobilerun_sdk/resources/workflows/executions.py
new file mode 100644
index 0000000..4d12f2d
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/executions.py
@@ -0,0 +1,402 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Optional
+from typing_extensions import Literal
+
+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 execution_list_params, execution_get_metrics_params
+from ...types.workflows.execution_list_response import ExecutionListResponse
+from ...types.workflows.execution_retrieve_response import ExecutionRetrieveResponse
+from ...types.workflows.execution_get_metrics_response import ExecutionGetMetricsResponse
+
+__all__ = ["ExecutionsResource", "AsyncExecutionsResource"]
+
+
+class ExecutionsResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> ExecutionsResourceWithRawResponse:
+ """
+ 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 ExecutionsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> ExecutionsResourceWithStreamingResponse:
+ """
+ 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 ExecutionsResourceWithStreamingResponse(self)
+
+ def retrieve(
+ self,
+ execution_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,
+ ) -> ExecutionRetrieveResponse:
+ """
+ Get execution details
+
+ 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 execution_id:
+ raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}")
+ return self._get(
+ path_template("/executions/{execution_id}", execution_id=execution_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ExecutionRetrieveResponse,
+ )
+
+ def list(
+ self,
+ *,
+ flow_id: str | Omit = omit,
+ from_: Optional[str] | Omit = omit,
+ order_by: Literal["startedAt", "finishedAt", "status"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: str | 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.
+ # 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,
+ ) -> ExecutionListResponse:
+ """
+ List flow executions
+
+ 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._get(
+ "/executions",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "flow_id": flow_id,
+ "from_": from_,
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ "status": status,
+ "to": to,
+ "trigger_id": trigger_id,
+ },
+ execution_list_params.ExecutionListParams,
+ ),
+ ),
+ cast_to=ExecutionListResponse,
+ )
+
+ def get_metrics(
+ self,
+ *,
+ flow_id: str | Omit = omit,
+ from_: Optional[str] | 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.
+ # 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,
+ ) -> ExecutionGetMetricsResponse:
+ """
+ Get execution metrics
+
+ 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._get(
+ "/executions/metrics",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "flow_id": flow_id,
+ "from_": from_,
+ "to": to,
+ "trigger_id": trigger_id,
+ },
+ execution_get_metrics_params.ExecutionGetMetricsParams,
+ ),
+ ),
+ cast_to=ExecutionGetMetricsResponse,
+ )
+
+
+class AsyncExecutionsResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncExecutionsResourceWithRawResponse:
+ """
+ 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 AsyncExecutionsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncExecutionsResourceWithStreamingResponse:
+ """
+ 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 AsyncExecutionsResourceWithStreamingResponse(self)
+
+ async def retrieve(
+ self,
+ execution_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,
+ ) -> ExecutionRetrieveResponse:
+ """
+ Get execution details
+
+ 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 execution_id:
+ raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}")
+ return await self._get(
+ path_template("/executions/{execution_id}", execution_id=execution_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ExecutionRetrieveResponse,
+ )
+
+ async def list(
+ self,
+ *,
+ flow_id: str | Omit = omit,
+ from_: Optional[str] | Omit = omit,
+ order_by: Literal["startedAt", "finishedAt", "status"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: str | 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.
+ # 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,
+ ) -> ExecutionListResponse:
+ """
+ List flow executions
+
+ 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._get(
+ "/executions",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "flow_id": flow_id,
+ "from_": from_,
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ "status": status,
+ "to": to,
+ "trigger_id": trigger_id,
+ },
+ execution_list_params.ExecutionListParams,
+ ),
+ ),
+ cast_to=ExecutionListResponse,
+ )
+
+ async def get_metrics(
+ self,
+ *,
+ flow_id: str | Omit = omit,
+ from_: Optional[str] | 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.
+ # 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,
+ ) -> ExecutionGetMetricsResponse:
+ """
+ Get execution metrics
+
+ 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._get(
+ "/executions/metrics",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "flow_id": flow_id,
+ "from_": from_,
+ "to": to,
+ "trigger_id": trigger_id,
+ },
+ execution_get_metrics_params.ExecutionGetMetricsParams,
+ ),
+ ),
+ cast_to=ExecutionGetMetricsResponse,
+ )
+
+
+class ExecutionsResourceWithRawResponse:
+ def __init__(self, executions: ExecutionsResource) -> None:
+ self._executions = executions
+
+ self.retrieve = to_raw_response_wrapper(
+ executions.retrieve,
+ )
+ self.list = to_raw_response_wrapper(
+ executions.list,
+ )
+ self.get_metrics = to_raw_response_wrapper(
+ executions.get_metrics,
+ )
+
+
+class AsyncExecutionsResourceWithRawResponse:
+ def __init__(self, executions: AsyncExecutionsResource) -> None:
+ self._executions = executions
+
+ self.retrieve = async_to_raw_response_wrapper(
+ executions.retrieve,
+ )
+ self.list = async_to_raw_response_wrapper(
+ executions.list,
+ )
+ self.get_metrics = async_to_raw_response_wrapper(
+ executions.get_metrics,
+ )
+
+
+class ExecutionsResourceWithStreamingResponse:
+ def __init__(self, executions: ExecutionsResource) -> None:
+ self._executions = executions
+
+ self.retrieve = to_streamed_response_wrapper(
+ executions.retrieve,
+ )
+ self.list = to_streamed_response_wrapper(
+ executions.list,
+ )
+ self.get_metrics = to_streamed_response_wrapper(
+ executions.get_metrics,
+ )
+
+
+class AsyncExecutionsResourceWithStreamingResponse:
+ def __init__(self, executions: AsyncExecutionsResource) -> None:
+ self._executions = executions
+
+ self.retrieve = async_to_streamed_response_wrapper(
+ executions.retrieve,
+ )
+ self.list = async_to_streamed_response_wrapper(
+ executions.list,
+ )
+ self.get_metrics = async_to_streamed_response_wrapper(
+ executions.get_metrics,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/flows/__init__.py b/src/mobilerun_sdk/resources/workflows/flows/__init__.py
new file mode 100644
index 0000000..bfeb155
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/flows/__init__.py
@@ -0,0 +1,33 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .flows import (
+ FlowsResource,
+ AsyncFlowsResource,
+ FlowsResourceWithRawResponse,
+ AsyncFlowsResourceWithRawResponse,
+ FlowsResourceWithStreamingResponse,
+ AsyncFlowsResourceWithStreamingResponse,
+)
+from .actions import (
+ ActionsResource,
+ AsyncActionsResource,
+ ActionsResourceWithRawResponse,
+ AsyncActionsResourceWithRawResponse,
+ ActionsResourceWithStreamingResponse,
+ AsyncActionsResourceWithStreamingResponse,
+)
+
+__all__ = [
+ "ActionsResource",
+ "AsyncActionsResource",
+ "ActionsResourceWithRawResponse",
+ "AsyncActionsResourceWithRawResponse",
+ "ActionsResourceWithStreamingResponse",
+ "AsyncActionsResourceWithStreamingResponse",
+ "FlowsResource",
+ "AsyncFlowsResource",
+ "FlowsResourceWithRawResponse",
+ "AsyncFlowsResourceWithRawResponse",
+ "FlowsResourceWithStreamingResponse",
+ "AsyncFlowsResourceWithStreamingResponse",
+]
diff --git a/src/mobilerun_sdk/resources/workflows/flows/actions.py b/src/mobilerun_sdk/resources/workflows/flows/actions.py
new file mode 100644
index 0000000..06e3278
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/flows/actions.py
@@ -0,0 +1,454 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Iterable, Optional
+
+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.flows import action_add_params, action_replace_params
+from ....types.workflows.flows.action_add_response import ActionAddResponse
+from ....types.workflows.flows.action_list_response import ActionListResponse
+from ....types.workflows.flow_action_overrides_param import FlowActionOverridesParam
+from ....types.workflows.flows.action_remove_response import ActionRemoveResponse
+from ....types.workflows.flow_child_action_input_param import FlowChildActionInputParam
+from ....types.workflows.flows.action_replace_response import ActionReplaceResponse
+
+__all__ = ["ActionsResource", "AsyncActionsResource"]
+
+
+class ActionsResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> ActionsResourceWithRawResponse:
+ """
+ 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 ActionsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> ActionsResourceWithStreamingResponse:
+ """
+ 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 ActionsResourceWithStreamingResponse(self)
+
+ def list(
+ self,
+ flow_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,
+ ) -> ActionListResponse:
+ """
+ List actions for a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._get(
+ path_template("/flows/{flow_id}/actions", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionListResponse,
+ )
+
+ def add(
+ self,
+ flow_id: str,
+ *,
+ action_id: str,
+ position: int,
+ children: Iterable[FlowChildActionInputParam] | Omit = omit,
+ continue_on_error: bool | Omit = omit,
+ name_override: str | Omit = omit,
+ overrides: Optional[FlowActionOverridesParam] | Omit = omit,
+ parent_flow_action_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,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> ActionAddResponse:
+ """
+ Add an action to a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._post(
+ path_template("/flows/{flow_id}/actions", flow_id=flow_id),
+ body=maybe_transform(
+ {
+ "action_id": action_id,
+ "position": position,
+ "children": children,
+ "continue_on_error": continue_on_error,
+ "name_override": name_override,
+ "overrides": overrides,
+ "parent_flow_action_id": parent_flow_action_id,
+ },
+ action_add_params.ActionAddParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionAddResponse,
+ )
+
+ def remove(
+ self,
+ flow_action_id: str,
+ *,
+ flow_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,
+ ) -> ActionRemoveResponse:
+ """
+ Remove an action from a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ if not flow_action_id:
+ raise ValueError(f"Expected a non-empty value for `flow_action_id` but received {flow_action_id!r}")
+ return self._delete(
+ path_template("/flows/{flow_id}/actions/{flow_action_id}", flow_id=flow_id, flow_action_id=flow_action_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionRemoveResponse,
+ )
+
+ def replace(
+ self,
+ flow_id: str,
+ *,
+ actions: Iterable[action_replace_params.Action],
+ # 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,
+ ) -> ActionReplaceResponse:
+ """
+ Replace all actions for a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._put(
+ path_template("/flows/{flow_id}/actions", flow_id=flow_id),
+ body=maybe_transform({"actions": actions}, action_replace_params.ActionReplaceParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionReplaceResponse,
+ )
+
+
+class AsyncActionsResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncActionsResourceWithRawResponse:
+ """
+ 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 AsyncActionsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncActionsResourceWithStreamingResponse:
+ """
+ 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 AsyncActionsResourceWithStreamingResponse(self)
+
+ async def list(
+ self,
+ flow_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,
+ ) -> ActionListResponse:
+ """
+ List actions for a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return await self._get(
+ path_template("/flows/{flow_id}/actions", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionListResponse,
+ )
+
+ async def add(
+ self,
+ flow_id: str,
+ *,
+ action_id: str,
+ position: int,
+ children: Iterable[FlowChildActionInputParam] | Omit = omit,
+ continue_on_error: bool | Omit = omit,
+ name_override: str | Omit = omit,
+ overrides: Optional[FlowActionOverridesParam] | Omit = omit,
+ parent_flow_action_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,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> ActionAddResponse:
+ """
+ Add an action to a flow
+
+ 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 flow_id:
+ 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}/actions", flow_id=flow_id),
+ body=await async_maybe_transform(
+ {
+ "action_id": action_id,
+ "position": position,
+ "children": children,
+ "continue_on_error": continue_on_error,
+ "name_override": name_override,
+ "overrides": overrides,
+ "parent_flow_action_id": parent_flow_action_id,
+ },
+ action_add_params.ActionAddParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionAddResponse,
+ )
+
+ async def remove(
+ self,
+ flow_action_id: str,
+ *,
+ flow_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,
+ ) -> ActionRemoveResponse:
+ """
+ Remove an action from a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ if not flow_action_id:
+ raise ValueError(f"Expected a non-empty value for `flow_action_id` but received {flow_action_id!r}")
+ return await self._delete(
+ path_template("/flows/{flow_id}/actions/{flow_action_id}", flow_id=flow_id, flow_action_id=flow_action_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionRemoveResponse,
+ )
+
+ async def replace(
+ self,
+ flow_id: str,
+ *,
+ actions: Iterable[action_replace_params.Action],
+ # 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,
+ ) -> ActionReplaceResponse:
+ """
+ Replace all actions for a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return await self._put(
+ path_template("/flows/{flow_id}/actions", flow_id=flow_id),
+ body=await async_maybe_transform({"actions": actions}, action_replace_params.ActionReplaceParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=ActionReplaceResponse,
+ )
+
+
+class ActionsResourceWithRawResponse:
+ def __init__(self, actions: ActionsResource) -> None:
+ self._actions = actions
+
+ self.list = to_raw_response_wrapper(
+ actions.list,
+ )
+ self.add = to_raw_response_wrapper(
+ actions.add,
+ )
+ self.remove = to_raw_response_wrapper(
+ actions.remove,
+ )
+ self.replace = to_raw_response_wrapper(
+ actions.replace,
+ )
+
+
+class AsyncActionsResourceWithRawResponse:
+ def __init__(self, actions: AsyncActionsResource) -> None:
+ self._actions = actions
+
+ self.list = async_to_raw_response_wrapper(
+ actions.list,
+ )
+ self.add = async_to_raw_response_wrapper(
+ actions.add,
+ )
+ self.remove = async_to_raw_response_wrapper(
+ actions.remove,
+ )
+ self.replace = async_to_raw_response_wrapper(
+ actions.replace,
+ )
+
+
+class ActionsResourceWithStreamingResponse:
+ def __init__(self, actions: ActionsResource) -> None:
+ self._actions = actions
+
+ self.list = to_streamed_response_wrapper(
+ actions.list,
+ )
+ self.add = to_streamed_response_wrapper(
+ actions.add,
+ )
+ self.remove = to_streamed_response_wrapper(
+ actions.remove,
+ )
+ self.replace = to_streamed_response_wrapper(
+ actions.replace,
+ )
+
+
+class AsyncActionsResourceWithStreamingResponse:
+ def __init__(self, actions: AsyncActionsResource) -> None:
+ self._actions = actions
+
+ self.list = async_to_streamed_response_wrapper(
+ actions.list,
+ )
+ self.add = async_to_streamed_response_wrapper(
+ actions.add,
+ )
+ self.remove = async_to_streamed_response_wrapper(
+ actions.remove,
+ )
+ self.replace = async_to_streamed_response_wrapper(
+ actions.replace,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/flows/flows.py b/src/mobilerun_sdk/resources/workflows/flows/flows.py
new file mode 100644
index 0000000..c1acea9
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/flows/flows.py
@@ -0,0 +1,836 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import List, Iterable, Optional
+from typing_extensions import Literal
+
+import httpx
+
+from .actions import (
+ ActionsResource,
+ AsyncActionsResource,
+ ActionsResourceWithRawResponse,
+ AsyncActionsResourceWithRawResponse,
+ ActionsResourceWithStreamingResponse,
+ AsyncActionsResourceWithStreamingResponse,
+)
+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
+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 flow_list_params, flow_clone_params, flow_create_params, flow_update_params
+from ....types.workflows.flow_list_response import FlowListResponse
+from ....types.workflows.flow_clone_response import FlowCloneResponse
+from ....types.workflows.flow_create_response import FlowCreateResponse
+from ....types.workflows.flow_delete_response import FlowDeleteResponse
+from ....types.workflows.flow_update_response import FlowUpdateResponse
+from ....types.workflows.flow_unblock_response import FlowUnblockResponse
+from ....types.workflows.flow_retrieve_response import FlowRetrieveResponse
+
+__all__ = ["FlowsResource", "AsyncFlowsResource"]
+
+
+class FlowsResource(SyncAPIResource):
+ @cached_property
+ def actions(self) -> ActionsResource:
+ return ActionsResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> FlowsResourceWithRawResponse:
+ """
+ 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 FlowsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> FlowsResourceWithStreamingResponse:
+ """
+ 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 FlowsResourceWithStreamingResponse(self)
+
+ def create(
+ self,
+ *,
+ actions: Iterable[flow_create_params.Action],
+ name: str,
+ trigger_id: str,
+ 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,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowCreateResponse:
+ """
+ Create a flow
+
+ 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(
+ "/flows",
+ body=maybe_transform(
+ {
+ "actions": actions,
+ "name": name,
+ "trigger_id": trigger_id,
+ "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,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowCreateResponse,
+ )
+
+ def retrieve(
+ self,
+ flow_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,
+ ) -> FlowRetrieveResponse:
+ """
+ Get a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._get(
+ path_template("/flows/{flow_id}", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowRetrieveResponse,
+ )
+
+ def update(
+ self,
+ flow_id: str,
+ *,
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowUpdateResponse:
+ """
+ Update a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._patch(
+ path_template("/flows/{flow_id}", flow_id=flow_id),
+ body=maybe_transform(
+ {
+ "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,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowUpdateResponse,
+ )
+
+ def list(
+ self,
+ *,
+ enabled: Optional[bool] | Omit = omit,
+ order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: str | Omit = omit,
+ status: List[Literal["healthy", "failing", "blocked"]] | 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowListResponse:
+ """
+ List flows
+
+ 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._get(
+ "/flows",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "enabled": enabled,
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ "status": status,
+ "trigger_id": trigger_id,
+ },
+ flow_list_params.FlowListParams,
+ ),
+ ),
+ cast_to=FlowListResponse,
+ )
+
+ def delete(
+ self,
+ flow_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,
+ ) -> FlowDeleteResponse:
+ """
+ Delete a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._delete(
+ path_template("/flows/{flow_id}", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowDeleteResponse,
+ )
+
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowCloneResponse:
+ """
+ Clone a flow
+
+ 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 flow_id:
+ 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(
+ {
+ "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
+ ),
+ cast_to=FlowCloneResponse,
+ )
+
+ def unblock(
+ self,
+ flow_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,
+ ) -> FlowUnblockResponse:
+ """Clear a flow's blocked status after fixing the underlying issue.
+
+ Idempotent —
+ safe to call on already-healthy flows.
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return self._post(
+ path_template("/flows/{flow_id}/unblock", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowUnblockResponse,
+ )
+
+
+class AsyncFlowsResource(AsyncAPIResource):
+ @cached_property
+ def actions(self) -> AsyncActionsResource:
+ return AsyncActionsResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> AsyncFlowsResourceWithRawResponse:
+ """
+ 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 AsyncFlowsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncFlowsResourceWithStreamingResponse:
+ """
+ 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 AsyncFlowsResourceWithStreamingResponse(self)
+
+ async def create(
+ self,
+ *,
+ actions: Iterable[flow_create_params.Action],
+ name: str,
+ trigger_id: str,
+ 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,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowCreateResponse:
+ """
+ Create a flow
+
+ 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(
+ "/flows",
+ body=await async_maybe_transform(
+ {
+ "actions": actions,
+ "name": name,
+ "trigger_id": trigger_id,
+ "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,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowCreateResponse,
+ )
+
+ async def retrieve(
+ self,
+ flow_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,
+ ) -> FlowRetrieveResponse:
+ """
+ Get a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return await self._get(
+ path_template("/flows/{flow_id}", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowRetrieveResponse,
+ )
+
+ async def update(
+ self,
+ flow_id: str,
+ *,
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowUpdateResponse:
+ """
+ Update a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return await self._patch(
+ path_template("/flows/{flow_id}", flow_id=flow_id),
+ body=await async_maybe_transform(
+ {
+ "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,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowUpdateResponse,
+ )
+
+ async def list(
+ self,
+ *,
+ enabled: Optional[bool] | Omit = omit,
+ order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: str | Omit = omit,
+ status: List[Literal["healthy", "failing", "blocked"]] | 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowListResponse:
+ """
+ List flows
+
+ 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._get(
+ "/flows",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "enabled": enabled,
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ "status": status,
+ "trigger_id": trigger_id,
+ },
+ flow_list_params.FlowListParams,
+ ),
+ ),
+ cast_to=FlowListResponse,
+ )
+
+ async def delete(
+ self,
+ flow_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,
+ ) -> FlowDeleteResponse:
+ """
+ Delete a flow
+
+ 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 flow_id:
+ raise ValueError(f"Expected a non-empty value for `flow_id` but received {flow_id!r}")
+ return await self._delete(
+ path_template("/flows/{flow_id}", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowDeleteResponse,
+ )
+
+ 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> FlowCloneResponse:
+ """
+ Clone a flow
+
+ 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 flow_id:
+ 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(
+ {
+ "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
+ ),
+ cast_to=FlowCloneResponse,
+ )
+
+ async def unblock(
+ self,
+ flow_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,
+ ) -> FlowUnblockResponse:
+ """Clear a flow's blocked status after fixing the underlying issue.
+
+ Idempotent —
+ safe to call on already-healthy flows.
+
+ 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 flow_id:
+ 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}/unblock", flow_id=flow_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=FlowUnblockResponse,
+ )
+
+
+class FlowsResourceWithRawResponse:
+ def __init__(self, flows: FlowsResource) -> None:
+ self._flows = flows
+
+ self.create = to_raw_response_wrapper(
+ flows.create,
+ )
+ self.retrieve = to_raw_response_wrapper(
+ flows.retrieve,
+ )
+ self.update = to_raw_response_wrapper(
+ flows.update,
+ )
+ self.list = to_raw_response_wrapper(
+ flows.list,
+ )
+ self.delete = to_raw_response_wrapper(
+ flows.delete,
+ )
+ self.clone = to_raw_response_wrapper(
+ flows.clone,
+ )
+ self.unblock = to_raw_response_wrapper(
+ flows.unblock,
+ )
+
+ @cached_property
+ def actions(self) -> ActionsResourceWithRawResponse:
+ return ActionsResourceWithRawResponse(self._flows.actions)
+
+
+class AsyncFlowsResourceWithRawResponse:
+ def __init__(self, flows: AsyncFlowsResource) -> None:
+ self._flows = flows
+
+ self.create = async_to_raw_response_wrapper(
+ flows.create,
+ )
+ self.retrieve = async_to_raw_response_wrapper(
+ flows.retrieve,
+ )
+ self.update = async_to_raw_response_wrapper(
+ flows.update,
+ )
+ self.list = async_to_raw_response_wrapper(
+ flows.list,
+ )
+ self.delete = async_to_raw_response_wrapper(
+ flows.delete,
+ )
+ self.clone = async_to_raw_response_wrapper(
+ flows.clone,
+ )
+ self.unblock = async_to_raw_response_wrapper(
+ flows.unblock,
+ )
+
+ @cached_property
+ def actions(self) -> AsyncActionsResourceWithRawResponse:
+ return AsyncActionsResourceWithRawResponse(self._flows.actions)
+
+
+class FlowsResourceWithStreamingResponse:
+ def __init__(self, flows: FlowsResource) -> None:
+ self._flows = flows
+
+ self.create = to_streamed_response_wrapper(
+ flows.create,
+ )
+ self.retrieve = to_streamed_response_wrapper(
+ flows.retrieve,
+ )
+ self.update = to_streamed_response_wrapper(
+ flows.update,
+ )
+ self.list = to_streamed_response_wrapper(
+ flows.list,
+ )
+ self.delete = to_streamed_response_wrapper(
+ flows.delete,
+ )
+ self.clone = to_streamed_response_wrapper(
+ flows.clone,
+ )
+ self.unblock = to_streamed_response_wrapper(
+ flows.unblock,
+ )
+
+ @cached_property
+ def actions(self) -> ActionsResourceWithStreamingResponse:
+ return ActionsResourceWithStreamingResponse(self._flows.actions)
+
+
+class AsyncFlowsResourceWithStreamingResponse:
+ def __init__(self, flows: AsyncFlowsResource) -> None:
+ self._flows = flows
+
+ self.create = async_to_streamed_response_wrapper(
+ flows.create,
+ )
+ self.retrieve = async_to_streamed_response_wrapper(
+ flows.retrieve,
+ )
+ self.update = async_to_streamed_response_wrapper(
+ flows.update,
+ )
+ self.list = async_to_streamed_response_wrapper(
+ flows.list,
+ )
+ self.delete = async_to_streamed_response_wrapper(
+ flows.delete,
+ )
+ self.clone = async_to_streamed_response_wrapper(
+ flows.clone,
+ )
+ self.unblock = async_to_streamed_response_wrapper(
+ flows.unblock,
+ )
+
+ @cached_property
+ def actions(self) -> AsyncActionsResourceWithStreamingResponse:
+ return AsyncActionsResourceWithStreamingResponse(self._flows.actions)
diff --git a/src/mobilerun_sdk/resources/workflows/timezones.py b/src/mobilerun_sdk/resources/workflows/timezones.py
new file mode 100644
index 0000000..5b7e797
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/timezones.py
@@ -0,0 +1,135 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+import httpx
+
+from ..._types import Body, Query, Headers, NotGiven, not_given
+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.timezone_list_response import TimezoneListResponse
+
+__all__ = ["TimezonesResource", "AsyncTimezonesResource"]
+
+
+class TimezonesResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> TimezonesResourceWithRawResponse:
+ """
+ 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 TimezonesResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> TimezonesResourceWithStreamingResponse:
+ """
+ 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 TimezonesResourceWithStreamingResponse(self)
+
+ 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,
+ ) -> TimezoneListResponse:
+ """List supported IANA timezones"""
+ return self._get(
+ "/timezones",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TimezoneListResponse,
+ )
+
+
+class AsyncTimezonesResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncTimezonesResourceWithRawResponse:
+ """
+ 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 AsyncTimezonesResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncTimezonesResourceWithStreamingResponse:
+ """
+ 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 AsyncTimezonesResourceWithStreamingResponse(self)
+
+ 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,
+ ) -> TimezoneListResponse:
+ """List supported IANA timezones"""
+ return await self._get(
+ "/timezones",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TimezoneListResponse,
+ )
+
+
+class TimezonesResourceWithRawResponse:
+ def __init__(self, timezones: TimezonesResource) -> None:
+ self._timezones = timezones
+
+ self.list = to_raw_response_wrapper(
+ timezones.list,
+ )
+
+
+class AsyncTimezonesResourceWithRawResponse:
+ def __init__(self, timezones: AsyncTimezonesResource) -> None:
+ self._timezones = timezones
+
+ self.list = async_to_raw_response_wrapper(
+ timezones.list,
+ )
+
+
+class TimezonesResourceWithStreamingResponse:
+ def __init__(self, timezones: TimezonesResource) -> None:
+ self._timezones = timezones
+
+ self.list = to_streamed_response_wrapper(
+ timezones.list,
+ )
+
+
+class AsyncTimezonesResourceWithStreamingResponse:
+ def __init__(self, timezones: AsyncTimezonesResource) -> None:
+ self._timezones = timezones
+
+ self.list = async_to_streamed_response_wrapper(
+ timezones.list,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/triggers.py b/src/mobilerun_sdk/resources/workflows/triggers.py
new file mode 100644
index 0000000..b6a1b4c
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/triggers.py
@@ -0,0 +1,731 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import Literal
+
+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 trigger_fire_params, trigger_list_params, trigger_create_params, trigger_update_params
+from ...types.workflows.trigger_fire_response import TriggerFireResponse
+from ...types.workflows.trigger_list_response import TriggerListResponse
+from ...types.workflows.trigger_create_response import TriggerCreateResponse
+from ...types.workflows.trigger_delete_response import TriggerDeleteResponse
+from ...types.workflows.trigger_update_response import TriggerUpdateResponse
+from ...types.workflows.trigger_retrieve_response import TriggerRetrieveResponse
+
+__all__ = ["TriggersResource", "AsyncTriggersResource"]
+
+
+class TriggersResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> TriggersResourceWithRawResponse:
+ """
+ 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 TriggersResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> TriggersResourceWithStreamingResponse:
+ """
+ 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 TriggersResourceWithStreamingResponse(self)
+
+ def create(
+ self,
+ *,
+ activation: Literal["event", "schedule", "custom"],
+ name: str,
+ conditions: trigger_create_params.Conditions | Omit = omit,
+ custom_payload_schema: Dict[str, object] | Omit = omit,
+ description: str | Omit = omit,
+ event_type: str | Omit = omit,
+ schedule_rule: trigger_create_params.ScheduleRule | Omit = omit,
+ timezone: 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,
+ ) -> TriggerCreateResponse:
+ """
+ Create a trigger
+
+ Args:
+ custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
+
+ 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(
+ "/triggers",
+ body=maybe_transform(
+ {
+ "activation": activation,
+ "name": name,
+ "conditions": conditions,
+ "custom_payload_schema": custom_payload_schema,
+ "description": description,
+ "event_type": event_type,
+ "schedule_rule": schedule_rule,
+ "timezone": timezone,
+ },
+ trigger_create_params.TriggerCreateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerCreateResponse,
+ )
+
+ def retrieve(
+ self,
+ trigger_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,
+ ) -> TriggerRetrieveResponse:
+ """
+ Get a trigger
+
+ 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 trigger_id:
+ raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
+ return self._get(
+ path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerRetrieveResponse,
+ )
+
+ def update(
+ self,
+ trigger_id: str,
+ *,
+ activation: Literal["event", "schedule", "custom"] | Omit = omit,
+ conditions: trigger_update_params.Conditions | Omit = omit,
+ custom_payload_schema: Optional[Dict[str, object]] | Omit = omit,
+ description: str | Omit = omit,
+ event_type: str | Omit = omit,
+ name: str | Omit = omit,
+ schedule_rule: trigger_update_params.ScheduleRule | Omit = omit,
+ timezone: 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,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> TriggerUpdateResponse:
+ """
+ Update a trigger
+
+ Args:
+ custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
+
+ 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 trigger_id:
+ raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
+ return self._patch(
+ path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
+ body=maybe_transform(
+ {
+ "activation": activation,
+ "conditions": conditions,
+ "custom_payload_schema": custom_payload_schema,
+ "description": description,
+ "event_type": event_type,
+ "name": name,
+ "schedule_rule": schedule_rule,
+ "timezone": timezone,
+ },
+ trigger_update_params.TriggerUpdateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerUpdateResponse,
+ )
+
+ def list(
+ self,
+ *,
+ activation: Literal["event", "schedule", "custom"] | Omit = omit,
+ event_type: str | Omit = omit,
+ order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: 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,
+ ) -> TriggerListResponse:
+ """
+ List triggers
+
+ 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._get(
+ "/triggers",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "activation": activation,
+ "event_type": event_type,
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ },
+ trigger_list_params.TriggerListParams,
+ ),
+ ),
+ cast_to=TriggerListResponse,
+ )
+
+ def delete(
+ self,
+ trigger_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,
+ ) -> TriggerDeleteResponse:
+ """
+ Delete a trigger
+
+ 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 trigger_id:
+ raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
+ return self._delete(
+ path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerDeleteResponse,
+ )
+
+ def fire(
+ self,
+ trigger_id: str,
+ *,
+ payload: Dict[str, object],
+ # 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,
+ ) -> TriggerFireResponse:
+ """
+ Invoke a custom trigger directly with an arbitrary JSON payload.
+
+ Fan-out: a trigger may be referenced by multiple flows (workflows). Firing it
+ enqueues one execution per enabled, non-deleted flow attached to this trigger,
+ each receiving the same payload. The `enqueuedCount` in the response reports how
+ many were enqueued (0 if no flows are attached, or if all matching flows are
+ gated by a cooldown).
+
+ Payload validation:
+
+ - If the trigger has a `customPayloadSchema`, the payload is validated against
+ it (JSON Schema via AJV).
+ - If no schema is configured, the payload only needs to be a JSON object — any
+ keys and values are accepted.
+
+ Only triggers with `activation = "custom"` can be fired through this endpoint;
+ event and schedule triggers return 409.
+
+ Args:
+ payload: Arbitrary JSON object forwarded to every flow attached to this trigger.
+ Validated against the trigger's customPayloadSchema when one is configured;
+ otherwise only "must be a JSON object" is enforced.
+
+ 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 trigger_id:
+ 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}, trigger_fire_params.TriggerFireParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerFireResponse,
+ )
+
+
+class AsyncTriggersResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncTriggersResourceWithRawResponse:
+ """
+ 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 AsyncTriggersResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncTriggersResourceWithStreamingResponse:
+ """
+ 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 AsyncTriggersResourceWithStreamingResponse(self)
+
+ async def create(
+ self,
+ *,
+ activation: Literal["event", "schedule", "custom"],
+ name: str,
+ conditions: trigger_create_params.Conditions | Omit = omit,
+ custom_payload_schema: Dict[str, object] | Omit = omit,
+ description: str | Omit = omit,
+ event_type: str | Omit = omit,
+ schedule_rule: trigger_create_params.ScheduleRule | Omit = omit,
+ timezone: 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,
+ ) -> TriggerCreateResponse:
+ """
+ Create a trigger
+
+ Args:
+ custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
+
+ 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(
+ "/triggers",
+ body=await async_maybe_transform(
+ {
+ "activation": activation,
+ "name": name,
+ "conditions": conditions,
+ "custom_payload_schema": custom_payload_schema,
+ "description": description,
+ "event_type": event_type,
+ "schedule_rule": schedule_rule,
+ "timezone": timezone,
+ },
+ trigger_create_params.TriggerCreateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerCreateResponse,
+ )
+
+ async def retrieve(
+ self,
+ trigger_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,
+ ) -> TriggerRetrieveResponse:
+ """
+ Get a trigger
+
+ 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 trigger_id:
+ raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
+ return await self._get(
+ path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerRetrieveResponse,
+ )
+
+ async def update(
+ self,
+ trigger_id: str,
+ *,
+ activation: Literal["event", "schedule", "custom"] | Omit = omit,
+ conditions: trigger_update_params.Conditions | Omit = omit,
+ custom_payload_schema: Optional[Dict[str, object]] | Omit = omit,
+ description: str | Omit = omit,
+ event_type: str | Omit = omit,
+ name: str | Omit = omit,
+ schedule_rule: trigger_update_params.ScheduleRule | Omit = omit,
+ timezone: 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,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> TriggerUpdateResponse:
+ """
+ Update a trigger
+
+ Args:
+ custom_payload_schema: Optional JSON Schema for validating payloads sent to this custom trigger
+
+ 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 trigger_id:
+ raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
+ return await self._patch(
+ path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
+ body=await async_maybe_transform(
+ {
+ "activation": activation,
+ "conditions": conditions,
+ "custom_payload_schema": custom_payload_schema,
+ "description": description,
+ "event_type": event_type,
+ "name": name,
+ "schedule_rule": schedule_rule,
+ "timezone": timezone,
+ },
+ trigger_update_params.TriggerUpdateParams,
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerUpdateResponse,
+ )
+
+ async def list(
+ self,
+ *,
+ activation: Literal["event", "schedule", "custom"] | Omit = omit,
+ event_type: str | Omit = omit,
+ order_by: Literal["name", "createdAt", "updatedAt"] | Omit = omit,
+ order_by_direction: Literal["asc", "desc"] | Omit = omit,
+ page: int | Omit = omit,
+ page_size: int | Omit = omit,
+ search: 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,
+ ) -> TriggerListResponse:
+ """
+ List triggers
+
+ 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._get(
+ "/triggers",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "activation": activation,
+ "event_type": event_type,
+ "order_by": order_by,
+ "order_by_direction": order_by_direction,
+ "page": page,
+ "page_size": page_size,
+ "search": search,
+ },
+ trigger_list_params.TriggerListParams,
+ ),
+ ),
+ cast_to=TriggerListResponse,
+ )
+
+ async def delete(
+ self,
+ trigger_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,
+ ) -> TriggerDeleteResponse:
+ """
+ Delete a trigger
+
+ 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 trigger_id:
+ raise ValueError(f"Expected a non-empty value for `trigger_id` but received {trigger_id!r}")
+ return await self._delete(
+ path_template("/triggers/{trigger_id}", trigger_id=trigger_id),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerDeleteResponse,
+ )
+
+ async def fire(
+ self,
+ trigger_id: str,
+ *,
+ payload: Dict[str, object],
+ # 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,
+ ) -> TriggerFireResponse:
+ """
+ Invoke a custom trigger directly with an arbitrary JSON payload.
+
+ Fan-out: a trigger may be referenced by multiple flows (workflows). Firing it
+ enqueues one execution per enabled, non-deleted flow attached to this trigger,
+ each receiving the same payload. The `enqueuedCount` in the response reports how
+ many were enqueued (0 if no flows are attached, or if all matching flows are
+ gated by a cooldown).
+
+ Payload validation:
+
+ - If the trigger has a `customPayloadSchema`, the payload is validated against
+ it (JSON Schema via AJV).
+ - If no schema is configured, the payload only needs to be a JSON object — any
+ keys and values are accepted.
+
+ Only triggers with `activation = "custom"` can be fired through this endpoint;
+ event and schedule triggers return 409.
+
+ Args:
+ payload: Arbitrary JSON object forwarded to every flow attached to this trigger.
+ Validated against the trigger's customPayloadSchema when one is configured;
+ otherwise only "must be a JSON object" is enforced.
+
+ 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 trigger_id:
+ 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}, trigger_fire_params.TriggerFireParams),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=TriggerFireResponse,
+ )
+
+
+class TriggersResourceWithRawResponse:
+ def __init__(self, triggers: TriggersResource) -> None:
+ self._triggers = triggers
+
+ self.create = to_raw_response_wrapper(
+ triggers.create,
+ )
+ self.retrieve = to_raw_response_wrapper(
+ triggers.retrieve,
+ )
+ self.update = to_raw_response_wrapper(
+ triggers.update,
+ )
+ self.list = to_raw_response_wrapper(
+ triggers.list,
+ )
+ self.delete = to_raw_response_wrapper(
+ triggers.delete,
+ )
+ self.fire = to_raw_response_wrapper(
+ triggers.fire,
+ )
+
+
+class AsyncTriggersResourceWithRawResponse:
+ def __init__(self, triggers: AsyncTriggersResource) -> None:
+ self._triggers = triggers
+
+ self.create = async_to_raw_response_wrapper(
+ triggers.create,
+ )
+ self.retrieve = async_to_raw_response_wrapper(
+ triggers.retrieve,
+ )
+ self.update = async_to_raw_response_wrapper(
+ triggers.update,
+ )
+ self.list = async_to_raw_response_wrapper(
+ triggers.list,
+ )
+ self.delete = async_to_raw_response_wrapper(
+ triggers.delete,
+ )
+ self.fire = async_to_raw_response_wrapper(
+ triggers.fire,
+ )
+
+
+class TriggersResourceWithStreamingResponse:
+ def __init__(self, triggers: TriggersResource) -> None:
+ self._triggers = triggers
+
+ self.create = to_streamed_response_wrapper(
+ triggers.create,
+ )
+ self.retrieve = to_streamed_response_wrapper(
+ triggers.retrieve,
+ )
+ self.update = to_streamed_response_wrapper(
+ triggers.update,
+ )
+ self.list = to_streamed_response_wrapper(
+ triggers.list,
+ )
+ self.delete = to_streamed_response_wrapper(
+ triggers.delete,
+ )
+ self.fire = to_streamed_response_wrapper(
+ triggers.fire,
+ )
+
+
+class AsyncTriggersResourceWithStreamingResponse:
+ def __init__(self, triggers: AsyncTriggersResource) -> None:
+ self._triggers = triggers
+
+ self.create = async_to_streamed_response_wrapper(
+ triggers.create,
+ )
+ self.retrieve = async_to_streamed_response_wrapper(
+ triggers.retrieve,
+ )
+ self.update = async_to_streamed_response_wrapper(
+ triggers.update,
+ )
+ self.list = async_to_streamed_response_wrapper(
+ triggers.list,
+ )
+ self.delete = async_to_streamed_response_wrapper(
+ triggers.delete,
+ )
+ self.fire = async_to_streamed_response_wrapper(
+ triggers.fire,
+ )
diff --git a/src/mobilerun_sdk/resources/workflows/workflows.py b/src/mobilerun_sdk/resources/workflows/workflows.py
new file mode 100644
index 0000000..99d44df
--- /dev/null
+++ b/src/mobilerun_sdk/resources/workflows/workflows.py
@@ -0,0 +1,294 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from .triggers import (
+ TriggersResource,
+ AsyncTriggersResource,
+ TriggersResourceWithRawResponse,
+ AsyncTriggersResourceWithRawResponse,
+ TriggersResourceWithStreamingResponse,
+ AsyncTriggersResourceWithStreamingResponse,
+)
+from ..._compat import cached_property
+from .timezones import (
+ TimezonesResource,
+ AsyncTimezonesResource,
+ TimezonesResourceWithRawResponse,
+ AsyncTimezonesResourceWithRawResponse,
+ TimezonesResourceWithStreamingResponse,
+ AsyncTimezonesResourceWithStreamingResponse,
+)
+from .executions import (
+ ExecutionsResource,
+ AsyncExecutionsResource,
+ ExecutionsResourceWithRawResponse,
+ AsyncExecutionsResourceWithRawResponse,
+ ExecutionsResourceWithStreamingResponse,
+ AsyncExecutionsResourceWithStreamingResponse,
+)
+from ..._resource import SyncAPIResource, AsyncAPIResource
+from .flows.flows import (
+ FlowsResource,
+ AsyncFlowsResource,
+ FlowsResourceWithRawResponse,
+ AsyncFlowsResourceWithRawResponse,
+ FlowsResourceWithStreamingResponse,
+ AsyncFlowsResourceWithStreamingResponse,
+)
+from .events.events import (
+ EventsResource,
+ AsyncEventsResource,
+ EventsResourceWithRawResponse,
+ AsyncEventsResourceWithRawResponse,
+ EventsResourceWithStreamingResponse,
+ AsyncEventsResourceWithStreamingResponse,
+)
+from .action_catalog import (
+ ActionCatalogResource,
+ AsyncActionCatalogResource,
+ ActionCatalogResourceWithRawResponse,
+ AsyncActionCatalogResourceWithRawResponse,
+ ActionCatalogResourceWithStreamingResponse,
+ AsyncActionCatalogResourceWithStreamingResponse,
+)
+from .actions.actions import (
+ ActionsResource,
+ AsyncActionsResource,
+ ActionsResourceWithRawResponse,
+ AsyncActionsResourceWithRawResponse,
+ ActionsResourceWithStreamingResponse,
+ AsyncActionsResourceWithStreamingResponse,
+)
+
+__all__ = ["WorkflowsResource", "AsyncWorkflowsResource"]
+
+
+class WorkflowsResource(SyncAPIResource):
+ @cached_property
+ def triggers(self) -> TriggersResource:
+ return TriggersResource(self._client)
+
+ @cached_property
+ def action_catalog(self) -> ActionCatalogResource:
+ return ActionCatalogResource(self._client)
+
+ @cached_property
+ def actions(self) -> ActionsResource:
+ return ActionsResource(self._client)
+
+ @cached_property
+ def flows(self) -> FlowsResource:
+ return FlowsResource(self._client)
+
+ @cached_property
+ def events(self) -> EventsResource:
+ return EventsResource(self._client)
+
+ @cached_property
+ def executions(self) -> ExecutionsResource:
+ return ExecutionsResource(self._client)
+
+ @cached_property
+ def timezones(self) -> TimezonesResource:
+ return TimezonesResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> WorkflowsResourceWithRawResponse:
+ """
+ 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 WorkflowsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> WorkflowsResourceWithStreamingResponse:
+ """
+ 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 WorkflowsResourceWithStreamingResponse(self)
+
+
+class AsyncWorkflowsResource(AsyncAPIResource):
+ @cached_property
+ def triggers(self) -> AsyncTriggersResource:
+ return AsyncTriggersResource(self._client)
+
+ @cached_property
+ def action_catalog(self) -> AsyncActionCatalogResource:
+ return AsyncActionCatalogResource(self._client)
+
+ @cached_property
+ def actions(self) -> AsyncActionsResource:
+ return AsyncActionsResource(self._client)
+
+ @cached_property
+ def flows(self) -> AsyncFlowsResource:
+ return AsyncFlowsResource(self._client)
+
+ @cached_property
+ def events(self) -> AsyncEventsResource:
+ return AsyncEventsResource(self._client)
+
+ @cached_property
+ def executions(self) -> AsyncExecutionsResource:
+ return AsyncExecutionsResource(self._client)
+
+ @cached_property
+ def timezones(self) -> AsyncTimezonesResource:
+ return AsyncTimezonesResource(self._client)
+
+ @cached_property
+ def with_raw_response(self) -> AsyncWorkflowsResourceWithRawResponse:
+ """
+ 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 AsyncWorkflowsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncWorkflowsResourceWithStreamingResponse:
+ """
+ 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 AsyncWorkflowsResourceWithStreamingResponse(self)
+
+
+class WorkflowsResourceWithRawResponse:
+ def __init__(self, workflows: WorkflowsResource) -> None:
+ self._workflows = workflows
+
+ @cached_property
+ def triggers(self) -> TriggersResourceWithRawResponse:
+ return TriggersResourceWithRawResponse(self._workflows.triggers)
+
+ @cached_property
+ def action_catalog(self) -> ActionCatalogResourceWithRawResponse:
+ return ActionCatalogResourceWithRawResponse(self._workflows.action_catalog)
+
+ @cached_property
+ def actions(self) -> ActionsResourceWithRawResponse:
+ return ActionsResourceWithRawResponse(self._workflows.actions)
+
+ @cached_property
+ def flows(self) -> FlowsResourceWithRawResponse:
+ return FlowsResourceWithRawResponse(self._workflows.flows)
+
+ @cached_property
+ def events(self) -> EventsResourceWithRawResponse:
+ return EventsResourceWithRawResponse(self._workflows.events)
+
+ @cached_property
+ def executions(self) -> ExecutionsResourceWithRawResponse:
+ return ExecutionsResourceWithRawResponse(self._workflows.executions)
+
+ @cached_property
+ def timezones(self) -> TimezonesResourceWithRawResponse:
+ return TimezonesResourceWithRawResponse(self._workflows.timezones)
+
+
+class AsyncWorkflowsResourceWithRawResponse:
+ def __init__(self, workflows: AsyncWorkflowsResource) -> None:
+ self._workflows = workflows
+
+ @cached_property
+ def triggers(self) -> AsyncTriggersResourceWithRawResponse:
+ return AsyncTriggersResourceWithRawResponse(self._workflows.triggers)
+
+ @cached_property
+ def action_catalog(self) -> AsyncActionCatalogResourceWithRawResponse:
+ return AsyncActionCatalogResourceWithRawResponse(self._workflows.action_catalog)
+
+ @cached_property
+ def actions(self) -> AsyncActionsResourceWithRawResponse:
+ return AsyncActionsResourceWithRawResponse(self._workflows.actions)
+
+ @cached_property
+ def flows(self) -> AsyncFlowsResourceWithRawResponse:
+ return AsyncFlowsResourceWithRawResponse(self._workflows.flows)
+
+ @cached_property
+ def events(self) -> AsyncEventsResourceWithRawResponse:
+ return AsyncEventsResourceWithRawResponse(self._workflows.events)
+
+ @cached_property
+ def executions(self) -> AsyncExecutionsResourceWithRawResponse:
+ return AsyncExecutionsResourceWithRawResponse(self._workflows.executions)
+
+ @cached_property
+ def timezones(self) -> AsyncTimezonesResourceWithRawResponse:
+ return AsyncTimezonesResourceWithRawResponse(self._workflows.timezones)
+
+
+class WorkflowsResourceWithStreamingResponse:
+ def __init__(self, workflows: WorkflowsResource) -> None:
+ self._workflows = workflows
+
+ @cached_property
+ def triggers(self) -> TriggersResourceWithStreamingResponse:
+ return TriggersResourceWithStreamingResponse(self._workflows.triggers)
+
+ @cached_property
+ def action_catalog(self) -> ActionCatalogResourceWithStreamingResponse:
+ return ActionCatalogResourceWithStreamingResponse(self._workflows.action_catalog)
+
+ @cached_property
+ def actions(self) -> ActionsResourceWithStreamingResponse:
+ return ActionsResourceWithStreamingResponse(self._workflows.actions)
+
+ @cached_property
+ def flows(self) -> FlowsResourceWithStreamingResponse:
+ return FlowsResourceWithStreamingResponse(self._workflows.flows)
+
+ @cached_property
+ def events(self) -> EventsResourceWithStreamingResponse:
+ return EventsResourceWithStreamingResponse(self._workflows.events)
+
+ @cached_property
+ def executions(self) -> ExecutionsResourceWithStreamingResponse:
+ return ExecutionsResourceWithStreamingResponse(self._workflows.executions)
+
+ @cached_property
+ def timezones(self) -> TimezonesResourceWithStreamingResponse:
+ return TimezonesResourceWithStreamingResponse(self._workflows.timezones)
+
+
+class AsyncWorkflowsResourceWithStreamingResponse:
+ def __init__(self, workflows: AsyncWorkflowsResource) -> None:
+ self._workflows = workflows
+
+ @cached_property
+ def triggers(self) -> AsyncTriggersResourceWithStreamingResponse:
+ return AsyncTriggersResourceWithStreamingResponse(self._workflows.triggers)
+
+ @cached_property
+ def action_catalog(self) -> AsyncActionCatalogResourceWithStreamingResponse:
+ return AsyncActionCatalogResourceWithStreamingResponse(self._workflows.action_catalog)
+
+ @cached_property
+ def actions(self) -> AsyncActionsResourceWithStreamingResponse:
+ return AsyncActionsResourceWithStreamingResponse(self._workflows.actions)
+
+ @cached_property
+ def flows(self) -> AsyncFlowsResourceWithStreamingResponse:
+ return AsyncFlowsResourceWithStreamingResponse(self._workflows.flows)
+
+ @cached_property
+ def events(self) -> AsyncEventsResourceWithStreamingResponse:
+ return AsyncEventsResourceWithStreamingResponse(self._workflows.events)
+
+ @cached_property
+ def executions(self) -> AsyncExecutionsResourceWithStreamingResponse:
+ return AsyncExecutionsResourceWithStreamingResponse(self._workflows.executions)
+
+ @cached_property
+ def timezones(self) -> AsyncTimezonesResourceWithStreamingResponse:
+ return AsyncTimezonesResourceWithStreamingResponse(self._workflows.timezones)
diff --git a/src/mobilerun_sdk/types/__init__.py b/src/mobilerun_sdk/types/__init__.py
index de028e7..47250ab 100644
--- a/src/mobilerun_sdk/types/__init__.py
+++ b/src/mobilerun_sdk/types/__init__.py
@@ -4,6 +4,7 @@
from . import devices
from .. import _compat
+from .flow import Flow as Flow
from .task import Task as Task
from .device import Device as Device
from .shared import (
diff --git a/src/mobilerun_sdk/types/flow.py b/src/mobilerun_sdk/types/flow.py
new file mode 100644
index 0000000..6457f9d
--- /dev/null
+++ b/src/mobilerun_sdk/types/flow.py
@@ -0,0 +1,54 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List, Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from .._models import BaseModel
+
+__all__ = ["Flow"]
+
+
+class Flow(BaseModel):
+ id: str
+
+ blocked_at: Optional[str] = FieldInfo(alias="blockedAt", default=None)
+
+ consecutive_failures: int = FieldInfo(alias="consecutiveFailures")
+
+ cooldown_scope: Literal["flow", "device"] = FieldInfo(alias="cooldownScope")
+
+ cooldown_seconds: Optional[int] = FieldInfo(alias="cooldownSeconds", default=None)
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ 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", "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")
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
diff --git a/src/mobilerun_sdk/types/workflows/__init__.py b/src/mobilerun_sdk/types/workflows/__init__.py
index f8ee8b1..860c6eb 100644
--- a/src/mobilerun_sdk/types/workflows/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/__init__.py
@@ -1,3 +1,51 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
+
+from .action import Action as Action
+from .flow_execution import FlowExecution as FlowExecution
+from .flow_list_params import FlowListParams as FlowListParams
+from .flow_clone_params import FlowCloneParams as FlowCloneParams
+from .action_list_params import ActionListParams as ActionListParams
+from .flow_create_params import FlowCreateParams as FlowCreateParams
+from .flow_list_response import FlowListResponse as FlowListResponse
+from .flow_update_params import FlowUpdateParams as FlowUpdateParams
+from .event_ingest_params import EventIngestParams as EventIngestParams
+from .flow_clone_response import FlowCloneResponse as FlowCloneResponse
+from .trigger_fire_params import TriggerFireParams as TriggerFireParams
+from .trigger_list_params import TriggerListParams as TriggerListParams
+from .action_catalog_entry import ActionCatalogEntry as ActionCatalogEntry
+from .action_create_params import ActionCreateParams as ActionCreateParams
+from .action_list_response import ActionListResponse as ActionListResponse
+from .action_update_params import ActionUpdateParams as ActionUpdateParams
+from .event_dry_run_params import EventDryRunParams as EventDryRunParams
+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 .event_ingest_response import EventIngestResponse as EventIngestResponse
+from .execution_list_params import ExecutionListParams as ExecutionListParams
+from .flow_unblock_response import FlowUnblockResponse as FlowUnblockResponse
+from .trigger_create_params import TriggerCreateParams as TriggerCreateParams
+from .trigger_fire_response import TriggerFireResponse as TriggerFireResponse
+from .trigger_list_response import TriggerListResponse as TriggerListResponse
+from .trigger_update_params import TriggerUpdateParams as TriggerUpdateParams
+from .action_create_response import ActionCreateResponse as ActionCreateResponse
+from .action_delete_response import ActionDeleteResponse as ActionDeleteResponse
+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 .timezone_list_response import TimezoneListResponse as TimezoneListResponse
+from .execution_list_response import ExecutionListResponse as ExecutionListResponse
+from .trigger_create_response import TriggerCreateResponse as TriggerCreateResponse
+from .trigger_delete_response import TriggerDeleteResponse as TriggerDeleteResponse
+from .trigger_update_response import TriggerUpdateResponse as TriggerUpdateResponse
+from .action_retrieve_response import ActionRetrieveResponse as ActionRetrieveResponse
+from .trigger_retrieve_response import TriggerRetrieveResponse as TriggerRetrieveResponse
+from .action_catalog_list_params import ActionCatalogListParams as ActionCatalogListParams
+from .execution_retrieve_response import ExecutionRetrieveResponse as ExecutionRetrieveResponse
+from .flow_action_overrides_param import FlowActionOverridesParam as FlowActionOverridesParam
+from .action_catalog_list_response import ActionCatalogListResponse as ActionCatalogListResponse
+from .execution_get_metrics_params import ExecutionGetMetricsParams as ExecutionGetMetricsParams
+from .flow_child_action_input_param import FlowChildActionInputParam as FlowChildActionInputParam
+from .execution_get_metrics_response import ExecutionGetMetricsResponse as ExecutionGetMetricsResponse
+from .action_catalog_retrieve_response import ActionCatalogRetrieveResponse as ActionCatalogRetrieveResponse
diff --git a/src/mobilerun_sdk/types/workflows/action.py b/src/mobilerun_sdk/types/workflows/action.py
new file mode 100644
index 0000000..1b85a3f
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action.py
@@ -0,0 +1,34 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["Action"]
+
+
+class Action(BaseModel):
+ id: str
+
+ catalog_entry_id: str = FieldInfo(alias="catalogEntryId")
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ description: Optional[str] = None
+
+ method: str
+
+ name: str
+
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
+
+ params: Optional[object] = None
+
+ params_schema: Optional[object] = FieldInfo(alias="paramsSchema", default=None)
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_entry.py b/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
new file mode 100644
index 0000000..5e6278c
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_catalog_entry.py
@@ -0,0 +1,28 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["ActionCatalogEntry"]
+
+
+class ActionCatalogEntry(BaseModel):
+ id: str
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ description: Optional[str] = None
+
+ method: str
+
+ name: str
+
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ params_schema: Optional[object] = FieldInfo(alias="paramsSchema", default=None)
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_list_params.py b/src/mobilerun_sdk/types/workflows/action_catalog_list_params.py
new file mode 100644
index 0000000..4e756a9
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_catalog_list_params.py
@@ -0,0 +1,17 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["ActionCatalogListParams"]
+
+
+class ActionCatalogListParams(TypedDict, total=False):
+ page: int
+
+ page_size: Annotated[int, PropertyInfo(alias="pageSize")]
+
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_list_response.py b/src/mobilerun_sdk/types/workflows/action_catalog_list_response.py
new file mode 100644
index 0000000..967cfd0
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_catalog_list_response.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ..._models import BaseModel
+from ..shared.pagination import Pagination
+from .action_catalog_entry import ActionCatalogEntry
+
+__all__ = ["ActionCatalogListResponse"]
+
+
+class ActionCatalogListResponse(BaseModel):
+ items: List[ActionCatalogEntry]
+
+ pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py b/src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py
new file mode 100644
index 0000000..81d1b5f
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_catalog_retrieve_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..._models import BaseModel
+from .action_catalog_entry import ActionCatalogEntry
+
+__all__ = ["ActionCatalogRetrieveResponse"]
+
+
+class ActionCatalogRetrieveResponse(BaseModel):
+ data: ActionCatalogEntry
diff --git a/src/mobilerun_sdk/types/workflows/action_create_params.py b/src/mobilerun_sdk/types/workflows/action_create_params.py
new file mode 100644
index 0000000..b85ffed
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_create_params.py
@@ -0,0 +1,20 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import Required, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["ActionCreateParams"]
+
+
+class ActionCreateParams(TypedDict, total=False):
+ catalog_entry_id: Required[Annotated[str, PropertyInfo(alias="catalogEntryId")]]
+
+ name: Required[str]
+
+ description: str
+
+ params: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/action_create_response.py b/src/mobilerun_sdk/types/workflows/action_create_response.py
new file mode 100644
index 0000000..acd7aa5
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_create_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .action import Action
+from ..._models import BaseModel
+
+__all__ = ["ActionCreateResponse"]
+
+
+class ActionCreateResponse(BaseModel):
+ data: Action
diff --git a/src/mobilerun_sdk/types/workflows/action_delete_response.py b/src/mobilerun_sdk/types/workflows/action_delete_response.py
new file mode 100644
index 0000000..157bb1f
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_delete_response.py
@@ -0,0 +1,9 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..._models import BaseModel
+
+__all__ = ["ActionDeleteResponse"]
+
+
+class ActionDeleteResponse(BaseModel):
+ message: str
diff --git a/src/mobilerun_sdk/types/workflows/action_list_params.py b/src/mobilerun_sdk/types/workflows/action_list_params.py
new file mode 100644
index 0000000..9873843
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_list_params.py
@@ -0,0 +1,23 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["ActionListParams"]
+
+
+class ActionListParams(TypedDict, total=False):
+ order_by: Annotated[Literal["name", "createdAt", "updatedAt"], PropertyInfo(alias="orderBy")]
+
+ order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
+
+ page: int
+
+ page_size: Annotated[int, PropertyInfo(alias="pageSize")]
+
+ search: str
+
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
diff --git a/src/mobilerun_sdk/types/workflows/action_list_response.py b/src/mobilerun_sdk/types/workflows/action_list_response.py
new file mode 100644
index 0000000..2d5e996
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_list_response.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from .action import Action
+from ..._models import BaseModel
+from ..shared.pagination import Pagination
+
+__all__ = ["ActionListResponse"]
+
+
+class ActionListResponse(BaseModel):
+ items: List[Action]
+
+ pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/action_retrieve_response.py b/src/mobilerun_sdk/types/workflows/action_retrieve_response.py
new file mode 100644
index 0000000..7dc33b0
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_retrieve_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .action import Action
+from ..._models import BaseModel
+
+__all__ = ["ActionRetrieveResponse"]
+
+
+class ActionRetrieveResponse(BaseModel):
+ data: Action
diff --git a/src/mobilerun_sdk/types/workflows/action_update_params.py b/src/mobilerun_sdk/types/workflows/action_update_params.py
new file mode 100644
index 0000000..4644bac
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_update_params.py
@@ -0,0 +1,16 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import TypedDict
+
+__all__ = ["ActionUpdateParams"]
+
+
+class ActionUpdateParams(TypedDict, total=False):
+ description: str
+
+ name: str
+
+ params: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/action_update_response.py b/src/mobilerun_sdk/types/workflows/action_update_response.py
new file mode 100644
index 0000000..4d6b872
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/action_update_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from .action import Action
+from ..._models import BaseModel
+
+__all__ = ["ActionUpdateResponse"]
+
+
+class ActionUpdateResponse(BaseModel):
+ data: Action
diff --git a/src/mobilerun_sdk/types/workflows/actions/__init__.py b/src/mobilerun_sdk/types/workflows/actions/__init__.py
index f8ee8b1..57284e5 100644
--- a/src/mobilerun_sdk/types/workflows/actions/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/actions/__init__.py
@@ -1,3 +1,6 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
+
+from .service_list_response import ServiceListResponse as ServiceListResponse
+from .service_list_methods_response import ServiceListMethodsResponse as ServiceListMethodsResponse
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
new file mode 100644
index 0000000..95cff7a
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/actions/service_list_methods_response.py
@@ -0,0 +1,32 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List, Optional
+from typing_extensions import Literal
+
+from ...._models import BaseModel
+
+__all__ = ["ServiceListMethodsResponse", "Data", "DataParam"]
+
+
+class DataParam(BaseModel):
+ description: str
+
+ name: str
+
+ required: bool
+
+ type: Literal["string", "number", "boolean", "object", "array"]
+
+ default: Optional[object] = None
+
+ example: Optional[object] = None
+
+
+class Data(BaseModel):
+ method: str
+
+ params: List[DataParam]
+
+
+class ServiceListMethodsResponse(BaseModel):
+ data: List[Data]
diff --git a/src/mobilerun_sdk/types/workflows/actions/service_list_response.py b/src/mobilerun_sdk/types/workflows/actions/service_list_response.py
new file mode 100644
index 0000000..e8e712c
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/actions/service_list_response.py
@@ -0,0 +1,11 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ...._models import BaseModel
+
+__all__ = ["ServiceListResponse"]
+
+
+class ServiceListResponse(BaseModel):
+ data: List[str]
diff --git a/src/mobilerun_sdk/types/workflows/event_dry_run_params.py b/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
new file mode 100644
index 0000000..42cacb5
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/event_dry_run_params.py
@@ -0,0 +1,16 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import Required, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["EventDryRunParams"]
+
+
+class EventDryRunParams(TypedDict, total=False):
+ event_type: Required[Annotated[str, PropertyInfo(alias="eventType")]]
+
+ 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
new file mode 100644
index 0000000..b1c8264
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/event_dry_run_response.py
@@ -0,0 +1,126 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Dict, List, Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..flow import Flow
+from ..._models import BaseModel
+
+__all__ = [
+ "EventDryRunResponse",
+ "Data",
+ "DataMatchedFlow",
+ "DataMatchedFlowAction",
+ "DataMatchedFlowGates",
+ "DataMatchedFlowTrigger",
+ "DataMatchedFlowTriggerScheduleRule",
+ "DataValidation",
+ "DataValidationError",
+]
+
+
+class DataMatchedFlowAction(BaseModel):
+ continue_on_error: bool = FieldInfo(alias="continueOnError")
+
+ method: str
+
+ name: str
+
+ service: Literal["tasks_api", "devices_api", "agents_api", "webhooks"]
+
+ 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"]
+
+ date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: Optional[str] = None
+ """Cron expression (for type=cron)"""
+
+ rrule: Optional[str] = None
+ """RRULE string (for type=recurring)"""
+
+
+class DataMatchedFlowTrigger(BaseModel):
+ id: str
+
+ activation: Literal["event", "schedule", "custom"]
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
+
+ description: Optional[str] = None
+
+ event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
+
+ name: str
+
+ schedule_rule: Optional[DataMatchedFlowTriggerScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
+
+ timezone: Optional[str] = None
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
+
+ conditions: Optional[object] = None
+
+ next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
+
+
+class DataMatchedFlow(BaseModel):
+ actions: List[DataMatchedFlowAction]
+
+ flow: Flow
+
+ gates: DataMatchedFlowGates
+
+ trigger: DataMatchedFlowTrigger
+
+ would_fire: bool = FieldInfo(alias="wouldFire")
+
+
+class DataValidationError(BaseModel):
+ field: str
+
+ message: str
+
+
+class DataValidation(BaseModel):
+ valid: bool
+
+ errors: Optional[List[DataValidationError]] = None
+
+
+class Data(BaseModel):
+ matched_flows: List[DataMatchedFlow] = FieldInfo(alias="matchedFlows")
+
+ validation: DataValidation
+
+
+class EventDryRunResponse(BaseModel):
+ data: Data
diff --git a/src/mobilerun_sdk/types/workflows/event_ingest_params.py b/src/mobilerun_sdk/types/workflows/event_ingest_params.py
new file mode 100644
index 0000000..345113f
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/event_ingest_params.py
@@ -0,0 +1,16 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import Required, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["EventIngestParams"]
+
+
+class EventIngestParams(TypedDict, total=False):
+ event_type: Required[Annotated[str, PropertyInfo(alias="eventType")]]
+
+ payload: Dict[str, Optional[object]]
diff --git a/src/mobilerun_sdk/types/workflows/event_ingest_response.py b/src/mobilerun_sdk/types/workflows/event_ingest_response.py
new file mode 100644
index 0000000..6136565
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/event_ingest_response.py
@@ -0,0 +1,11 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["EventIngestResponse"]
+
+
+class EventIngestResponse(BaseModel):
+ event_id: str = FieldInfo(alias="eventId")
diff --git a/src/mobilerun_sdk/types/workflows/events/__init__.py b/src/mobilerun_sdk/types/workflows/events/__init__.py
index f8ee8b1..32807f2 100644
--- a/src/mobilerun_sdk/types/workflows/events/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/events/__init__.py
@@ -1,3 +1,8 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
+
+from .catalog_list_params import CatalogListParams as CatalogListParams
+from .catalog_list_response import CatalogListResponse as CatalogListResponse
+from .catalog_register_params import CatalogRegisterParams as CatalogRegisterParams
+from .catalog_register_response import CatalogRegisterResponse as CatalogRegisterResponse
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_list_params.py b/src/mobilerun_sdk/types/workflows/events/catalog_list_params.py
new file mode 100644
index 0000000..ca0def1
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/events/catalog_list_params.py
@@ -0,0 +1,17 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ...._utils import PropertyInfo
+
+__all__ = ["CatalogListParams"]
+
+
+class CatalogListParams(TypedDict, total=False):
+ page: int
+
+ page_size: Annotated[int, PropertyInfo(alias="pageSize")]
+
+ source: Literal["device", "system", "webhook"]
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_list_response.py b/src/mobilerun_sdk/types/workflows/events/catalog_list_response.py
new file mode 100644
index 0000000..86c96b2
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/events/catalog_list_response.py
@@ -0,0 +1,32 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List, Optional
+
+from pydantic import Field as FieldInfo
+
+from ...._models import BaseModel
+from ...shared.pagination import Pagination
+
+__all__ = ["CatalogListResponse", "Item"]
+
+
+class Item(BaseModel):
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ description: Optional[str] = None
+
+ event_type: str = FieldInfo(alias="eventType")
+
+ label: str
+
+ source: Optional[str] = None
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ payload_schema: Optional[object] = FieldInfo(alias="payloadSchema", default=None)
+
+
+class CatalogListResponse(BaseModel):
+ items: List[Item]
+
+ pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_register_params.py b/src/mobilerun_sdk/types/workflows/events/catalog_register_params.py
new file mode 100644
index 0000000..da648c3
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/events/catalog_register_params.py
@@ -0,0 +1,26 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Iterable, Optional
+from typing_extensions import Literal, Required, Annotated, TypedDict
+
+from ...._utils import PropertyInfo
+
+__all__ = ["CatalogRegisterParams", "Event"]
+
+
+class CatalogRegisterParams(TypedDict, total=False):
+ events: Required[Iterable[Event]]
+
+
+class Event(TypedDict, total=False):
+ event_type: Required[Annotated[str, PropertyInfo(alias="eventType")]]
+
+ label: Required[str]
+
+ description: str
+
+ payload_schema: Annotated[Dict[str, Optional[object]], PropertyInfo(alias="payloadSchema")]
+
+ source: Literal["device", "system", "webhook"]
diff --git a/src/mobilerun_sdk/types/workflows/events/catalog_register_response.py b/src/mobilerun_sdk/types/workflows/events/catalog_register_response.py
new file mode 100644
index 0000000..116b6cc
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/events/catalog_register_response.py
@@ -0,0 +1,9 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ...._models import BaseModel
+
+__all__ = ["CatalogRegisterResponse"]
+
+
+class CatalogRegisterResponse(BaseModel):
+ message: str
diff --git a/src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py b/src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py
new file mode 100644
index 0000000..b5d8cda
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/execution_get_metrics_params.py
@@ -0,0 +1,20 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Optional
+from typing_extensions import Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["ExecutionGetMetricsParams"]
+
+
+class ExecutionGetMetricsParams(TypedDict, total=False):
+ flow_id: Annotated[str, PropertyInfo(alias="flowId")]
+
+ from_: Annotated[Optional[str], PropertyInfo(alias="from")]
+
+ to: Optional[str]
+
+ trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py b/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
new file mode 100644
index 0000000..cb796ac
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/execution_get_metrics_response.py
@@ -0,0 +1,39 @@
+# 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__ = ["ExecutionGetMetricsResponse", "Data", "DataByStatus"]
+
+
+class DataByStatus(BaseModel):
+ cancelled: int
+
+ failed: int
+
+ invalid: int
+
+ pending: int
+
+ running: int
+
+ skipped: int
+
+ success: int
+
+
+class Data(BaseModel):
+ avg_duration_ms: Optional[float] = FieldInfo(alias="avgDurationMs", default=None)
+
+ by_status: DataByStatus = FieldInfo(alias="byStatus")
+
+ last_execution_at: Optional[str] = FieldInfo(alias="lastExecutionAt", default=None)
+
+ total: int
+
+
+class ExecutionGetMetricsResponse(BaseModel):
+ data: Data
diff --git a/src/mobilerun_sdk/types/workflows/execution_list_params.py b/src/mobilerun_sdk/types/workflows/execution_list_params.py
new file mode 100644
index 0000000..ccc40d4
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/execution_list_params.py
@@ -0,0 +1,32 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Optional
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["ExecutionListParams"]
+
+
+class ExecutionListParams(TypedDict, total=False):
+ flow_id: Annotated[str, PropertyInfo(alias="flowId")]
+
+ from_: Annotated[Optional[str], PropertyInfo(alias="from")]
+
+ order_by: Annotated[Literal["startedAt", "finishedAt", "status"], PropertyInfo(alias="orderBy")]
+
+ order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
+
+ page: int
+
+ page_size: Annotated[int, PropertyInfo(alias="pageSize")]
+
+ search: str
+
+ status: Literal["pending", "running", "success", "failed", "cancelled", "skipped", "invalid"]
+
+ to: Optional[str]
+
+ trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/execution_list_response.py b/src/mobilerun_sdk/types/workflows/execution_list_response.py
new file mode 100644
index 0000000..eddf7b3
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/execution_list_response.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ..._models import BaseModel
+from .flow_execution import FlowExecution
+from ..shared.pagination import Pagination
+
+__all__ = ["ExecutionListResponse"]
+
+
+class ExecutionListResponse(BaseModel):
+ items: List[FlowExecution]
+
+ pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/execution_retrieve_response.py b/src/mobilerun_sdk/types/workflows/execution_retrieve_response.py
new file mode 100644
index 0000000..6892a2e
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/execution_retrieve_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..._models import BaseModel
+from .flow_execution import FlowExecution
+
+__all__ = ["ExecutionRetrieveResponse"]
+
+
+class ExecutionRetrieveResponse(BaseModel):
+ data: FlowExecution
diff --git a/src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py b/src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py
new file mode 100644
index 0000000..5f03d3a
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_action_overrides_param.py
@@ -0,0 +1,12 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Optional
+from typing_extensions import TypedDict
+
+__all__ = ["FlowActionOverridesParam"]
+
+
+class FlowActionOverridesParam(TypedDict, total=False):
+ params: Dict[str, Optional[object]]
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
new file mode 100644
index 0000000..a201a30
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_child_action_input_param.py
@@ -0,0 +1,23 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Optional
+from typing_extensions import Required, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+from .flow_action_overrides_param import FlowActionOverridesParam
+
+__all__ = ["FlowChildActionInputParam"]
+
+
+class FlowChildActionInputParam(TypedDict, total=False):
+ action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
+
+ position: Required[int]
+
+ continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
+
+ 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
new file mode 100644
index 0000000..c38a149
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_clone_params.py
@@ -0,0 +1,16 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+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_clone_response.py b/src/mobilerun_sdk/types/workflows/flow_clone_response.py
new file mode 100644
index 0000000..57a8637
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_clone_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..flow import Flow
+from ..._models import BaseModel
+
+__all__ = ["FlowCloneResponse"]
+
+
+class FlowCloneResponse(BaseModel):
+ data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_create_params.py b/src/mobilerun_sdk/types/workflows/flow_create_params.py
new file mode 100644
index 0000000..464086f
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_create_params.py
@@ -0,0 +1,51 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+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
+
+__all__ = ["FlowCreateParams", "Action"]
+
+
+class FlowCreateParams(TypedDict, total=False):
+ actions: Required[Iterable[Action]]
+
+ name: Required[str]
+
+ trigger_id: Required[Annotated[str, PropertyInfo(alias="triggerId")]]
+
+ cooldown_scope: Annotated[Literal["flow", "device"], PropertyInfo(alias="cooldownScope")]
+
+ cooldown_seconds: Annotated[Optional[int], PropertyInfo(alias="cooldownSeconds")]
+
+ 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")]]
+
+ position: Required[int]
+
+ children: Iterable[FlowChildActionInputParam]
+
+ continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
+
+ name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
+
+ overrides: Optional[FlowActionOverridesParam]
diff --git a/src/mobilerun_sdk/types/workflows/flow_create_response.py b/src/mobilerun_sdk/types/workflows/flow_create_response.py
new file mode 100644
index 0000000..f9c5fea
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_create_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..flow import Flow
+from ..._models import BaseModel
+
+__all__ = ["FlowCreateResponse"]
+
+
+class FlowCreateResponse(BaseModel):
+ data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_delete_response.py b/src/mobilerun_sdk/types/workflows/flow_delete_response.py
new file mode 100644
index 0000000..a6243e6
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_delete_response.py
@@ -0,0 +1,9 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..._models import BaseModel
+
+__all__ = ["FlowDeleteResponse"]
+
+
+class FlowDeleteResponse(BaseModel):
+ message: str
diff --git a/src/mobilerun_sdk/types/workflows/flow_execution.py b/src/mobilerun_sdk/types/workflows/flow_execution.py
new file mode 100644
index 0000000..96782d6
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_execution.py
@@ -0,0 +1,36 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["FlowExecution"]
+
+
+class FlowExecution(BaseModel):
+ id: str
+
+ error: Optional[str] = None
+
+ event_id: Optional[str] = FieldInfo(alias="eventId", default=None)
+
+ finished_at: Optional[str] = FieldInfo(alias="finishedAt", default=None)
+
+ flow_id: str = FieldInfo(alias="flowId")
+
+ 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", "cancelled", "skipped", "invalid"]] = None
+
+ trigger_id: str = FieldInfo(alias="triggerId")
+
+ trigger_name: Optional[str] = FieldInfo(alias="triggerName", default=None)
+
+ result: Optional[object] = None
diff --git a/src/mobilerun_sdk/types/workflows/flow_list_params.py b/src/mobilerun_sdk/types/workflows/flow_list_params.py
new file mode 100644
index 0000000..8f00af0
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_list_params.py
@@ -0,0 +1,28 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import List, Optional
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["FlowListParams"]
+
+
+class FlowListParams(TypedDict, total=False):
+ enabled: Optional[bool]
+
+ order_by: Annotated[Literal["name", "createdAt", "updatedAt"], PropertyInfo(alias="orderBy")]
+
+ order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
+
+ page: int
+
+ page_size: Annotated[int, PropertyInfo(alias="pageSize")]
+
+ search: str
+
+ status: List[Literal["healthy", "failing", "blocked"]]
+
+ trigger_id: Annotated[str, PropertyInfo(alias="triggerId")]
diff --git a/src/mobilerun_sdk/types/workflows/flow_list_response.py b/src/mobilerun_sdk/types/workflows/flow_list_response.py
new file mode 100644
index 0000000..ff0feb8
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_list_response.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ..flow import Flow
+from ..._models import BaseModel
+from ..shared.pagination import Pagination
+
+__all__ = ["FlowListResponse"]
+
+
+class FlowListResponse(BaseModel):
+ items: List[Flow]
+
+ pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/flow_retrieve_response.py b/src/mobilerun_sdk/types/workflows/flow_retrieve_response.py
new file mode 100644
index 0000000..0a002a6
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_retrieve_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..flow import Flow
+from ..._models import BaseModel
+
+__all__ = ["FlowRetrieveResponse"]
+
+
+class FlowRetrieveResponse(BaseModel):
+ data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_unblock_response.py b/src/mobilerun_sdk/types/workflows/flow_unblock_response.py
new file mode 100644
index 0000000..3771e29
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_unblock_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..flow import Flow
+from ..._models import BaseModel
+
+__all__ = ["FlowUnblockResponse"]
+
+
+class FlowUnblockResponse(BaseModel):
+ data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flow_update_params.py b/src/mobilerun_sdk/types/workflows/flow_update_params.py
new file mode 100644
index 0000000..af63c04
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_update_params.py
@@ -0,0 +1,33 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Optional
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ..._types import SequenceNotStr
+from ..._utils import PropertyInfo
+
+__all__ = ["FlowUpdateParams"]
+
+
+class FlowUpdateParams(TypedDict, total=False):
+ cooldown_scope: Annotated[Literal["flow", "device"], PropertyInfo(alias="cooldownScope")]
+
+ cooldown_seconds: Annotated[Optional[int], PropertyInfo(alias="cooldownSeconds")]
+
+ 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/flow_update_response.py b/src/mobilerun_sdk/types/workflows/flow_update_response.py
new file mode 100644
index 0000000..8725080
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flow_update_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..flow import Flow
+from ..._models import BaseModel
+
+__all__ = ["FlowUpdateResponse"]
+
+
+class FlowUpdateResponse(BaseModel):
+ data: Flow
diff --git a/src/mobilerun_sdk/types/workflows/flows/__init__.py b/src/mobilerun_sdk/types/workflows/flows/__init__.py
index f8ee8b1..fa77a33 100644
--- a/src/mobilerun_sdk/types/workflows/flows/__init__.py
+++ b/src/mobilerun_sdk/types/workflows/flows/__init__.py
@@ -1,3 +1,11 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
+
+from .flow_action import FlowAction as FlowAction
+from .action_add_params import ActionAddParams as ActionAddParams
+from .action_add_response import ActionAddResponse as ActionAddResponse
+from .action_list_response import ActionListResponse as ActionListResponse
+from .action_replace_params import ActionReplaceParams as ActionReplaceParams
+from .action_remove_response import ActionRemoveResponse as ActionRemoveResponse
+from .action_replace_response import ActionReplaceResponse as ActionReplaceResponse
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_add_params.py b/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
new file mode 100644
index 0000000..749fab6
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/action_add_params.py
@@ -0,0 +1,28 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Iterable, Optional
+from typing_extensions import Required, Annotated, TypedDict
+
+from ...._utils import PropertyInfo
+from ..flow_action_overrides_param import FlowActionOverridesParam
+from ..flow_child_action_input_param import FlowChildActionInputParam
+
+__all__ = ["ActionAddParams"]
+
+
+class ActionAddParams(TypedDict, total=False):
+ action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
+
+ position: Required[int]
+
+ children: Iterable[FlowChildActionInputParam]
+
+ continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
+
+ name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
+
+ overrides: Optional[FlowActionOverridesParam]
+
+ parent_flow_action_id: Annotated[Optional[str], PropertyInfo(alias="parentFlowActionId")]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_add_response.py b/src/mobilerun_sdk/types/workflows/flows/action_add_response.py
new file mode 100644
index 0000000..03d4e31
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/action_add_response.py
@@ -0,0 +1,10 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ...._models import BaseModel
+from .flow_action import FlowAction
+
+__all__ = ["ActionAddResponse"]
+
+
+class ActionAddResponse(BaseModel):
+ data: FlowAction
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_list_response.py b/src/mobilerun_sdk/types/workflows/flows/action_list_response.py
new file mode 100644
index 0000000..7f6bd53
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/action_list_response.py
@@ -0,0 +1,12 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ...._models import BaseModel
+from .flow_action import FlowAction
+
+__all__ = ["ActionListResponse"]
+
+
+class ActionListResponse(BaseModel):
+ data: List[FlowAction]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_remove_response.py b/src/mobilerun_sdk/types/workflows/flows/action_remove_response.py
new file mode 100644
index 0000000..a200db1
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/action_remove_response.py
@@ -0,0 +1,9 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ...._models import BaseModel
+
+__all__ = ["ActionRemoveResponse"]
+
+
+class ActionRemoveResponse(BaseModel):
+ message: str
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py b/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
new file mode 100644
index 0000000..359f228
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/action_replace_params.py
@@ -0,0 +1,30 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Iterable, Optional
+from typing_extensions import Required, Annotated, TypedDict
+
+from ...._utils import PropertyInfo
+from ..flow_action_overrides_param import FlowActionOverridesParam
+from ..flow_child_action_input_param import FlowChildActionInputParam
+
+__all__ = ["ActionReplaceParams", "Action"]
+
+
+class ActionReplaceParams(TypedDict, total=False):
+ actions: Required[Iterable[Action]]
+
+
+class Action(TypedDict, total=False):
+ action_id: Required[Annotated[str, PropertyInfo(alias="actionId")]]
+
+ position: Required[int]
+
+ children: Iterable[FlowChildActionInputParam]
+
+ continue_on_error: Annotated[bool, PropertyInfo(alias="continueOnError")]
+
+ name_override: Annotated[str, PropertyInfo(alias="nameOverride")]
+
+ overrides: Optional[FlowActionOverridesParam]
diff --git a/src/mobilerun_sdk/types/workflows/flows/action_replace_response.py b/src/mobilerun_sdk/types/workflows/flows/action_replace_response.py
new file mode 100644
index 0000000..2914bfa
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/action_replace_response.py
@@ -0,0 +1,12 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ...._models import BaseModel
+from .flow_action import FlowAction
+
+__all__ = ["ActionReplaceResponse"]
+
+
+class ActionReplaceResponse(BaseModel):
+ data: List[FlowAction]
diff --git a/src/mobilerun_sdk/types/workflows/flows/flow_action.py b/src/mobilerun_sdk/types/workflows/flows/flow_action.py
new file mode 100644
index 0000000..2ab9154
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/flows/flow_action.py
@@ -0,0 +1,33 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Dict, Optional
+
+from pydantic import Field as FieldInfo
+
+from ...._models import BaseModel
+
+__all__ = ["FlowAction", "Overrides"]
+
+
+class Overrides(BaseModel):
+ params: Optional[Dict[str, Optional[object]]] = None
+
+
+class FlowAction(BaseModel):
+ id: str
+
+ action_id: str = FieldInfo(alias="actionId")
+
+ continue_on_error: bool = FieldInfo(alias="continueOnError")
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ flow_id: str = FieldInfo(alias="flowId")
+
+ name_override: Optional[str] = FieldInfo(alias="nameOverride", default=None)
+
+ overrides: Optional[Overrides] = None
+
+ parent_flow_action_id: Optional[str] = FieldInfo(alias="parentFlowActionId", default=None)
+
+ position: int
diff --git a/src/mobilerun_sdk/types/workflows/timezone_list_response.py b/src/mobilerun_sdk/types/workflows/timezone_list_response.py
new file mode 100644
index 0000000..6e49c63
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/timezone_list_response.py
@@ -0,0 +1,11 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+
+from ..._models import BaseModel
+
+__all__ = ["TimezoneListResponse"]
+
+
+class TimezoneListResponse(BaseModel):
+ data: List[str]
diff --git a/src/mobilerun_sdk/types/workflows/trigger_create_params.py b/src/mobilerun_sdk/types/workflows/trigger_create_params.py
new file mode 100644
index 0000000..7d8c4b8
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_create_params.py
@@ -0,0 +1,48 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Iterable
+from typing_extensions import Literal, Required, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["TriggerCreateParams", "Conditions", "ScheduleRule"]
+
+
+class TriggerCreateParams(TypedDict, total=False):
+ activation: Required[Literal["event", "schedule", "custom"]]
+
+ name: Required[str]
+
+ conditions: Conditions
+
+ custom_payload_schema: Annotated[Dict[str, object], PropertyInfo(alias="customPayloadSchema")]
+ """Optional JSON Schema for validating payloads sent to this custom trigger"""
+
+ description: str
+
+ event_type: Annotated[str, PropertyInfo(alias="eventType")]
+
+ schedule_rule: Annotated[ScheduleRule, PropertyInfo(alias="scheduleRule")]
+
+ timezone: str
+
+
+class Conditions(TypedDict, total=False):
+ all: Iterable[object]
+
+ any: Iterable[object]
+
+
+class ScheduleRule(TypedDict, total=False):
+ type: Required[Literal["once", "cron", "recurring"]]
+
+ date_time: Annotated[str, PropertyInfo(alias="dateTime")]
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: str
+ """Cron expression (for type=cron)"""
+
+ rrule: str
+ """RRULE string (for type=recurring)"""
diff --git a/src/mobilerun_sdk/types/workflows/trigger_create_response.py b/src/mobilerun_sdk/types/workflows/trigger_create_response.py
new file mode 100644
index 0000000..b2073b1
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_create_response.py
@@ -0,0 +1,55 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Dict, Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["TriggerCreateResponse", "Data", "DataScheduleRule"]
+
+
+class DataScheduleRule(BaseModel):
+ type: Literal["once", "cron", "recurring"]
+
+ date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: Optional[str] = None
+ """Cron expression (for type=cron)"""
+
+ rrule: Optional[str] = None
+ """RRULE string (for type=recurring)"""
+
+
+class Data(BaseModel):
+ id: str
+
+ activation: Literal["event", "schedule", "custom"]
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ custom_payload_schema: Optional[Dict[str, Optional[object]]] = FieldInfo(alias="customPayloadSchema", default=None)
+
+ description: Optional[str] = None
+
+ event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
+
+ name: str
+
+ schedule_rule: DataScheduleRule = FieldInfo(alias="scheduleRule")
+
+ timezone: Optional[str] = None
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
+
+ conditions: Optional[object] = None
+
+ next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
+
+
+class TriggerCreateResponse(BaseModel):
+ data: Data
diff --git a/src/mobilerun_sdk/types/workflows/trigger_delete_response.py b/src/mobilerun_sdk/types/workflows/trigger_delete_response.py
new file mode 100644
index 0000000..5a4cf92
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_delete_response.py
@@ -0,0 +1,9 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from ..._models import BaseModel
+
+__all__ = ["TriggerDeleteResponse"]
+
+
+class TriggerDeleteResponse(BaseModel):
+ message: str
diff --git a/src/mobilerun_sdk/types/workflows/trigger_fire_params.py b/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
new file mode 100644
index 0000000..03847b7
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_fire_params.py
@@ -0,0 +1,17 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict
+from typing_extensions import Required, TypedDict
+
+__all__ = ["TriggerFireParams"]
+
+
+class TriggerFireParams(TypedDict, total=False):
+ payload: Required[Dict[str, object]]
+ """Arbitrary JSON object forwarded to every flow attached to this trigger.
+
+ Validated against the trigger's customPayloadSchema when one is configured;
+ otherwise only "must be a JSON object" is enforced.
+ """
diff --git a/src/mobilerun_sdk/types/workflows/trigger_fire_response.py b/src/mobilerun_sdk/types/workflows/trigger_fire_response.py
new file mode 100644
index 0000000..b0b4951
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_fire_response.py
@@ -0,0 +1,22 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["TriggerFireResponse"]
+
+
+class TriggerFireResponse(BaseModel):
+ enqueued_count: int = FieldInfo(alias="enqueuedCount")
+ """Number of flow executions enqueued.
+
+ May be 0 if no flows are attached to this trigger, or if all attached flows are
+ currently in cooldown.
+ """
+
+ invocation_id: str = FieldInfo(alias="invocationId")
+ """Unique ID for this fire invocation.
+
+ Job IDs in the execution queue are derived from it (one per enqueued flow).
+ """
diff --git a/src/mobilerun_sdk/types/workflows/trigger_list_params.py b/src/mobilerun_sdk/types/workflows/trigger_list_params.py
new file mode 100644
index 0000000..dad1a5f
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_list_params.py
@@ -0,0 +1,25 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["TriggerListParams"]
+
+
+class TriggerListParams(TypedDict, total=False):
+ activation: Literal["event", "schedule", "custom"]
+
+ event_type: Annotated[str, PropertyInfo(alias="eventType")]
+
+ order_by: Annotated[Literal["name", "createdAt", "updatedAt"], PropertyInfo(alias="orderBy")]
+
+ order_by_direction: Annotated[Literal["asc", "desc"], PropertyInfo(alias="orderByDirection")]
+
+ page: int
+
+ page_size: Annotated[int, PropertyInfo(alias="pageSize")]
+
+ search: str
diff --git a/src/mobilerun_sdk/types/workflows/trigger_list_response.py b/src/mobilerun_sdk/types/workflows/trigger_list_response.py
new file mode 100644
index 0000000..703fd4c
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_list_response.py
@@ -0,0 +1,58 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Dict, List, Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+from ..shared.pagination import Pagination
+
+__all__ = ["TriggerListResponse", "Item", "ItemScheduleRule"]
+
+
+class ItemScheduleRule(BaseModel):
+ type: Literal["once", "cron", "recurring"]
+
+ date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: Optional[str] = None
+ """Cron expression (for type=cron)"""
+
+ rrule: Optional[str] = None
+ """RRULE string (for type=recurring)"""
+
+
+class Item(BaseModel):
+ id: str
+
+ activation: Literal["event", "schedule", "custom"]
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
+
+ description: Optional[str] = None
+
+ event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
+
+ name: str
+
+ schedule_rule: Optional[ItemScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
+
+ timezone: Optional[str] = None
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
+
+ conditions: Optional[object] = None
+
+ next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
+
+
+class TriggerListResponse(BaseModel):
+ items: List[Item]
+
+ pagination: Pagination
diff --git a/src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py b/src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py
new file mode 100644
index 0000000..fc48aa4
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_retrieve_response.py
@@ -0,0 +1,55 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Dict, Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["TriggerRetrieveResponse", "Data", "DataScheduleRule"]
+
+
+class DataScheduleRule(BaseModel):
+ type: Literal["once", "cron", "recurring"]
+
+ date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: Optional[str] = None
+ """Cron expression (for type=cron)"""
+
+ rrule: Optional[str] = None
+ """RRULE string (for type=recurring)"""
+
+
+class Data(BaseModel):
+ id: str
+
+ activation: Literal["event", "schedule", "custom"]
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
+
+ description: Optional[str] = None
+
+ event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
+
+ name: str
+
+ schedule_rule: Optional[DataScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
+
+ timezone: Optional[str] = None
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
+
+ conditions: Optional[object] = None
+
+ next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
+
+
+class TriggerRetrieveResponse(BaseModel):
+ data: Data
diff --git a/src/mobilerun_sdk/types/workflows/trigger_update_params.py b/src/mobilerun_sdk/types/workflows/trigger_update_params.py
new file mode 100644
index 0000000..ecf86b7
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_update_params.py
@@ -0,0 +1,48 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Dict, Iterable, Optional
+from typing_extensions import Literal, Required, Annotated, TypedDict
+
+from ..._utils import PropertyInfo
+
+__all__ = ["TriggerUpdateParams", "Conditions", "ScheduleRule"]
+
+
+class TriggerUpdateParams(TypedDict, total=False):
+ activation: Literal["event", "schedule", "custom"]
+
+ conditions: Conditions
+
+ custom_payload_schema: Annotated[Optional[Dict[str, object]], PropertyInfo(alias="customPayloadSchema")]
+ """Optional JSON Schema for validating payloads sent to this custom trigger"""
+
+ description: str
+
+ event_type: Annotated[str, PropertyInfo(alias="eventType")]
+
+ name: str
+
+ schedule_rule: Annotated[ScheduleRule, PropertyInfo(alias="scheduleRule")]
+
+ timezone: Optional[str]
+
+
+class Conditions(TypedDict, total=False):
+ all: Iterable[object]
+
+ any: Iterable[object]
+
+
+class ScheduleRule(TypedDict, total=False):
+ type: Required[Literal["once", "cron", "recurring"]]
+
+ date_time: Annotated[str, PropertyInfo(alias="dateTime")]
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: str
+ """Cron expression (for type=cron)"""
+
+ rrule: str
+ """RRULE string (for type=recurring)"""
diff --git a/src/mobilerun_sdk/types/workflows/trigger_update_response.py b/src/mobilerun_sdk/types/workflows/trigger_update_response.py
new file mode 100644
index 0000000..a5a9418
--- /dev/null
+++ b/src/mobilerun_sdk/types/workflows/trigger_update_response.py
@@ -0,0 +1,55 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import Dict, Optional
+from typing_extensions import Literal
+
+from pydantic import Field as FieldInfo
+
+from ..._models import BaseModel
+
+__all__ = ["TriggerUpdateResponse", "Data", "DataScheduleRule"]
+
+
+class DataScheduleRule(BaseModel):
+ type: Literal["once", "cron", "recurring"]
+
+ date_time: Optional[str] = FieldInfo(alias="dateTime", default=None)
+ """ISO 8601 datetime (for type=once)"""
+
+ expression: Optional[str] = None
+ """Cron expression (for type=cron)"""
+
+ rrule: Optional[str] = None
+ """RRULE string (for type=recurring)"""
+
+
+class Data(BaseModel):
+ id: str
+
+ activation: Literal["event", "schedule", "custom"]
+
+ created_at: Optional[str] = FieldInfo(alias="createdAt", default=None)
+
+ custom_payload_schema: Optional[Dict[str, object]] = FieldInfo(alias="customPayloadSchema", default=None)
+
+ description: Optional[str] = None
+
+ event_type: Optional[str] = FieldInfo(alias="eventType", default=None)
+
+ name: str
+
+ schedule_rule: Optional[DataScheduleRule] = FieldInfo(alias="scheduleRule", default=None)
+
+ timezone: Optional[str] = None
+
+ updated_at: Optional[str] = FieldInfo(alias="updatedAt", default=None)
+
+ user_id: str = FieldInfo(alias="userId")
+
+ conditions: Optional[object] = None
+
+ next_fire_time: Optional[str] = FieldInfo(alias="nextFireTime", default=None)
+
+
+class TriggerUpdateResponse(BaseModel):
+ data: Data
diff --git a/tests/api_resources/workflows/__init__.py b/tests/api_resources/workflows/__init__.py
new file mode 100644
index 0000000..fd8019a
--- /dev/null
+++ b/tests/api_resources/workflows/__init__.py
@@ -0,0 +1 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/actions/__init__.py b/tests/api_resources/workflows/actions/__init__.py
new file mode 100644
index 0000000..fd8019a
--- /dev/null
+++ b/tests/api_resources/workflows/actions/__init__.py
@@ -0,0 +1 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/actions/test_services.py b/tests/api_resources/workflows/actions/test_services.py
new file mode 100644
index 0000000..442a3bd
--- /dev/null
+++ b/tests/api_resources/workflows/actions/test_services.py
@@ -0,0 +1,164 @@
+# 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.actions import ServiceListResponse, ServiceListMethodsResponse
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestServices:
+ 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_list(self, client: Mobilerun) -> None:
+ service = client.workflows.actions.services.list()
+ assert_matches_type(ServiceListResponse, service, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.services.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ service = response.parse()
+ assert_matches_type(ServiceListResponse, service, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.actions.services.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ service = response.parse()
+ assert_matches_type(ServiceListResponse, service, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_methods(self, client: Mobilerun) -> None:
+ service = client.workflows.actions.services.list_methods(
+ "x",
+ )
+ assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list_methods(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.services.with_raw_response.list_methods(
+ "x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ service = response.parse()
+ assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list_methods(self, client: Mobilerun) -> None:
+ with client.workflows.actions.services.with_streaming_response.list_methods(
+ "x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ service = response.parse()
+ assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_list_methods(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `service` but received ''"):
+ client.workflows.actions.services.with_raw_response.list_methods(
+ "",
+ )
+
+
+class TestAsyncServices:
+ 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_list(self, async_client: AsyncMobilerun) -> None:
+ service = await async_client.workflows.actions.services.list()
+ assert_matches_type(ServiceListResponse, service, 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.actions.services.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ service = await response.parse()
+ assert_matches_type(ServiceListResponse, service, 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.actions.services.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ service = await response.parse()
+ assert_matches_type(ServiceListResponse, service, 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_methods(self, async_client: AsyncMobilerun) -> None:
+ service = await async_client.workflows.actions.services.list_methods(
+ "x",
+ )
+ assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_list_methods(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.actions.services.with_raw_response.list_methods(
+ "x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ service = await response.parse()
+ assert_matches_type(ServiceListMethodsResponse, service, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_list_methods(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.actions.services.with_streaming_response.list_methods(
+ "x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ service = await response.parse()
+ assert_matches_type(ServiceListMethodsResponse, service, 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_list_methods(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `service` but received ''"):
+ await async_client.workflows.actions.services.with_raw_response.list_methods(
+ "",
+ )
diff --git a/tests/api_resources/workflows/events/__init__.py b/tests/api_resources/workflows/events/__init__.py
new file mode 100644
index 0000000..fd8019a
--- /dev/null
+++ b/tests/api_resources/workflows/events/__init__.py
@@ -0,0 +1 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/events/test_catalog.py b/tests/api_resources/workflows/events/test_catalog.py
new file mode 100644
index 0000000..df97792
--- /dev/null
+++ b/tests/api_resources/workflows/events/test_catalog.py
@@ -0,0 +1,201 @@
+# 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.events import (
+ CatalogListResponse,
+ CatalogRegisterResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestCatalog:
+ 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_list(self, client: Mobilerun) -> None:
+ catalog = client.workflows.events.catalog.list()
+ assert_matches_type(CatalogListResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Mobilerun) -> None:
+ catalog = client.workflows.events.catalog.list(
+ page=1,
+ page_size=1,
+ source="device",
+ )
+ assert_matches_type(CatalogListResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.events.catalog.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ catalog = response.parse()
+ assert_matches_type(CatalogListResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.events.catalog.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ catalog = response.parse()
+ assert_matches_type(CatalogListResponse, catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_register(self, client: Mobilerun) -> None:
+ catalog = client.workflows.events.catalog.register(
+ events=[
+ {
+ "event_type": "x",
+ "label": "x",
+ }
+ ],
+ )
+ assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_register(self, client: Mobilerun) -> None:
+ response = client.workflows.events.catalog.with_raw_response.register(
+ events=[
+ {
+ "event_type": "x",
+ "label": "x",
+ }
+ ],
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ catalog = response.parse()
+ assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_register(self, client: Mobilerun) -> None:
+ with client.workflows.events.catalog.with_streaming_response.register(
+ events=[
+ {
+ "event_type": "x",
+ "label": "x",
+ }
+ ],
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ catalog = response.parse()
+ assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncCatalog:
+ 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_list(self, async_client: AsyncMobilerun) -> None:
+ catalog = await async_client.workflows.events.catalog.list()
+ assert_matches_type(CatalogListResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ catalog = await async_client.workflows.events.catalog.list(
+ page=1,
+ page_size=1,
+ source="device",
+ )
+ assert_matches_type(CatalogListResponse, catalog, 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.events.catalog.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ catalog = await response.parse()
+ assert_matches_type(CatalogListResponse, catalog, 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.events.catalog.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ catalog = await response.parse()
+ assert_matches_type(CatalogListResponse, catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_register(self, async_client: AsyncMobilerun) -> None:
+ catalog = await async_client.workflows.events.catalog.register(
+ events=[
+ {
+ "event_type": "x",
+ "label": "x",
+ }
+ ],
+ )
+ assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_register(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.events.catalog.with_raw_response.register(
+ events=[
+ {
+ "event_type": "x",
+ "label": "x",
+ }
+ ],
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ catalog = await response.parse()
+ assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_register(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.events.catalog.with_streaming_response.register(
+ events=[
+ {
+ "event_type": "x",
+ "label": "x",
+ }
+ ],
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ catalog = await response.parse()
+ assert_matches_type(CatalogRegisterResponse, catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/flows/__init__.py b/tests/api_resources/workflows/flows/__init__.py
new file mode 100644
index 0000000..fd8019a
--- /dev/null
+++ b/tests/api_resources/workflows/flows/__init__.py
@@ -0,0 +1 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
diff --git a/tests/api_resources/workflows/flows/test_actions.py b/tests/api_resources/workflows/flows/test_actions.py
new file mode 100644
index 0000000..797f724
--- /dev/null
+++ b/tests/api_resources/workflows/flows/test_actions.py
@@ -0,0 +1,495 @@
+# 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.flows import (
+ ActionAddResponse,
+ ActionListResponse,
+ ActionRemoveResponse,
+ ActionReplaceResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestActions:
+ 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_list(self, client: Mobilerun) -> None:
+ action = client.workflows.flows.actions.list(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.actions.with_raw_response.list(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.flows.actions.with_streaming_response.list(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_list(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.actions.with_raw_response.list(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_add(self, client: Mobilerun) -> None:
+ action = client.workflows.flows.actions.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ )
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_add_with_all_params(self, client: Mobilerun) -> None:
+ action = client.workflows.flows.actions.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ children=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ "continue_on_error": True,
+ "name_override": "x",
+ "overrides": {"params": {"foo": "bar"}},
+ }
+ ],
+ continue_on_error=True,
+ name_override="x",
+ overrides={"params": {"foo": "bar"}},
+ parent_flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_add(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.actions.with_raw_response.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_add(self, client: Mobilerun) -> None:
+ with client.workflows.flows.actions.with_streaming_response.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_add(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.actions.with_raw_response.add(
+ flow_id="",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_remove(self, client: Mobilerun) -> None:
+ action = client.workflows.flows.actions.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionRemoveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_remove(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.actions.with_raw_response.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionRemoveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_remove(self, client: Mobilerun) -> None:
+ with client.workflows.flows.actions.with_streaming_response.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionRemoveResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_remove(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.actions.with_raw_response.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="",
+ )
+
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_action_id` but received ''"):
+ client.workflows.flows.actions.with_raw_response.remove(
+ flow_action_id="",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_replace(self, client: Mobilerun) -> None:
+ action = client.workflows.flows.actions.replace(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ )
+ assert_matches_type(ActionReplaceResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_replace(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.actions.with_raw_response.replace(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionReplaceResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_replace(self, client: Mobilerun) -> None:
+ with client.workflows.flows.actions.with_streaming_response.replace(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionReplaceResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_replace(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.actions.with_raw_response.replace(
+ flow_id="",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ )
+
+
+class TestAsyncActions:
+ 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_list(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.flows.actions.list(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionListResponse, action, 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.flows.actions.with_raw_response.list(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionListResponse, action, 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.flows.actions.with_streaming_response.list(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionListResponse, action, 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_list(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.actions.with_raw_response.list(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_add(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.flows.actions.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ )
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_add_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.flows.actions.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ children=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ "continue_on_error": True,
+ "name_override": "x",
+ "overrides": {"params": {"foo": "bar"}},
+ }
+ ],
+ continue_on_error=True,
+ name_override="x",
+ overrides={"params": {"foo": "bar"}},
+ parent_flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_add(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.actions.with_raw_response.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionAddResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_add(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.actions.with_streaming_response.add(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionAddResponse, action, 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_add(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.actions.with_raw_response.add(
+ flow_id="",
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ position=0,
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_remove(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.flows.actions.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionRemoveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_remove(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.actions.with_raw_response.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionRemoveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_remove(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.actions.with_streaming_response.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionRemoveResponse, action, 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_remove(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.actions.with_raw_response.remove(
+ flow_action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ flow_id="",
+ )
+
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_action_id` but received ''"):
+ await async_client.workflows.flows.actions.with_raw_response.remove(
+ flow_action_id="",
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_replace(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.flows.actions.replace(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ )
+ assert_matches_type(ActionReplaceResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_replace(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.actions.with_raw_response.replace(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionReplaceResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_replace(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.actions.with_streaming_response.replace(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionReplaceResponse, action, 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_replace(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.actions.with_raw_response.replace(
+ flow_id="",
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ )
diff --git a/tests/api_resources/workflows/test_action_catalog.py b/tests/api_resources/workflows/test_action_catalog.py
new file mode 100644
index 0000000..9f228db
--- /dev/null
+++ b/tests/api_resources/workflows/test_action_catalog.py
@@ -0,0 +1,187 @@
+# 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 (
+ ActionCatalogListResponse,
+ ActionCatalogRetrieveResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestActionCatalog:
+ 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_retrieve(self, client: Mobilerun) -> None:
+ action_catalog = client.workflows.action_catalog.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_retrieve(self, client: Mobilerun) -> None:
+ response = client.workflows.action_catalog.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action_catalog = response.parse()
+ assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
+ with client.workflows.action_catalog.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action_catalog = response.parse()
+ assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_retrieve(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `catalog_entry_id` but received ''"):
+ client.workflows.action_catalog.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list(self, client: Mobilerun) -> None:
+ action_catalog = client.workflows.action_catalog.list()
+ assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Mobilerun) -> None:
+ action_catalog = client.workflows.action_catalog.list(
+ page=1,
+ page_size=1,
+ service="tasks_api",
+ )
+ assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.action_catalog.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action_catalog = response.parse()
+ assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.action_catalog.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action_catalog = response.parse()
+ assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncActionCatalog:
+ 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ action_catalog = await async_client.workflows.action_catalog.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.action_catalog.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action_catalog = await response.parse()
+ assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.action_catalog.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action_catalog = await response.parse()
+ assert_matches_type(ActionCatalogRetrieveResponse, action_catalog, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `catalog_entry_id` but received ''"):
+ await async_client.workflows.action_catalog.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list(self, async_client: AsyncMobilerun) -> None:
+ action_catalog = await async_client.workflows.action_catalog.list()
+ assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ action_catalog = await async_client.workflows.action_catalog.list(
+ page=1,
+ page_size=1,
+ service="tasks_api",
+ )
+ assert_matches_type(ActionCatalogListResponse, action_catalog, 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.action_catalog.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action_catalog = await response.parse()
+ assert_matches_type(ActionCatalogListResponse, action_catalog, 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.action_catalog.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action_catalog = await response.parse()
+ assert_matches_type(ActionCatalogListResponse, action_catalog, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_actions.py b/tests/api_resources/workflows/test_actions.py
new file mode 100644
index 0000000..9533759
--- /dev/null
+++ b/tests/api_resources/workflows/test_actions.py
@@ -0,0 +1,482 @@
+# 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 (
+ ActionListResponse,
+ ActionCreateResponse,
+ ActionDeleteResponse,
+ ActionUpdateResponse,
+ ActionRetrieveResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestActions:
+ 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:
+ action = client.workflows.actions.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ )
+ assert_matches_type(ActionCreateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_create_with_all_params(self, client: Mobilerun) -> None:
+ action = client.workflows.actions.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ description="description",
+ params={"foo": "bar"},
+ )
+ assert_matches_type(ActionCreateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_create(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.with_raw_response.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionCreateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_create(self, client: Mobilerun) -> None:
+ with client.workflows.actions.with_streaming_response.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionCreateResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_retrieve(self, client: Mobilerun) -> None:
+ action = client.workflows.actions.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionRetrieveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_retrieve(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionRetrieveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
+ with client.workflows.actions.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionRetrieveResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_retrieve(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
+ client.workflows.actions.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_update(self, client: Mobilerun) -> None:
+ action = client.workflows.actions.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_update_with_all_params(self, client: Mobilerun) -> None:
+ action = client.workflows.actions.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ description="description",
+ name="x",
+ params={"foo": "bar"},
+ )
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_update(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.with_raw_response.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_update(self, client: Mobilerun) -> None:
+ with client.workflows.actions.with_streaming_response.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_update(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
+ client.workflows.actions.with_raw_response.update(
+ action_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list(self, client: Mobilerun) -> None:
+ action = client.workflows.actions.list()
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Mobilerun) -> None:
+ action = client.workflows.actions.list(
+ order_by="name",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ service="tasks_api",
+ )
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = response.parse()
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.actions.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = response.parse()
+ assert_matches_type(ActionListResponse, action, 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:
+ action = client.workflows.actions.delete(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionDeleteResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_delete(self, client: Mobilerun) -> None:
+ response = client.workflows.actions.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"
+ action = response.parse()
+ assert_matches_type(ActionDeleteResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_delete(self, client: Mobilerun) -> None:
+ with client.workflows.actions.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"
+
+ action = response.parse()
+ assert_matches_type(ActionDeleteResponse, action, 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 `action_id` but received ''"):
+ client.workflows.actions.with_raw_response.delete(
+ "",
+ )
+
+
+class TestAsyncActions:
+ 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:
+ action = await async_client.workflows.actions.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ )
+ assert_matches_type(ActionCreateResponse, action, 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:
+ action = await async_client.workflows.actions.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ description="description",
+ params={"foo": "bar"},
+ )
+ assert_matches_type(ActionCreateResponse, action, 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.actions.with_raw_response.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionCreateResponse, action, 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.actions.with_streaming_response.create(
+ catalog_entry_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ name="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionCreateResponse, action, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.actions.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionRetrieveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.actions.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionRetrieveResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.actions.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionRetrieveResponse, action, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
+ await async_client.workflows.actions.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_update(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.actions.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_update_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.actions.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ description="description",
+ name="x",
+ params={"foo": "bar"},
+ )
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.actions.with_raw_response.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionUpdateResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.actions.with_streaming_response.update(
+ action_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionUpdateResponse, action, 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_update(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `action_id` but received ''"):
+ await async_client.workflows.actions.with_raw_response.update(
+ action_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.actions.list()
+ assert_matches_type(ActionListResponse, action, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ action = await async_client.workflows.actions.list(
+ order_by="name",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ service="tasks_api",
+ )
+ assert_matches_type(ActionListResponse, action, 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.actions.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ action = await response.parse()
+ assert_matches_type(ActionListResponse, action, 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.actions.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ action = await response.parse()
+ assert_matches_type(ActionListResponse, action, 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:
+ action = await async_client.workflows.actions.delete(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ActionDeleteResponse, action, 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.actions.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"
+ action = await response.parse()
+ assert_matches_type(ActionDeleteResponse, action, 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.actions.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"
+
+ action = await response.parse()
+ assert_matches_type(ActionDeleteResponse, action, 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 `action_id` but received ''"):
+ await async_client.workflows.actions.with_raw_response.delete(
+ "",
+ )
diff --git a/tests/api_resources/workflows/test_events.py b/tests/api_resources/workflows/test_events.py
new file mode 100644
index 0000000..687e21b
--- /dev/null
+++ b/tests/api_resources/workflows/test_events.py
@@ -0,0 +1,199 @@
+# 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 (
+ EventDryRunResponse,
+ EventIngestResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestEvents:
+ 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_dry_run(self, client: Mobilerun) -> None:
+ event = client.workflows.events.dry_run(
+ event_type="x",
+ )
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_dry_run_with_all_params(self, client: Mobilerun) -> None:
+ event = client.workflows.events.dry_run(
+ event_type="x",
+ payload={"foo": "bar"},
+ )
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_dry_run(self, client: Mobilerun) -> None:
+ response = client.workflows.events.with_raw_response.dry_run(
+ event_type="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ event = response.parse()
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_dry_run(self, client: Mobilerun) -> None:
+ with client.workflows.events.with_streaming_response.dry_run(
+ event_type="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ event = response.parse()
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_ingest(self, client: Mobilerun) -> None:
+ event = client.workflows.events.ingest(
+ event_type="x",
+ )
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_ingest_with_all_params(self, client: Mobilerun) -> None:
+ event = client.workflows.events.ingest(
+ event_type="x",
+ payload={"foo": "bar"},
+ )
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_ingest(self, client: Mobilerun) -> None:
+ response = client.workflows.events.with_raw_response.ingest(
+ event_type="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ event = response.parse()
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_ingest(self, client: Mobilerun) -> None:
+ with client.workflows.events.with_streaming_response.ingest(
+ event_type="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ event = response.parse()
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncEvents:
+ 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_dry_run(self, async_client: AsyncMobilerun) -> None:
+ event = await async_client.workflows.events.dry_run(
+ event_type="x",
+ )
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ 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",
+ payload={"foo": "bar"},
+ )
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_dry_run(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.events.with_raw_response.dry_run(
+ event_type="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ event = await response.parse()
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_dry_run(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.events.with_streaming_response.dry_run(
+ event_type="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ event = await response.parse()
+ assert_matches_type(EventDryRunResponse, event, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_ingest(self, async_client: AsyncMobilerun) -> None:
+ event = await async_client.workflows.events.ingest(
+ event_type="x",
+ )
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_ingest_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ event = await async_client.workflows.events.ingest(
+ event_type="x",
+ payload={"foo": "bar"},
+ )
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_ingest(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.events.with_raw_response.ingest(
+ event_type="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ event = await response.parse()
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_ingest(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.events.with_streaming_response.ingest(
+ event_type="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ event = await response.parse()
+ assert_matches_type(EventIngestResponse, event, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_executions.py b/tests/api_resources/workflows/test_executions.py
new file mode 100644
index 0000000..891bd9b
--- /dev/null
+++ b/tests/api_resources/workflows/test_executions.py
@@ -0,0 +1,280 @@
+# 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 (
+ ExecutionListResponse,
+ ExecutionRetrieveResponse,
+ ExecutionGetMetricsResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestExecutions:
+ 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_retrieve(self, client: Mobilerun) -> None:
+ execution = client.workflows.executions.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_retrieve(self, client: Mobilerun) -> None:
+ response = client.workflows.executions.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ execution = response.parse()
+ assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
+ with client.workflows.executions.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ execution = response.parse()
+ assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_retrieve(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `execution_id` but received ''"):
+ client.workflows.executions.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list(self, client: Mobilerun) -> None:
+ execution = client.workflows.executions.list()
+ assert_matches_type(ExecutionListResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Mobilerun) -> None:
+ execution = client.workflows.executions.list(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ from_="from",
+ order_by="startedAt",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ status="pending",
+ to="to",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ExecutionListResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.executions.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ execution = response.parse()
+ assert_matches_type(ExecutionListResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.executions.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ execution = response.parse()
+ assert_matches_type(ExecutionListResponse, execution, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_get_metrics(self, client: Mobilerun) -> None:
+ execution = client.workflows.executions.get_metrics()
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_get_metrics_with_all_params(self, client: Mobilerun) -> None:
+ execution = client.workflows.executions.get_metrics(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ from_="from",
+ to="to",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_get_metrics(self, client: Mobilerun) -> None:
+ response = client.workflows.executions.with_raw_response.get_metrics()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ execution = response.parse()
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_get_metrics(self, client: Mobilerun) -> None:
+ with client.workflows.executions.with_streaming_response.get_metrics() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ execution = response.parse()
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncExecutions:
+ 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ execution = await async_client.workflows.executions.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.executions.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ execution = await response.parse()
+ assert_matches_type(ExecutionRetrieveResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.executions.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ execution = await response.parse()
+ assert_matches_type(ExecutionRetrieveResponse, execution, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `execution_id` but received ''"):
+ await async_client.workflows.executions.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list(self, async_client: AsyncMobilerun) -> None:
+ execution = await async_client.workflows.executions.list()
+ assert_matches_type(ExecutionListResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ execution = await async_client.workflows.executions.list(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ from_="from",
+ order_by="startedAt",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ status="pending",
+ to="to",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ExecutionListResponse, execution, 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.executions.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ execution = await response.parse()
+ assert_matches_type(ExecutionListResponse, execution, 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.executions.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ execution = await response.parse()
+ assert_matches_type(ExecutionListResponse, execution, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_get_metrics(self, async_client: AsyncMobilerun) -> None:
+ execution = await async_client.workflows.executions.get_metrics()
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_get_metrics_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ execution = await async_client.workflows.executions.get_metrics(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ from_="from",
+ to="to",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_get_metrics(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.executions.with_raw_response.get_metrics()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ execution = await response.parse()
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_get_metrics(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.executions.with_streaming_response.get_metrics() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ execution = await response.parse()
+ assert_matches_type(ExecutionGetMetricsResponse, execution, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_flows.py b/tests/api_resources/workflows/test_flows.py
new file mode 100644
index 0000000..34eb5e5
--- /dev/null
+++ b/tests/api_resources/workflows/test_flows.py
@@ -0,0 +1,774 @@
+# 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 (
+ FlowListResponse,
+ FlowCloneResponse,
+ FlowCreateResponse,
+ FlowDeleteResponse,
+ FlowUpdateResponse,
+ FlowUnblockResponse,
+ FlowRetrieveResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestFlows:
+ 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:
+ flow = client.workflows.flows.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowCreateResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_create_with_all_params(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ "children": [
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ "continue_on_error": True,
+ "name_override": "x",
+ "overrides": {"params": {"foo": "bar"}},
+ }
+ ],
+ "continue_on_error": True,
+ "name_override": "x",
+ "overrides": {"params": {"foo": "bar"}},
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ 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"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_create(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.with_raw_response.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = response.parse()
+ assert_matches_type(FlowCreateResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_create(self, client: Mobilerun) -> None:
+ with client.workflows.flows.with_streaming_response.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = response.parse()
+ assert_matches_type(FlowCreateResponse, flow, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_retrieve(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_retrieve(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = response.parse()
+ assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
+ with client.workflows.flows.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = response.parse()
+ assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_retrieve(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_update(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowUpdateResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_update_with_all_params(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ 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"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_update(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.with_raw_response.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = response.parse()
+ assert_matches_type(FlowUpdateResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_update(self, client: Mobilerun) -> None:
+ with client.workflows.flows.with_streaming_response.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = response.parse()
+ assert_matches_type(FlowUpdateResponse, flow, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_update(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.with_raw_response.update(
+ flow_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.list()
+ assert_matches_type(FlowListResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.list(
+ enabled=True,
+ order_by="name",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ status=["healthy"],
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowListResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = response.parse()
+ assert_matches_type(FlowListResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.flows.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = response.parse()
+ assert_matches_type(FlowListResponse, flow, 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:
+ flow = client.workflows.flows.delete(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowDeleteResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_delete(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.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"
+ flow = response.parse()
+ assert_matches_type(FlowDeleteResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_delete(self, client: Mobilerun) -> None:
+ with client.workflows.flows.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"
+
+ flow = response.parse()
+ assert_matches_type(FlowDeleteResponse, flow, 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 `flow_id` but received ''"):
+ client.workflows.flows.with_raw_response.delete(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_clone(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.clone(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowCloneResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ 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"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_clone(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.with_raw_response.clone(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = response.parse()
+ assert_matches_type(FlowCloneResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_clone(self, client: Mobilerun) -> None:
+ with client.workflows.flows.with_streaming_response.clone(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = response.parse()
+ assert_matches_type(FlowCloneResponse, flow, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_clone(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.with_raw_response.clone(
+ flow_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_unblock(self, client: Mobilerun) -> None:
+ flow = client.workflows.flows.unblock(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowUnblockResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_unblock(self, client: Mobilerun) -> None:
+ response = client.workflows.flows.with_raw_response.unblock(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = response.parse()
+ assert_matches_type(FlowUnblockResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_unblock(self, client: Mobilerun) -> None:
+ with client.workflows.flows.with_streaming_response.unblock(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = response.parse()
+ assert_matches_type(FlowUnblockResponse, flow, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_unblock(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ client.workflows.flows.with_raw_response.unblock(
+ "",
+ )
+
+
+class TestAsyncFlows:
+ 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:
+ flow = await async_client.workflows.flows.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowCreateResponse, flow, 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:
+ flow = await async_client.workflows.flows.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ "children": [
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ "continue_on_error": True,
+ "name_override": "x",
+ "overrides": {"params": {"foo": "bar"}},
+ }
+ ],
+ "continue_on_error": True,
+ "name_override": "x",
+ "overrides": {"params": {"foo": "bar"}},
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ 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"])
+
+ @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.flows.with_raw_response.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = await response.parse()
+ assert_matches_type(FlowCreateResponse, flow, 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.flows.with_streaming_response.create(
+ actions=[
+ {
+ "action_id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ "position": 0,
+ }
+ ],
+ name="x",
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = await response.parse()
+ assert_matches_type(FlowCreateResponse, flow, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = await response.parse()
+ assert_matches_type(FlowRetrieveResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = await response.parse()
+ assert_matches_type(FlowRetrieveResponse, flow, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_update(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowUpdateResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_update_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ 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"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.with_raw_response.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = await response.parse()
+ assert_matches_type(FlowUpdateResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.with_streaming_response.update(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = await response.parse()
+ assert_matches_type(FlowUpdateResponse, flow, 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_update(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.with_raw_response.update(
+ flow_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.list()
+ assert_matches_type(FlowListResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.list(
+ enabled=True,
+ order_by="name",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ status=["healthy"],
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowListResponse, flow, 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.flows.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = await response.parse()
+ assert_matches_type(FlowListResponse, flow, 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.flows.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = await response.parse()
+ assert_matches_type(FlowListResponse, flow, 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:
+ flow = await async_client.workflows.flows.delete(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowDeleteResponse, flow, 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.flows.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"
+ flow = await response.parse()
+ assert_matches_type(FlowDeleteResponse, flow, 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.flows.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"
+
+ flow = await response.parse()
+ assert_matches_type(FlowDeleteResponse, flow, 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 `flow_id` but received ''"):
+ await async_client.workflows.flows.with_raw_response.delete(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_clone(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.clone(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowCloneResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ 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"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_clone(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.with_raw_response.clone(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = await response.parse()
+ assert_matches_type(FlowCloneResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_clone(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.with_streaming_response.clone(
+ flow_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = await response.parse()
+ assert_matches_type(FlowCloneResponse, flow, 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_clone(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.with_raw_response.clone(
+ flow_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_unblock(self, async_client: AsyncMobilerun) -> None:
+ flow = await async_client.workflows.flows.unblock(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(FlowUnblockResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_unblock(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.flows.with_raw_response.unblock(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ flow = await response.parse()
+ assert_matches_type(FlowUnblockResponse, flow, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_unblock(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.flows.with_streaming_response.unblock(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ flow = await response.parse()
+ assert_matches_type(FlowUnblockResponse, flow, 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_unblock(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `flow_id` but received ''"):
+ await async_client.workflows.flows.with_raw_response.unblock(
+ "",
+ )
diff --git a/tests/api_resources/workflows/test_timezones.py b/tests/api_resources/workflows/test_timezones.py
new file mode 100644
index 0000000..fab060b
--- /dev/null
+++ b/tests/api_resources/workflows/test_timezones.py
@@ -0,0 +1,80 @@
+# 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 TimezoneListResponse
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestTimezones:
+ 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_list(self, client: Mobilerun) -> None:
+ timezone = client.workflows.timezones.list()
+ assert_matches_type(TimezoneListResponse, timezone, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.timezones.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ timezone = response.parse()
+ assert_matches_type(TimezoneListResponse, timezone, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.timezones.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ timezone = response.parse()
+ assert_matches_type(TimezoneListResponse, timezone, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncTimezones:
+ 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_list(self, async_client: AsyncMobilerun) -> None:
+ timezone = await async_client.workflows.timezones.list()
+ assert_matches_type(TimezoneListResponse, timezone, 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.timezones.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ timezone = await response.parse()
+ assert_matches_type(TimezoneListResponse, timezone, 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.timezones.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ timezone = await response.parse()
+ assert_matches_type(TimezoneListResponse, timezone, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/workflows/test_triggers.py b/tests/api_resources/workflows/test_triggers.py
new file mode 100644
index 0000000..5f9b669
--- /dev/null
+++ b/tests/api_resources/workflows/test_triggers.py
@@ -0,0 +1,627 @@
+# 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 (
+ TriggerFireResponse,
+ TriggerListResponse,
+ TriggerCreateResponse,
+ TriggerDeleteResponse,
+ TriggerUpdateResponse,
+ TriggerRetrieveResponse,
+)
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestTriggers:
+ 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:
+ trigger = client.workflows.triggers.create(
+ activation="event",
+ name="x",
+ )
+ assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_create_with_all_params(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.create(
+ activation="event",
+ name="x",
+ conditions={
+ "all": [{}],
+ "any": [{}],
+ },
+ custom_payload_schema={"foo": "bar"},
+ description="description",
+ event_type="eventType",
+ schedule_rule={
+ "type": "once",
+ "date_time": "dateTime",
+ "expression": "expression",
+ "rrule": "rrule",
+ },
+ timezone="timezone",
+ )
+ assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_create(self, client: Mobilerun) -> None:
+ response = client.workflows.triggers.with_raw_response.create(
+ activation="event",
+ name="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = response.parse()
+ assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_create(self, client: Mobilerun) -> None:
+ with client.workflows.triggers.with_streaming_response.create(
+ activation="event",
+ name="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = response.parse()
+ assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_retrieve(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_retrieve(self, client: Mobilerun) -> None:
+ response = client.workflows.triggers.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = response.parse()
+ assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_retrieve(self, client: Mobilerun) -> None:
+ with client.workflows.triggers.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = response.parse()
+ assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_retrieve(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
+ client.workflows.triggers.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_update(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_update_with_all_params(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ activation="event",
+ conditions={
+ "all": [{}],
+ "any": [{}],
+ },
+ custom_payload_schema={"foo": "bar"},
+ description="description",
+ event_type="eventType",
+ name="x",
+ schedule_rule={
+ "type": "once",
+ "date_time": "dateTime",
+ "expression": "expression",
+ "rrule": "rrule",
+ },
+ timezone="timezone",
+ )
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_update(self, client: Mobilerun) -> None:
+ response = client.workflows.triggers.with_raw_response.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = response.parse()
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_update(self, client: Mobilerun) -> None:
+ with client.workflows.triggers.with_streaming_response.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = response.parse()
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_update(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
+ client.workflows.triggers.with_raw_response.update(
+ trigger_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.list()
+ assert_matches_type(TriggerListResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_list_with_all_params(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.list(
+ activation="event",
+ event_type="eventType",
+ order_by="name",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ )
+ assert_matches_type(TriggerListResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_list(self, client: Mobilerun) -> None:
+ response = client.workflows.triggers.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = response.parse()
+ assert_matches_type(TriggerListResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_list(self, client: Mobilerun) -> None:
+ with client.workflows.triggers.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = response.parse()
+ assert_matches_type(TriggerListResponse, trigger, 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:
+ trigger = client.workflows.triggers.delete(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(TriggerDeleteResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_raw_response_delete(self, client: Mobilerun) -> None:
+ response = client.workflows.triggers.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"
+ trigger = response.parse()
+ assert_matches_type(TriggerDeleteResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_delete(self, client: Mobilerun) -> None:
+ with client.workflows.triggers.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"
+
+ trigger = response.parse()
+ assert_matches_type(TriggerDeleteResponse, trigger, 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 `trigger_id` but received ''"):
+ client.workflows.triggers.with_raw_response.delete(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_method_fire(self, client: Mobilerun) -> None:
+ trigger = client.workflows.triggers.fire(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ payload={"foo": "bar"},
+ )
+ 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:
+ response = client.workflows.triggers.with_raw_response.fire(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ payload={"foo": "bar"},
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = response.parse()
+ assert_matches_type(TriggerFireResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_streaming_response_fire(self, client: Mobilerun) -> None:
+ with client.workflows.triggers.with_streaming_response.fire(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ payload={"foo": "bar"},
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = response.parse()
+ assert_matches_type(TriggerFireResponse, trigger, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ def test_path_params_fire(self, client: Mobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
+ client.workflows.triggers.with_raw_response.fire(
+ trigger_id="",
+ payload={"foo": "bar"},
+ )
+
+
+class TestAsyncTriggers:
+ 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:
+ trigger = await async_client.workflows.triggers.create(
+ activation="event",
+ name="x",
+ )
+ assert_matches_type(TriggerCreateResponse, trigger, 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:
+ trigger = await async_client.workflows.triggers.create(
+ activation="event",
+ name="x",
+ conditions={
+ "all": [{}],
+ "any": [{}],
+ },
+ custom_payload_schema={"foo": "bar"},
+ description="description",
+ event_type="eventType",
+ schedule_rule={
+ "type": "once",
+ "date_time": "dateTime",
+ "expression": "expression",
+ "rrule": "rrule",
+ },
+ timezone="timezone",
+ )
+ assert_matches_type(TriggerCreateResponse, trigger, 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.triggers.with_raw_response.create(
+ activation="event",
+ name="x",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = await response.parse()
+ assert_matches_type(TriggerCreateResponse, trigger, 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.triggers.with_streaming_response.create(
+ activation="event",
+ name="x",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = await response.parse()
+ assert_matches_type(TriggerCreateResponse, trigger, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_retrieve(self, async_client: AsyncMobilerun) -> None:
+ trigger = await async_client.workflows.triggers.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.triggers.with_raw_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = await response.parse()
+ assert_matches_type(TriggerRetrieveResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_retrieve(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.triggers.with_streaming_response.retrieve(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = await response.parse()
+ assert_matches_type(TriggerRetrieveResponse, trigger, 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_retrieve(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
+ await async_client.workflows.triggers.with_raw_response.retrieve(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_update(self, async_client: AsyncMobilerun) -> None:
+ trigger = await async_client.workflows.triggers.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_update_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ trigger = await async_client.workflows.triggers.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ activation="event",
+ conditions={
+ "all": [{}],
+ "any": [{}],
+ },
+ custom_payload_schema={"foo": "bar"},
+ description="description",
+ event_type="eventType",
+ name="x",
+ schedule_rule={
+ "type": "once",
+ "date_time": "dateTime",
+ "expression": "expression",
+ "rrule": "rrule",
+ },
+ timezone="timezone",
+ )
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_raw_response_update(self, async_client: AsyncMobilerun) -> None:
+ response = await async_client.workflows.triggers.with_raw_response.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = await response.parse()
+ assert_matches_type(TriggerUpdateResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_update(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.triggers.with_streaming_response.update(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = await response.parse()
+ assert_matches_type(TriggerUpdateResponse, trigger, 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_update(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
+ await async_client.workflows.triggers.with_raw_response.update(
+ trigger_id="",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list(self, async_client: AsyncMobilerun) -> None:
+ trigger = await async_client.workflows.triggers.list()
+ assert_matches_type(TriggerListResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_list_with_all_params(self, async_client: AsyncMobilerun) -> None:
+ trigger = await async_client.workflows.triggers.list(
+ activation="event",
+ event_type="eventType",
+ order_by="name",
+ order_by_direction="asc",
+ page=1,
+ page_size=1,
+ search="search",
+ )
+ assert_matches_type(TriggerListResponse, trigger, 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.triggers.with_raw_response.list()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = await response.parse()
+ assert_matches_type(TriggerListResponse, trigger, 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.triggers.with_streaming_response.list() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = await response.parse()
+ assert_matches_type(TriggerListResponse, trigger, 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:
+ trigger = await async_client.workflows.triggers.delete(
+ "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ )
+ assert_matches_type(TriggerDeleteResponse, trigger, 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.triggers.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"
+ trigger = await response.parse()
+ assert_matches_type(TriggerDeleteResponse, trigger, 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.triggers.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"
+
+ trigger = await response.parse()
+ assert_matches_type(TriggerDeleteResponse, trigger, 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 `trigger_id` but received ''"):
+ await async_client.workflows.triggers.with_raw_response.delete(
+ "",
+ )
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_method_fire(self, async_client: AsyncMobilerun) -> None:
+ trigger = await async_client.workflows.triggers.fire(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ payload={"foo": "bar"},
+ )
+ 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:
+ response = await async_client.workflows.triggers.with_raw_response.fire(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ payload={"foo": "bar"},
+ )
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ trigger = await response.parse()
+ assert_matches_type(TriggerFireResponse, trigger, path=["response"])
+
+ @pytest.mark.skip(reason="Mock server tests are disabled")
+ @parametrize
+ async def test_streaming_response_fire(self, async_client: AsyncMobilerun) -> None:
+ async with async_client.workflows.triggers.with_streaming_response.fire(
+ trigger_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
+ payload={"foo": "bar"},
+ ) as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ trigger = await response.parse()
+ assert_matches_type(TriggerFireResponse, trigger, 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_fire(self, async_client: AsyncMobilerun) -> None:
+ with pytest.raises(ValueError, match=r"Expected a non-empty value for `trigger_id` but received ''"):
+ await async_client.workflows.triggers.with_raw_response.fire(
+ trigger_id="",
+ payload={"foo": "bar"},
+ )
From c9cb1ae549cc4ff9c8ff7cf8b0275ac1f39e675d Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 19 Jun 2026 17:14:46 +0000
Subject: [PATCH 3/3] release: 5.1.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 9 +++++++++
pyproject.toml | 2 +-
src/mobilerun_sdk/_version.py | 2 +-
4 files changed, 12 insertions(+), 3 deletions(-)
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/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/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