Browser Stream Refactor Fast Follow (#4070)
This commit is contained in:
@@ -16,6 +16,7 @@ import typing as t
|
|||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
import structlog
|
import structlog
|
||||||
|
from playwright.async_api import Browser, BrowserContext, Page, Playwright
|
||||||
|
|
||||||
from skyvern.forge.sdk.routes.streaming.channels.cdp import CdpChannel
|
from skyvern.forge.sdk.routes.streaming.channels.cdp import CdpChannel
|
||||||
|
|
||||||
@@ -26,6 +27,11 @@ LOG = structlog.get_logger()
|
|||||||
|
|
||||||
|
|
||||||
class ExecutionChannel(CdpChannel):
|
class ExecutionChannel(CdpChannel):
|
||||||
|
# Explicitly declare inherited attributes for mypy when follow_imports = skip
|
||||||
|
browser: Browser | None
|
||||||
|
browser_context: BrowserContext | None
|
||||||
|
page: Page | None
|
||||||
|
pw: Playwright | None
|
||||||
"""
|
"""
|
||||||
ExecutionChannel.
|
ExecutionChannel.
|
||||||
"""
|
"""
|
||||||
@@ -44,7 +50,7 @@ class ExecutionChannel(CdpChannel):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
selected_text = await self.evaluate_js(js_expression, self.page)
|
selected_text = await self.evaluate_js(js_expression)
|
||||||
|
|
||||||
if isinstance(selected_text, str) or selected_text is None:
|
if isinstance(selected_text, str) or selected_text is None:
|
||||||
LOG.info(
|
LOG.info(
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ class MessageChannel:
|
|||||||
return base | {"browser_session_id": self.browser_session.persistent_browser_session_id}
|
return base | {"browser_session_id": self.browser_session.persistent_browser_session_id}
|
||||||
|
|
||||||
if self.workflow_run:
|
if self.workflow_run:
|
||||||
return base | {"workflow_run_id": self.workflow_run.id}
|
return base | {"workflow_run_id": self.workflow_run.workflow_run_id}
|
||||||
|
|
||||||
return base
|
return base
|
||||||
|
|
||||||
@@ -174,8 +174,8 @@ class MessageChannel:
|
|||||||
datums.append(data)
|
datums.append(data)
|
||||||
except asyncio.TimeoutError:
|
except asyncio.TimeoutError:
|
||||||
break
|
break
|
||||||
except RuntimeError:
|
except RuntimeError as ex:
|
||||||
if "not connected" in str(RuntimeError).lower():
|
if "not connected" in str(ex).lower():
|
||||||
break
|
break
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception(f"{self.class_name} Failed to receive message from message channel", **self.identity)
|
LOG.exception(f"{self.class_name} Failed to receive message from message channel", **self.identity)
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ async def messages(
|
|||||||
browser_session_id=browser_session_id,
|
browser_session_id=browser_session_id,
|
||||||
workflow_run_id=workflow_run_id,
|
workflow_run_id=workflow_run_id,
|
||||||
)
|
)
|
||||||
|
await websocket.close(code=1002)
|
||||||
return
|
return
|
||||||
|
|
||||||
message_channel: MessageChannel
|
message_channel: MessageChannel
|
||||||
|
|||||||
Reference in New Issue
Block a user