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