feat(core): Support print RPC call in native Python runner (no-changelog) (#18630)

This commit is contained in:
Iván Ovejero
2025-08-26 11:40:55 +02:00
committed by GitHub
parent 85e3bfd3e4
commit 1da5acee30
9 changed files with 172 additions and 17 deletions

View File

@@ -7,7 +7,6 @@ from urllib.parse import urlparse
import websockets
import random
from .errors import WebsocketConnectionError, TaskMissingError
from .message_types.broker import TaskSettings
from .nanoid import nanoid
@@ -22,6 +21,7 @@ from .constants import (
OFFER_VALIDITY_MAX_JITTER,
OFFER_VALIDITY_LATENCY_BUFFER,
TASK_BROKER_WS_PATH,
RPC_BROWSER_CONSOLE_LOG_METHOD,
)
from .message_types import (
BrokerMessage,
@@ -31,12 +31,14 @@ from .message_types import (
BrokerTaskOfferAccept,
BrokerTaskSettings,
BrokerTaskCancel,
BrokerRpcResponse,
RunnerInfo,
RunnerTaskOffer,
RunnerTaskAccepted,
RunnerTaskRejected,
RunnerTaskDone,
RunnerTaskError,
RunnerRpcCall,
)
from .message_serde import MessageSerde
from .task_state import TaskState, TaskStatus
@@ -140,6 +142,8 @@ class TaskRunner:
await self._handle_task_settings(message)
case BrokerTaskCancel():
await self._handle_task_cancel(message)
case BrokerRpcResponse():
pass # currently only logging, already handled by browser
case _:
self.logger.warning(f"Unhandled message type: {type(message)}")
@@ -208,10 +212,15 @@ class TaskRunner:
task_state.process = process
result = self.executor.execute_process(
result, print_args = self.executor.execute_process(
process, queue, self.opts.task_timeout, task_settings.continue_on_fail
)
for print_args_per_call in print_args:
await self._send_rpc_message(
task_id, RPC_BROWSER_CONSOLE_LOG_METHOD, print_args_per_call
)
response = RunnerTaskDone(task_id=task_id, data={"result": result})
await self._send_message(response)
self.logger.info(f"Completed task {task_id}")
@@ -241,6 +250,13 @@ class TaskRunner:
task_state.status = TaskStatus.ABORTING
self.executor.stop_process(task_state.process)
async def _send_rpc_message(self, task_id: str, method_name: str, params: list):
message = RunnerRpcCall(
call_id=nanoid(), task_id=task_id, name=method_name, params=params
)
await self._send_message(message)
async def _send_message(self, message: RunnerMessage) -> None:
if self.websocket_connection is None:
raise WebsocketConnectionError(self.task_broker_uri)