add timeout to browser session request (#2338)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any, List, Optional, Sequence
|
||||
from typing import Any, List, Sequence
|
||||
|
||||
import structlog
|
||||
from sqlalchemy import and_, delete, distinct, func, pool, select, tuple_, update
|
||||
@@ -2656,7 +2656,7 @@ class AgentDB:
|
||||
for workflow_run_block in workflow_run_blocks
|
||||
]
|
||||
|
||||
async def get_active_persistent_browser_sessions(self, organization_id: str) -> List[PersistentBrowserSession]:
|
||||
async def get_active_persistent_browser_sessions(self, organization_id: str) -> list[PersistentBrowserSession]:
|
||||
"""Get all active persistent browser sessions for an organization."""
|
||||
try:
|
||||
async with self.Session() as session:
|
||||
@@ -2676,7 +2676,7 @@ class AgentDB:
|
||||
|
||||
async def get_persistent_browser_session_by_id(
|
||||
self, session_id: str, organization_id: str | None = None
|
||||
) -> Optional[PersistentBrowserSession]:
|
||||
) -> PersistentBrowserSession | None:
|
||||
"""Get a specific persistent browser session."""
|
||||
try:
|
||||
async with self.Session() as session:
|
||||
@@ -2703,7 +2703,7 @@ class AgentDB:
|
||||
|
||||
async def get_persistent_browser_session(
|
||||
self, session_id: str, organization_id: str
|
||||
) -> Optional[PersistentBrowserSessionModel]:
|
||||
) -> PersistentBrowserSession | None:
|
||||
"""Get a specific persistent browser session."""
|
||||
try:
|
||||
async with self.Session() as session:
|
||||
@@ -2733,6 +2733,7 @@ class AgentDB:
|
||||
organization_id: str,
|
||||
runnable_type: str | None = None,
|
||||
runnable_id: str | None = None,
|
||||
timeout_minutes: int | None = None,
|
||||
) -> PersistentBrowserSessionModel:
|
||||
"""Create a new persistent browser session."""
|
||||
try:
|
||||
@@ -2741,6 +2742,7 @@ class AgentDB:
|
||||
organization_id=organization_id,
|
||||
runnable_type=runnable_type,
|
||||
runnable_id=runnable_id,
|
||||
timeout_minutes=timeout_minutes,
|
||||
)
|
||||
session.add(browser_session)
|
||||
await session.commit()
|
||||
|
||||
@@ -3,9 +3,10 @@ from fastapi.responses import ORJSONResponse
|
||||
|
||||
from skyvern import analytics
|
||||
from skyvern.forge import app
|
||||
from skyvern.forge.sdk.routes.routers import base_router, legacy_base_router
|
||||
from skyvern.forge.sdk.routes.routers import base_router
|
||||
from skyvern.forge.sdk.schemas.organizations import Organization
|
||||
from skyvern.forge.sdk.services import org_auth_service
|
||||
from skyvern.schemas.browser_sessions import CreateBrowserSessionRequest
|
||||
from skyvern.webeye.schemas import BrowserSessionResponse
|
||||
|
||||
|
||||
@@ -25,20 +26,6 @@ from skyvern.webeye.schemas import BrowserSessionResponse
|
||||
401: {"description": "Unauthorized - Invalid or missing authentication"},
|
||||
},
|
||||
)
|
||||
@legacy_base_router.get(
|
||||
"/browser_sessions/{browser_session_id}",
|
||||
response_model=BrowserSessionResponse,
|
||||
tags=["session"],
|
||||
openapi_extra={
|
||||
"x-fern-sdk-group-name": "session",
|
||||
"x-fern-sdk-method-name": "get_browser_session",
|
||||
},
|
||||
)
|
||||
@legacy_base_router.get(
|
||||
"/browser_sessions/{browser_session_id}/",
|
||||
response_model=BrowserSessionResponse,
|
||||
include_in_schema=False,
|
||||
)
|
||||
async def get_browser_session(
|
||||
browser_session_id: str,
|
||||
current_org: Organization = Depends(org_auth_service.get_current_org),
|
||||
@@ -68,20 +55,6 @@ async def get_browser_session(
|
||||
401: {"description": "Unauthorized - Invalid or missing authentication"},
|
||||
},
|
||||
)
|
||||
@legacy_base_router.get(
|
||||
"/browser_sessions",
|
||||
response_model=list[BrowserSessionResponse],
|
||||
tags=["session"],
|
||||
openapi_extra={
|
||||
"x-fern-sdk-group-name": "browser_sessions",
|
||||
"x-fern-sdk-method-name": "get_browser_sessions",
|
||||
},
|
||||
)
|
||||
@legacy_base_router.get(
|
||||
"/browser_sessions/",
|
||||
response_model=list[BrowserSessionResponse],
|
||||
include_in_schema=False,
|
||||
)
|
||||
async def get_browser_sessions(
|
||||
current_org: Organization = Depends(org_auth_service.get_current_org),
|
||||
) -> list[BrowserSessionResponse]:
|
||||
@@ -106,24 +79,14 @@ async def get_browser_sessions(
|
||||
401: {"description": "Unauthorized - Invalid or missing authentication"},
|
||||
},
|
||||
)
|
||||
@legacy_base_router.post(
|
||||
"/browser_sessions",
|
||||
response_model=BrowserSessionResponse,
|
||||
tags=["Browser Sessions"],
|
||||
openapi_extra={
|
||||
"x-fern-sdk-group-name": "session",
|
||||
"x-fern-sdk-method-name": "create_browser_session",
|
||||
},
|
||||
)
|
||||
@legacy_base_router.post(
|
||||
"/browser_sessions/",
|
||||
response_model=BrowserSessionResponse,
|
||||
include_in_schema=False,
|
||||
)
|
||||
async def create_browser_session(
|
||||
browser_session_request: CreateBrowserSessionRequest,
|
||||
current_org: Organization = Depends(org_auth_service.get_current_org),
|
||||
) -> BrowserSessionResponse:
|
||||
browser_session = await app.PERSISTENT_SESSIONS_MANAGER.create_session(current_org.organization_id)
|
||||
browser_session = await app.PERSISTENT_SESSIONS_MANAGER.create_session(
|
||||
organization_id=current_org.organization_id,
|
||||
timeout_minutes=browser_session_request.timeout,
|
||||
)
|
||||
return BrowserSessionResponse.from_browser_session(browser_session)
|
||||
|
||||
|
||||
@@ -141,18 +104,6 @@ async def create_browser_session(
|
||||
401: {"description": "Unauthorized - Invalid or missing authentication"},
|
||||
},
|
||||
)
|
||||
@legacy_base_router.post(
|
||||
"/browser_sessions/{browser_session_id}/close",
|
||||
tags=["Browser Sessions"],
|
||||
openapi_extra={
|
||||
"x-fern-sdk-group-name": "browser_session",
|
||||
"x-fern-sdk-method-name": "close_browser_session",
|
||||
},
|
||||
)
|
||||
@legacy_base_router.post(
|
||||
"/browser_sessions/{browser_session_id}/close/",
|
||||
include_in_schema=False,
|
||||
)
|
||||
async def close_browser_session(
|
||||
browser_session_id: str,
|
||||
current_org: Organization = Depends(org_auth_service.get_current_org),
|
||||
|
||||
@@ -12,6 +12,9 @@ class PersistentBrowserSession(BaseModel):
|
||||
runnable_id: str | None = None
|
||||
browser_address: str | None = None
|
||||
status: str | None = None
|
||||
timeout_minutes: int | None = None
|
||||
started_at: datetime | None = None
|
||||
completed_at: datetime | None = None
|
||||
created_at: datetime
|
||||
modified_at: datetime
|
||||
deleted_at: datetime | None = None
|
||||
|
||||
Reference in New Issue
Block a user