From 5c73064638a07dcad80371cf42d01ab7f12b88cb Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Tue, 15 Apr 2025 12:34:54 -0700 Subject: [PATCH] Let URL be empty string if there is a browser session id (#2158) --- skyvern/forge/sdk/schemas/tasks.py | 31 ++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/skyvern/forge/sdk/schemas/tasks.py b/skyvern/forge/sdk/schemas/tasks.py index f5d322c9..724f3e98 100644 --- a/skyvern/forge/sdk/schemas/tasks.py +++ b/skyvern/forge/sdk/schemas/tasks.py @@ -4,9 +4,16 @@ from datetime import datetime from enum import StrEnum from typing import Any -from pydantic import BaseModel, Field, field_validator +from fastapi import status +from pydantic import BaseModel, Field, field_validator, model_validator +from typing_extensions import Self -from skyvern.exceptions import InvalidTaskStatusTransition, TaskAlreadyCanceled, TaskAlreadyTimeout +from skyvern.exceptions import ( + InvalidTaskStatusTransition, + SkyvernHTTPException, + TaskAlreadyCanceled, + TaskAlreadyTimeout, +) from skyvern.forge.sdk.db.enums import TaskType from skyvern.forge.sdk.schemas.files import FileInfo from skyvern.schemas.runs import ProxyLocation @@ -99,9 +106,25 @@ class TaskRequest(TaskBase): totp_verification_url: str | None = None browser_session_id: str | None = None - @field_validator("url", "webhook_callback_url", "totp_verification_url") + @model_validator(mode="after") + def validate_url(self) -> Self: + url = self.url + browser_session_id = self.browser_session_id + + if len(url) == 0 and browser_session_id is not None: + return self + + url_validation_result = validate_url(url) + + if url_validation_result is None: + raise SkyvernHTTPException(message=f"Invalid URL: {url}", status_code=status.HTTP_400_BAD_REQUEST) + + self.url = url_validation_result + return self + + @field_validator("webhook_callback_url", "totp_verification_url") @classmethod - def validate_urls(cls, url: str | None) -> str | None: + def validate_optional_urls(cls, url: str | None) -> str | None: if url is None: return None