mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2025-09-02 02:30:07 +00:00
101 lines
2.7 KiB
Python
101 lines
2.7 KiB
Python
from datetime import datetime
|
|
from enum import StrEnum
|
|
from typing import Any, List
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from skyvern.forge.sdk.schemas.tasks import ProxyLocation
|
|
from skyvern.forge.sdk.workflow.exceptions import WorkflowDefinitionHasDuplicateBlockLabels
|
|
from skyvern.forge.sdk.workflow.models.block import BlockTypeVar
|
|
from skyvern.forge.sdk.workflow.models.parameter import PARAMETER_TYPE
|
|
|
|
|
|
class WorkflowRequestBody(BaseModel):
|
|
data: dict[str, Any] | None = None
|
|
proxy_location: ProxyLocation | None = None
|
|
webhook_callback_url: str | None = None
|
|
|
|
|
|
class RunWorkflowResponse(BaseModel):
|
|
workflow_id: str
|
|
workflow_run_id: str
|
|
|
|
|
|
class WorkflowDefinition(BaseModel):
|
|
parameters: list[PARAMETER_TYPE]
|
|
blocks: List[BlockTypeVar]
|
|
|
|
def validate(self) -> None:
|
|
labels: set[str] = set()
|
|
duplicate_labels: set[str] = set()
|
|
for block in self.blocks:
|
|
if block.label in labels:
|
|
duplicate_labels.add(block.label)
|
|
else:
|
|
labels.add(block.label)
|
|
|
|
if duplicate_labels:
|
|
raise WorkflowDefinitionHasDuplicateBlockLabels(duplicate_labels)
|
|
|
|
|
|
class Workflow(BaseModel):
|
|
workflow_id: str
|
|
organization_id: str
|
|
title: str
|
|
workflow_permanent_id: str
|
|
version: int
|
|
description: str | None = None
|
|
workflow_definition: WorkflowDefinition
|
|
proxy_location: ProxyLocation | None = None
|
|
webhook_callback_url: str | None = None
|
|
|
|
created_at: datetime
|
|
modified_at: datetime
|
|
deleted_at: datetime | None = None
|
|
|
|
|
|
class WorkflowRunStatus(StrEnum):
|
|
created = "created"
|
|
running = "running"
|
|
failed = "failed"
|
|
terminated = "terminated"
|
|
completed = "completed"
|
|
|
|
|
|
class WorkflowRun(BaseModel):
|
|
workflow_run_id: str
|
|
workflow_id: str
|
|
status: WorkflowRunStatus
|
|
proxy_location: ProxyLocation | None = None
|
|
webhook_callback_url: str | None = None
|
|
|
|
created_at: datetime
|
|
modified_at: datetime
|
|
|
|
|
|
class WorkflowRunParameter(BaseModel):
|
|
workflow_run_id: str
|
|
workflow_parameter_id: str
|
|
value: bool | int | float | str | dict | list
|
|
created_at: datetime
|
|
|
|
|
|
class WorkflowRunOutputParameter(BaseModel):
|
|
workflow_run_id: str
|
|
output_parameter_id: str
|
|
value: dict[str, Any] | list | str | None
|
|
created_at: datetime
|
|
|
|
|
|
class WorkflowRunStatusResponse(BaseModel):
|
|
workflow_id: str
|
|
workflow_run_id: str
|
|
status: WorkflowRunStatus
|
|
proxy_location: ProxyLocation | None = None
|
|
webhook_callback_url: str | None = None
|
|
created_at: datetime
|
|
modified_at: datetime
|
|
parameters: dict[str, Any]
|
|
screenshot_urls: list[str] | None = None
|
|
recording_url: str | None = None
|
|
outputs: dict[str, Any] | None = None
|