22
33import json
44import os
5+ from functools import cached_property
56
67from git .exc import NoSuchPathError
78
@@ -45,7 +46,7 @@ def __init__(self, filename: str, build_folder: str, conformance_tests_folder: s
4546 for module_name in required_modules_names
4647 ]
4748
48- @property
49+ @cached_property
4950 def all_required_modules (self ) -> list [PlainModule ]:
5051 all_required_modules = []
5152 for required_module in self .required_modules :
@@ -67,7 +68,7 @@ def module_build_folder(self):
6768 def get_codeplain_folder (self ):
6869 return os .path .join (self .module_build_folder , CODEPLAIN_METADATA_FOLDER )
6970
70- def get_last_rendered_frid (self ) -> tuple [str , str | None ]:
71+ def get_last_rendered_frid (self ) -> tuple [str | None , str | None ]:
7172 if len (self .required_modules ) == 0 :
7273 return git_utils .get_last_finished_frid (self .module_build_folder )
7374
@@ -174,7 +175,7 @@ def save_module_metadata(self, only_hashes: bool = False):
174175 json .dump (module_metadata , f , indent = 4 )
175176 return
176177
177- module_metadata [MODULE_FUNCTIONALITIES ] = ( self ._get_module_functional_requirements (), )
178+ module_metadata [MODULE_FUNCTIONALITIES ] = self ._get_module_functional_requirements ()
178179
179180 required_modules_functionalities = {}
180181 for required_module in self .required_modules :
@@ -186,7 +187,7 @@ def save_module_metadata(self, only_hashes: bool = False):
186187 with open (metadata_path , "w" , encoding = "utf-8" ) as f :
187188 json .dump (module_metadata , f , indent = 4 )
188189
189- def _ensure_module_folders_exist (self , first_render_frid : str , render_conformance_tests : bool ) -> tuple [ str , str ] :
190+ def _ensure_module_folders_exist (self , first_render_frid : str , render_conformance_tests : bool ):
190191 """
191192 Ensure that build and conformance test folders exist for the module.
192193
@@ -286,12 +287,16 @@ def get_module_by_name(self, module_name: str) -> PlainModule:
286287
287288 raise ModuleDoesNotExistError (f"Module { module_name } does not exist" )
288289
289- def get_next_module (self , module_name : str ) -> PlainModule | None :
290- for idx , module in enumerate (self .all_required_modules ):
291- if module .module_name == module_name and idx < len (self .all_required_modules ) - 1 :
292- return self .all_required_modules [idx + 1 ]
290+ def get_next_module (self , module_name : str ) -> PlainModule :
291+ all_modules = self .all_required_modules + [self ]
292+ for idx , module in enumerate (all_modules ):
293+ if module .module_name == module_name and idx < len (all_modules ) - 1 :
294+ return all_modules [idx + 1 ]
295+
296+ if module_name == self .module_name :
297+ return self
293298
294- return self
299+ raise ModuleDoesNotExistError ( f"Module { module_name } does not exist" )
295300
296301 def get_next_frid (self , frid : str , module_name : str ) -> tuple [str , PlainModule ]:
297302 module = self .get_module_by_name (module_name )
0 commit comments