@@ -42,114 +42,6 @@ def __init__(
4242 self .stop_event = stop_event
4343 self .enter_pause_event = enter_pause_event
4444
45- def _ensure_module_folders_exist (self , module_name : str , first_render_frid : str ) -> tuple [str , str ]:
46- """
47- Ensure that build and conformance test folders exist for the module.
48-
49- Args:
50- module_name: Name of the module being rendered
51- first_render_frid: The first FRID in the render range
52-
53- Returns:
54- tuple[str, str]: (build_folder_path, conformance_tests_path)
55-
56- Raises:
57- MissingPreviousFridCommitsError: If any required folders are missing
58- """
59- build_folder_path = os .path .join (self .args .build_folder , module_name )
60- conformance_tests_path = os .path .join (self .args .conformance_tests_folder , module_name )
61-
62- if not os .path .exists (build_folder_path ):
63- raise MissingPreviousFunctionalitiesError (
64- f"Cannot start rendering from functionality { first_render_frid } for module '{ module_name } ' because the source code folder does not exist.\n \n "
65- f"To fix this, please render the module from the beginning by running:\n "
66- f" codeplain { module_name } { plain_file .PLAIN_SOURCE_FILE_EXTENSION } "
67- )
68-
69- if not os .path .exists (conformance_tests_path ) and self .args .render_conformance_tests :
70- raise MissingPreviousFunctionalitiesError (
71- f"Cannot start rendering from functionality { first_render_frid } for module '{ module_name } ' because the conformance tests folder does not exist.\n \n "
72- f"To fix this, please render the module from the beginning by running:\n "
73- f" codeplain { module_name } { plain_file .PLAIN_SOURCE_FILE_EXTENSION } "
74- )
75-
76- return build_folder_path , conformance_tests_path
77-
78- def _ensure_frid_commit_exists (
79- self ,
80- frid : str ,
81- module_name : str ,
82- build_folder_path : str ,
83- conformance_tests_path : str ,
84- first_render_frid : str ,
85- ) -> None :
86- """
87- Ensure commit exists for a single FRID in both repositories.
88-
89- Args:
90- frid: The FRID to check
91- module_name: Name of the module
92- build_folder_path: Path to the build folder
93- conformance_tests_path: Path to the conformance tests folder
94- first_render_frid: The first FRID in the render range (for error messages)
95-
96- Raises:
97- MissingPreviousFridCommitsError: If the commit is missing
98- """
99- # Check in build folder
100- if not git_utils .has_commit_for_frid (build_folder_path , frid , module_name ):
101- raise MissingPreviousFunctionalitiesError (
102- f"Cannot start rendering from functionality { first_render_frid } for module '{ module_name } ' because the implementation of the previous functionality ({ frid } ) hasn't been completed yet.\n \n "
103- f"To fix this, please render the missing functionality ({ frid } ) first by running:\n "
104- f" codeplain { module_name } { plain_file .PLAIN_SOURCE_FILE_EXTENSION } --render-from { frid } "
105- )
106-
107- # Check in conformance tests folder (only if conformance tests are enabled)
108- if self .args .render_conformance_tests :
109- if not git_utils .has_commit_for_frid (conformance_tests_path , frid , module_name ):
110- raise MissingPreviousFunctionalitiesError (
111- f"Cannot start rendering from functionality { first_render_frid } for module '{ module_name } ' because the conformance tests for the previous functionality ({ frid } ) haven't been completed yet.\n \n "
112- f"To fix this, please render the missing functionality ({ frid } ) first by running:\n "
113- f" codeplain { module_name } { plain_file .PLAIN_SOURCE_FILE_EXTENSION } --render-from { frid } "
114- )
115-
116- def _ensure_previous_frid_commits_exist (
117- self , module_name : str , plain_source : dict , render_range : list [str ]
118- ) -> None :
119- """
120- Ensure that all FRID commits before the render_range exist.
121-
122- This is a precondition check that must pass before rendering can proceed.
123- Raises an exception if any previous FRID commits are missing.
124-
125- Args:
126- module_name: Name of the module being rendered
127- plain_source: The plain source tree
128- render_range: List of FRIDs to render
129-
130- Raises:
131- MissingPreviousFridCommitsError: If any previous FRID commits are missing
132- """
133- first_render_frid = render_range [0 ]
134-
135- # Get all FRIDs that should have been rendered before this one
136- previous_frids = plain_spec .get_frids_before (plain_source , first_render_frid )
137- if not previous_frids :
138- return
139-
140- # Ensure the module folders exist
141- build_folder_path , conformance_tests_path = self ._ensure_module_folders_exist (module_name , first_render_frid )
142-
143- # Verify commits exist for all previous FRIDs
144- for prev_frid in previous_frids :
145- self ._ensure_frid_commit_exists (
146- prev_frid ,
147- module_name ,
148- build_folder_path ,
149- conformance_tests_path ,
150- first_render_frid ,
151- )
152-
15345 def _build_render_context_for_module (
15446 self ,
15547 module_name : str ,
@@ -187,67 +79,59 @@ def _build_render_context_for_module(
18779 )
18880
18981 def _render_module (
190- self , filename : str , render_range : list [str ] | None , force_render : bool
82+ self , plain_module : PlainModule , render_range : list [str ] | None , force_render : bool
19183 ) -> tuple [bool , list [PlainModule ], bool ]:
19284 """Render a module.
19385
19486 Returns:
195- tuple[bool, list[PlainModule], bool]: (Whether the module was rendered, the required modules, and whether the rendering failed)
87+ tuple[bool, bool]: (Whether the module was rendered and whether the rendering failed)
19688 """
197- module_name , plain_source , required_modules_list = plain_file .plain_file_parser (filename , self .template_dirs )
198-
199- resources_list = []
200- plain_spec .collect_linked_resources (plain_source , resources_list , None , True )
201-
202- # Ensure that all previous FRID commits exist before proceeding with render_range
20389 if render_range is not None :
204- self . _ensure_previous_frid_commits_exist ( module_name , plain_source , render_range )
90+ plain_module . ensure_previous_frid_commits_exist ( render_range )
20591
206- required_modules = []
20792 has_any_required_module_changed = False
208- if not self .args .render_machine_graph and required_modules_list :
209- console .debug (f"Analyzing required modules of module { module_name } ..." )
210- for required_module_name in required_modules_list :
211- required_module_filename = required_module_name + plain_file .PLAIN_SOURCE_FILE_EXTENSION
212- has_module_changed , sub_required_modules , rendering_failed = self ._render_module (
213- required_module_filename ,
93+ if not self .args .render_machine_graph and plain_module .required_modules :
94+ console .debug (f"Analyzing required modules of module { plain_module .module_name } ..." )
95+ for required_module in plain_module .required_modules :
96+ has_any_required_module_changed , rendering_failed = self ._render_module (
97+ required_module ,
21498 None ,
21599 self .args .force_render ,
216100 )
217101
218102 if rendering_failed :
219- return False , required_modules , True
220-
221- if has_module_changed :
222- has_any_required_module_changed = True
223-
224- for sub_required_module in sub_required_modules :
225- if sub_required_module .name not in [m .name for m in required_modules ]:
226- required_modules .append (
227- plain_modules .PlainModule (sub_required_module .name , self .args .build_folder )
228- )
229-
230- required_modules .append (plain_modules .PlainModule (required_module_name , self .args .build_folder ))
231-
232- plain_module = plain_modules .PlainModule (module_name , self .args .build_folder )
233- if (
234- ((not force_render ) or any (module .name == plain_module .name for module in self .loaded_modules ))
235- and plain_module .get_repo () is not None
236- and not plain_module .has_plain_spec_changed (plain_source , resources_list )
237- and not plain_module .has_required_modules_code_changed (required_modules )
238- and not has_any_required_module_changed
103+ return False , True
104+
105+ if not (
106+ force_render
107+ or any (module .filename == plain_module .filename for module in self .loaded_modules )
108+ or plain_module .get_repo () is None
109+ or plain_module .has_plain_spec_changed ()
110+ or plain_module .has_required_modules_code_changed ()
111+ or has_any_required_module_changed
239112 ):
240- return False , required_modules , False
113+ return False , False
241114
242- memory_manager = MemoryManager (self .codeplainAPI , os .path .join (self .args .build_folder , module_name ))
115+ memory_manager = MemoryManager (
116+ self .codeplainAPI ,
117+ os .path .join (
118+ self .args .build_folder ,
119+ plain_module .module_name ,
120+ ),
121+ )
243122 render_context = self ._build_render_context_for_module (
244- module_name , memory_manager , plain_source , required_modules , self .template_dirs , render_range
123+ plain_module .module_name ,
124+ memory_manager ,
125+ plain_module .plain_source ,
126+ plain_module .all_required_modules ,
127+ self .template_dirs ,
128+ render_range ,
245129 )
246130
247131 code_renderer = CodeRenderer (render_context )
248132 if self .args .render_machine_graph :
249133 code_renderer .generate_render_machine_graph ()
250- return True , required_modules , False
134+ return True , False
251135
252136 code_renderer .run ()
253137 if code_renderer .render_context .state == States .RENDER_FAILED .value :
@@ -256,17 +140,23 @@ def _render_module(
256140 fallback_message = code_renderer .render_context .last_error_message ,
257141 )
258142 code_renderer .render_context .event_bus .publish (RenderFailed (error_message = error_message ))
259- return False , required_modules , True
143+ return False , True
260144
261- plain_module .save_module_metadata (plain_source , resources_list , required_modules )
145+ plain_module .save_module_metadata ()
262146
263147 self .loaded_modules .append (plain_module )
264148
265- return True , required_modules , False
149+ return True , False
266150
267151 def render_module (self ) -> None :
268152 self .loaded_modules = list [PlainModule ]()
269- _ , _ , rendering_failed = self ._render_module (self .filename , self .render_range , True )
153+ plain_module = plain_modules .PlainModule (
154+ self .filename ,
155+ self .args .build_folder ,
156+ self .args .conformance_tests_folder ,
157+ self .template_dirs ,
158+ )
159+ _ , rendering_failed = self ._render_module (plain_module , self .render_range , True )
270160 if not rendering_failed :
271161 # Get the last module that completed rendering
272162 if self .args .copy_build :
0 commit comments