Skip to content

Commit 9ade3fd

Browse files
committed
Adding key selection, handling headless mode and migrating to iterative
function
1 parent 7740543 commit 9ade3fd

4 files changed

Lines changed: 34 additions & 15 deletions

File tree

partial_rendering.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ def module_comes_before_or_equal(
6060
module1: PlainModule,
6161
module2: PlainModule,
6262
) -> bool:
63-
6463
for module in all_required_modules:
6564
if module.module_name == module1.module_name:
6665
return True
@@ -120,7 +119,7 @@ def get_all_affected_modules_from_change(
120119
plain_module: PlainModule,
121120
plain_module_render_state: PlainModuleRenderState,
122121
) -> list[PlainModule]:
123-
all_affected_modules = list[PlainModule]()
122+
all_affected_modules = dict[str, PlainModule]()
124123

125124
if plain_module_render_state.change_type == "spec_change":
126125
start_module = plain_module_render_state.change
@@ -138,10 +137,10 @@ def get_all_affected_modules_from_change(
138137
if module.module_name == start_module.module_name:
139138
affected_module = True
140139

141-
if affected_module:
142-
all_affected_modules.append(module)
140+
if affected_module and module.module_name not in all_affected_modules:
141+
all_affected_modules[module.module_name] = module
143142

144-
return all_affected_modules
143+
return list(all_affected_modules.values())
145144

146145

147146
def get_render_choices(

plain2code.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ def render(args, run_state: RunState, event_bus: EventBus): # noqa: C901
193193
render_choice = render_choices[list(render_choices.keys())[0]]
194194
ask_user = render_choice.is_destructive
195195

196-
if ask_user:
196+
if ask_user and not args.headless:
197197
app = PlainModuleRenderChoiceTUI(
198198
plain_module,
199199
plain_module_render_state,
@@ -209,6 +209,11 @@ def render(args, run_state: RunState, event_bus: EventBus): # noqa: C901
209209
and render_choice.choice_type == "quit"
210210
):
211211
sys.exit(0)
212+
elif ask_user and args.headless:
213+
# ignore the default choice if it requires user input due to headless mode
214+
# fallback to --render-from
215+
# default choice is only used only when the action is not destructive
216+
render_choice = None
212217

213218
if render_choice is not None and render_range is not None:
214219
raise Exception("Partial rendering and render range cannot be used together")

plain_modules.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,14 @@ def get_codeplain_folder(self):
7171
return os.path.join(self.module_build_folder, CODEPLAIN_METADATA_FOLDER)
7272

7373
def get_module_render_status(self) -> tuple[str | None, str | None]:
74-
if len(self.required_modules) == 0:
75-
return git_utils.get_last_rendered_functionality(self.module_build_folder)
76-
7774
module_name, frid = git_utils.get_last_rendered_functionality(self.module_build_folder)
7875
if module_name is not None and module_name == self.module_name:
7976
return module_name, frid
8077

81-
for module in reversed(self.required_modules):
82-
last_rendered_module_name, last_rendered_frid = module.get_module_render_status()
78+
for module in reversed(self.all_required_modules):
79+
last_rendered_module_name, last_rendered_frid = git_utils.get_last_rendered_functionality(
80+
module.module_build_folder
81+
)
8382
if last_rendered_module_name is not None:
8483
return last_rendered_module_name, last_rendered_frid
8584

tui/plain_module_render_choice_tui.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,14 @@ def __init__(
3636

3737
def get_msg_from_choice(self, render_choice: RenderChoice) -> str:
3838
if render_choice.choice_type == "module_start":
39-
return f"Start from module [#5593FF]{render_choice.module.module_name}[/]"
39+
msg = ""
40+
if render_choice.module.module_name == self.plain_module.module_name:
41+
if render_choice.module.is_module_fully_rendered():
42+
return f"Re-render the current module ([#5593FF]{render_choice.module.module_name}[/])"
43+
else:
44+
return f"Start the current module ([#5593FF]{render_choice.module.module_name}[/])"
45+
else:
46+
return f"Start from module [#5593FF]{render_choice.module.module_name}[/]"
4047
elif render_choice.choice_type == "rerender_affected" and self.plain_module_render_state.change is not None:
4148
all_affected_modules = get_all_affected_modules_from_change(
4249
self.plain_module, self.plain_module_render_state
@@ -109,8 +116,7 @@ def on_mount(self) -> None:
109116
)
110117

111118
elif pr.last_render_module.is_module_fully_rendered():
112-
change_box.mount(Label("--- Rendering finished ---", classes="rendering-info-row"))
113-
change_box.mount(Label("The current module was fully rendered.", classes="rendering-info-title"))
119+
change_box.mount(Label("The current module is fully rendered.", classes="rendering-info-title"))
114120
else:
115121
interrupted_frid = "1"
116122
interrupted_module = pr.last_render_module
@@ -147,7 +153,7 @@ def on_mount(self) -> None:
147153

148154
# Populate the ListView
149155
lv = self.query_one("#choice-list", ListView)
150-
self.mount(Label("How would you like to continue?", classes="partial-render-question"), before=lv)
156+
self.mount(Label("How would you like to proceed?", classes="partial-render-question"), before=lv)
151157
for key, choice in self.render_choices.items():
152158
lv.append(ListItem(Label(f"[bold]{key}.[/bold] {self.get_msg_from_choice(choice)}"), id=f"choice-{key}"))
153159
lv.focus()
@@ -170,6 +176,16 @@ def on_choice_selected(self, event: ListView.Selected) -> None:
170176
if not item_id or not item_id.startswith("choice-"):
171177
raise ValueError(f"Invalid item ID: {item_id}")
172178
key = item_id.split("-", 1)[1]
179+
self._select_choice(key)
180+
181+
def on_key(self, event) -> None:
182+
"""Allow selecting a choice by typing its number directly."""
183+
if event.key in self.render_choices:
184+
event.stop()
185+
event.prevent_default()
186+
self._select_choice(event.key)
187+
188+
def _select_choice(self, key: str) -> None:
173189
self.selected_choice = self.render_choices[key]
174190
self.exit(self.selected_choice)
175191

0 commit comments

Comments
 (0)