run script with browser session (#3368)
This commit is contained in:
@@ -9,13 +9,16 @@ from skyvern.forge.sdk.workflow.models.parameter import WorkflowParameterType
|
||||
|
||||
|
||||
async def setup(
|
||||
parameters: dict[str, Any], generated_parameter_cls: type[BaseModel] | None = None
|
||||
parameters: dict[str, Any],
|
||||
generated_parameter_cls: type[BaseModel] | None = None,
|
||||
browser_session_id: str | None = None,
|
||||
) -> tuple[SkyvernPage, RunContext]:
|
||||
# transform any secrets/credential parameters. For example, if there's only one credential in the parameters: {"cred_12345": "cred_12345"},
|
||||
# it should be transformed to {"cred_12345": {"username": "secret_5fBoa_username", "password": "secret_5fBoa_password"}}
|
||||
# context comes from app.WORKFLOW_CONTEXT_MANAGER.get_workflow_run_context(workflow_run_id)
|
||||
context = skyvern_context.current()
|
||||
if context and context.organization_id and context.workflow_run_id:
|
||||
browser_session_id = browser_session_id or context.browser_session_id
|
||||
workflow_run_context = app.WORKFLOW_CONTEXT_MANAGER.get_workflow_run_context(context.workflow_run_id)
|
||||
parameters_in_workflow_context = workflow_run_context.parameters
|
||||
for key in parameters:
|
||||
@@ -23,7 +26,7 @@ async def setup(
|
||||
parameter = parameters_in_workflow_context[key]
|
||||
if parameter.workflow_parameter_type == WorkflowParameterType.CREDENTIAL_ID:
|
||||
parameters[key] = workflow_run_context.values[key]
|
||||
skyvern_page = await SkyvernPage.create()
|
||||
skyvern_page = await SkyvernPage.create(browser_session_id=browser_session_id)
|
||||
run_context = RunContext(
|
||||
parameters=parameters,
|
||||
page=skyvern_page,
|
||||
|
||||
@@ -71,7 +71,7 @@ class SkyvernPage:
|
||||
self._record = recorder or (lambda ac: None)
|
||||
|
||||
@classmethod
|
||||
async def _get_or_create_browser_state(cls) -> BrowserState:
|
||||
async def _get_or_create_browser_state(cls, browser_session_id: str | None = None) -> BrowserState:
|
||||
context = skyvern_context.current()
|
||||
if context and context.workflow_run_id and context.organization_id:
|
||||
workflow_run = await app.DATABASE.get_workflow_run(
|
||||
@@ -79,12 +79,13 @@ class SkyvernPage:
|
||||
)
|
||||
if workflow_run:
|
||||
browser_state = await app.BROWSER_MANAGER.get_or_create_for_workflow_run(
|
||||
workflow_run=workflow_run, browser_session_id=None
|
||||
workflow_run=workflow_run,
|
||||
browser_session_id=browser_session_id,
|
||||
)
|
||||
else:
|
||||
raise WorkflowRunNotFound(workflow_run_id=context.workflow_run_id)
|
||||
else:
|
||||
browser_state = await app.BROWSER_MANAGER.get_or_create_for_script()
|
||||
browser_state = await app.BROWSER_MANAGER.get_or_create_for_script(browser_session_id=browser_session_id)
|
||||
return browser_state
|
||||
|
||||
@classmethod
|
||||
@@ -103,10 +104,13 @@ class SkyvernPage:
|
||||
return browser_state
|
||||
|
||||
@classmethod
|
||||
async def create(cls) -> SkyvernPage:
|
||||
async def create(
|
||||
cls,
|
||||
browser_session_id: str | None = None,
|
||||
) -> SkyvernPage:
|
||||
# initialize browser state
|
||||
# TODO: add workflow_run_id or eventually script_id/script_run_id
|
||||
browser_state = await cls._get_or_create_browser_state()
|
||||
browser_state = await cls._get_or_create_browser_state(browser_session_id=browser_session_id)
|
||||
scraped_page = await scrape_website(
|
||||
browser_state=browser_state,
|
||||
url="",
|
||||
|
||||
Reference in New Issue
Block a user