( # noqa: C901
plain_module: plain_modules.PlainModule,
args,
run_state: RunState,
event_bus: EventBus,
default_log_level: str = "INFO",
)
| 188 | |
| 189 | |
| 190 | def render( # noqa: C901 |
| 191 | plain_module: plain_modules.PlainModule, |
| 192 | args, |
| 193 | run_state: RunState, |
| 194 | event_bus: EventBus, |
| 195 | default_log_level: str = "INFO", |
| 196 | ): |
| 197 | # Compute render range from either --render-range or --render-from |
| 198 | render_range = None |
| 199 | if args.render_range or args.render_from: |
| 200 | render_range = plain_spec.compute_render_range(args, plain_module.plain_source) |
| 201 | |
| 202 | codeplainAPI = codeplain_api.CodeplainAPI(args.api_key, console) |
| 203 | assert args.api is not None and args.api != "", "API URL is required" |
| 204 | codeplainAPI.api_url = args.api |
| 205 | |
| 206 | run_state.user_email = _check_connection(codeplainAPI) |
| 207 | |
| 208 | stop_event = threading.Event() |
| 209 | enter_pause_event = threading.Event() |
| 210 | signal.signal(signal.SIGTERM, lambda _signum, _frame: stop_event.set()) |
| 211 | |
| 212 | warn_if_acceptance_tests_without_conformance_script(plain_module, args) |
| 213 | |
| 214 | render_choice = None |
| 215 | if render_range is None: |
| 216 | plain_module_render_state = get_plain_module_render_state(plain_module) |
| 217 | if plain_module_render_state is not None: |
| 218 | render_choices = get_render_choices(plain_module, plain_module_render_state, args.force_render) |
| 219 | ask_user = True |
| 220 | render_choice = None |
| 221 | if len(render_choices) <= 2: |
| 222 | # Last choice is Quit, first choice is the only other actionable choice |
| 223 | render_choice = render_choices[list(render_choices.keys())[0]] |
| 224 | ask_user = render_choice.is_destructive |
| 225 | |
| 226 | if ask_user and not args.headless: |
| 227 | app = PlainModuleRenderChoiceTUI( |
| 228 | plain_module, |
| 229 | plain_module_render_state, |
| 230 | render_choices, |
| 231 | system_config.client_version, |
| 232 | run_state.render_id, |
| 233 | on_cancel=run_state.set_render_cancelled, |
| 234 | css_path="styles.css", |
| 235 | ) |
| 236 | render_choice = app.run() |
| 237 | if render_choice is None or ( |
| 238 | render_choice.module is None |
| 239 | and render_choice.render_range is None |
| 240 | and render_choice.choice_type == "quit" |
| 241 | ): |
| 242 | run_state.set_render_cancelled() |
| 243 | sys.exit(0) |
| 244 | elif ask_user and args.headless: |
| 245 | # ignore the default choice if it requires user input due to headless mode |
| 246 | # fallback to --render-from |
| 247 | # default choice is only used only when the action is not destructive |
no test coverage detected