1212import octobot_evaluators .evaluators as evaluators
1313
1414import octobot_flow .entities
15+ import octobot_flow .environment
1516import octobot_flow .errors
1617import octobot_flow .enums
1718import octobot_flow .logic .dsl .action_error_util
2425import tentacles .Meta .DSL_operators .octobot_process_operators .octobot_process_ops as octobot_process_ops
2526
2627
27-
2828class DSLExecutor (AbstractActionExecutor ):
2929 def __init__ (
3030 self ,
3131 profile_data : octobot_commons .profiles .ProfileData ,
3232 exchange_manager : typing .Optional [octobot_trading .exchanges .ExchangeManager ],
3333 dsl_script : typing .Optional [str ],
3434 dependencies : typing .Optional [octobot_commons .signals .SignalDependencies ] = None ,
35+ executor_id : typing .Optional [str ] = None ,
3536 ):
3637 super ().__init__ ()
3738 self ._exchange_manager = exchange_manager
3839 self ._dependencies = dependencies
3940 self ._dependencies_config : dict = profile_data .to_profile ("" ).config
4041 self ._interpreter_signals : octobot_commons .dsl_interpreter .OperatorSignals = None # type: ignore (reset when interpreter is created)
41- self ._interpreter : octobot_commons .dsl_interpreter .Interpreter = self ._create_interpreter (None )
42+ self ._interpreter : octobot_commons .dsl_interpreter .Interpreter = self ._create_interpreter (
43+ None , executor_id
44+ )
4245 if dsl_script :
4346 self ._interpreter .prepare (dsl_script )
4447
@@ -49,7 +52,15 @@ def _get_matrix_id(self) -> typing.Optional[str]:
4952
5053 def get_flow_operator_classes (
5154 self ,
55+ executor_id : typing .Optional [str ] = None ,
5256 ) -> list [typing .Type [octobot_commons .dsl_interpreter .Operator ]]:
57+ resolved_executor_id = (
58+ executor_id or octobot_flow .environment .get_executor_id ()
59+ )
60+ if not resolved_executor_id :
61+ raise octobot_flow .errors .MissingDSLExecutorDependencyError (
62+ "executor_id is required for run_octobot_process"
63+ )
5364 return (
5465 octobot_commons .dsl_interpreter .get_all_operators ()
5566 + dsl_operators .create_ohlcv_operators (self ._exchange_manager , None , None )
@@ -74,16 +85,19 @@ def get_flow_operator_classes(
7485 copier_trading_mode = None ,
7586 )
7687 + octobot_process_ops .create_octobot_process_operators (
77- self ._interpreter_signals
88+ self ._interpreter_signals ,
89+ resolved_executor_id ,
7890 )
7991 ) # type: ignore (list[type[Operator]])
8092
8193 def _create_interpreter (
82- self , previous_execution_result : typing .Optional [dict ]
94+ self ,
95+ previous_execution_result : typing .Optional [dict ],
96+ executor_id : typing .Optional [str ] = None ,
8397 ) -> octobot_commons .dsl_interpreter .Interpreter :
8498 self ._interpreter_signals = octobot_commons .dsl_interpreter .OperatorSignals ()
8599 return octobot_commons .dsl_interpreter .Interpreter (
86- self .get_flow_operator_classes ()
100+ self .get_flow_operator_classes (executor_id )
87101 )
88102
89103 def get_dependencies (self ) -> list [
@@ -110,7 +124,8 @@ async def execute_action(
110124 ] = None ,
111125 ) -> octobot_commons .dsl_interpreter .DSLCallResult :
112126 self ._interpreter = self ._create_interpreter (
113- action .previous_execution_result
127+ action .previous_execution_result ,
128+ None ,
114129 )
115130 expression = action .get_resolved_dsl_script ()
116131 try :
0 commit comments