Execute the main rendering workflow.
(self)
| 40 | self.action_result_triggers_map = self.state_machine_config.get_action_result_triggers_map() |
| 41 | |
| 42 | def run(self): |
| 43 | """Execute the main rendering workflow.""" |
| 44 | self.render_context.event_bus.publish(RenderModuleStarted(module_name=self.render_context.module_name)) |
| 45 | self.render_context.run_state.current_module = self.render_context.module_name |
| 46 | previous_action_payload = None |
| 47 | previous_state = None |
| 48 | |
| 49 | while True: |
| 50 | if self.render_context.enter_pause_event.is_set(): |
| 51 | self.render_context.event_bus.publish(RenderPaused()) |
| 52 | |
| 53 | # don't take sleep time into account for render time |
| 54 | self.render_context.run_state.add_to_render_time() |
| 55 | while self.render_context.enter_pause_event.is_set(): |
| 56 | time.sleep(PAUSE_POLL_INTERVAL_SECONDS) |
| 57 | self.render_context.run_state.set_last_render_start_timestamp() |
| 58 | |
| 59 | self.render_context.event_bus.publish( |
| 60 | RenderStateUpdated( |
| 61 | state=self.render_context.state, |
| 62 | previous_state=previous_state, |
| 63 | snapshot=self.render_context.create_snapshot(), |
| 64 | ) |
| 65 | ) |
| 66 | previous_state = deepcopy(self.render_context.state) |
| 67 | self.render_context.run_state.current_render_state = self.render_context.state |
| 68 | self.render_context.script_execution_history.should_update_script_outputs = False |
| 69 | |
| 70 | self.render_context.previous_action_payload = previous_action_payload |
| 71 | |
| 72 | outcome, previous_action_payload = self.action_map[self.render_context.state].execute( |
| 73 | self.render_context, previous_action_payload |
| 74 | ) |
| 75 | |
| 76 | if self.render_context.state == States.RENDER_FAILED.value: |
| 77 | self.render_context.last_error_message = previous_action_payload |
| 78 | self.render_context.event_bus.publish(RenderModuleFailed(module_name=self.render_context.module_name)) |
| 79 | break |
| 80 | |
| 81 | if self.render_context.state == States.RENDER_COMPLETED.value: |
| 82 | self.render_context.event_bus.publish( |
| 83 | RenderModuleCompleted(module_name=self.render_context.module_name) |
| 84 | ) |
| 85 | break |
| 86 | |
| 87 | next_trigger = self.action_result_triggers_map[outcome] |
| 88 | self.machine.dispatch(next_trigger) |
| 89 | |
| 90 | self.render_context.run_state.add_to_render_time() |
| 91 | |
| 92 | def generate_render_machine_graph(self): |
| 93 | """Generate a visual diagram of the state machine.""" |