from temporalio import workflow with workflow.unsafe.imports_passed_through(): from scouter.activities.activities import Activities from typing import Any from datetime import timedelta from scouter.utils.policies import retry_policy @workflow.defn(name="scouter") class Scouter: @workflow.run async def run(self, input_data: dict[str, Any]): """ Scouter workflow. Loads data from kafka and sends it to the core_scouter workflow. Args: input_data (dict[str, Any]): The data to process. Contains: topic (str): The topic to load data from. workflow_name (str): The name of the workflow. schedule_name (str): The name of the schedule. model_name (str): The name of the model. model_id (str): The id of the model. trigger_laborious (bool): Whether to trigger laborious. filters (dict[str, str]): The filters to apply. schema (str): The schema of the table to export data to. table_name (str): The name of the table to export data to. retention_time (int): The retention time for data in redis in seconds. model_tags (dict[str, Any]): The tags of the model. And it's respective configuration. """ data = await workflow.execute_activity_method( Activities.load_from_kafka, { 'topic': input_data['topic'] }, retry_policy=retry_policy, start_to_close_timeout=timedelta(seconds=60) ) if data == {}: return input_data['data'] = data await workflow.execute_child_workflow( 'core_scouter', input_data )