From 17fb371a79c61d5bc8f6c54b5dd3437691815486 Mon Sep 17 00:00:00 2001 From: AllyW Date: Mon, 20 Jan 2025 16:59:37 +0800 Subject: [PATCH 1/4] fix autogen cmd --- src/aaz_dev/command/api/_cmds.py | 2 +- .../command/controller/workspace_manager.py | 2 + .../swagger/model/specs/_resource_provider.py | 39 ++++++++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/aaz_dev/command/api/_cmds.py b/src/aaz_dev/command/api/_cmds.py index 6c4c9804..a21021bc 100644 --- a/src/aaz_dev/command/api/_cmds.py +++ b/src/aaz_dev/command/api/_cmds.py @@ -112,7 +112,7 @@ def generate_command_models_from_swagger(swagger_tag, workspace_path=None): "id": resource_id }) - mod_names = Config.DEFAULT_SWAGGER_MODULE.split('/') + mod_names = Config.DEFAULT_SWAGGER_MODULE ws = WorkspaceManager.new( name=Config.DEFAULT_SWAGGER_MODULE, plane=Config.DEFAULT_PLANE, diff --git a/src/aaz_dev/command/controller/workspace_manager.py b/src/aaz_dev/command/controller/workspace_manager.py index 6a16b457..f77f6815 100644 --- a/src/aaz_dev/command/controller/workspace_manager.py +++ b/src/aaz_dev/command/controller/workspace_manager.py @@ -1258,6 +1258,8 @@ def create_cfg_editor(self, auth, templates=None, cloud_medadata=None, arm_resou def load_client_cfg_editor(self, reload=False): if not reload and self._client_cfg_editor: return self._client_cfg_editor + if self.is_in_memory: + return None assert not self.is_in_memory try: self._client_cfg_editor = WorkspaceClientCfgEditor.load_client_cfg(self.folder) diff --git a/src/aaz_dev/swagger/model/specs/_resource_provider.py b/src/aaz_dev/swagger/model/specs/_resource_provider.py index ce925954..ee8abfde 100644 --- a/src/aaz_dev/swagger/model/specs/_resource_provider.py +++ b/src/aaz_dev/swagger/model/specs/_resource_provider.py @@ -86,7 +86,7 @@ def tags(self): self._tags = self._parse_readme_input_file_tags() return self._tags - def _parse_readme_input_file_tags(self): + def _parse_readme_input_file_tags_v0(self): tags = {} if not self._readme_paths: return tags @@ -133,6 +133,43 @@ def _parse_readme_input_file_tags(self): tags = OrderedDict(tags) return tags + def _parse_readme_input_file_tags(self): + tags = {} + if not self._readme_paths: + return tags + + for readme_path in self._readme_paths: + with open(readme_path, 'r', encoding='utf-8') as f: + readme = f.read() + + pattern = re.compile(r'yaml\s*\$\(\s*tag\s*\)\s*==\s*\'([^\']+)\'\s*input-file:\s*((?:\s*- [^\n]+\s*)+)\s*', + flags=re.DOTALL) + for piece in pattern.finditer(readme): + tag = piece[1].strip() + input_files = piece[2].splitlines() + files = [] + for i_file in input_files: + file_path = i_file.strip().lstrip('-').strip() + file_path = file_path.replace('$(this-folder)/', '') + file_path = os.path.join(os.path.dirname(readme_path), *file_path.split('/')) + if not os.path.isfile(file_path): + logger.warning(f'FileNotExist: {self} : {file_path}') + continue + files.append(file_path) + + if len(files): + if tag is None: + tag = '' + tag = OpenAPIResourceProviderTag(tag.strip(), self) + if tag not in tags: + tags[tag] = set() + tags[tag] = tags[tag].union(files) + + tags = [*tags.items()] + tags.sort(key=lambda item: item[0].date, reverse=True) + tags = OrderedDict(tags) + return tags + def _fetch_latest_tag(self, file_path): for tag, file_set in self.tags.items(): if file_path in file_set: From f7612ecc94a6cfef894b06fc1828adf46cde9fc0 Mon Sep 17 00:00:00 2001 From: AllyW Date: Mon, 20 Jan 2025 17:20:18 +0800 Subject: [PATCH 2/4] fix reg --- src/aaz_dev/swagger/model/specs/_resource_provider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aaz_dev/swagger/model/specs/_resource_provider.py b/src/aaz_dev/swagger/model/specs/_resource_provider.py index ee8abfde..144b6a30 100644 --- a/src/aaz_dev/swagger/model/specs/_resource_provider.py +++ b/src/aaz_dev/swagger/model/specs/_resource_provider.py @@ -142,7 +142,7 @@ def _parse_readme_input_file_tags(self): with open(readme_path, 'r', encoding='utf-8') as f: readme = f.read() - pattern = re.compile(r'yaml\s*\$\(\s*tag\s*\)\s*==\s*\'([^\']+)\'\s*input-file:\s*((?:\s*- [^\n]+\s*)+)\s*', + pattern = re.compile(r'```\s*yaml\s*\$\(\s*tag\s*\)\s*==\s*\'([^\']+)\'\s*input-file:\s*((?:\s*- [^\n]+\s*)+)\s*```', flags=re.DOTALL) for piece in pattern.finditer(readme): tag = piece[1].strip() From 79a961780fe4f3d0ddee5035c51fb6aced3f55e3 Mon Sep 17 00:00:00 2001 From: AllyW Date: Tue, 18 Feb 2025 15:56:09 +0800 Subject: [PATCH 3/4] update client cfg in swagger generation --- src/aaz_dev/command/controller/workspace_manager.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/aaz_dev/command/controller/workspace_manager.py b/src/aaz_dev/command/controller/workspace_manager.py index f77f6815..8eed4c54 100644 --- a/src/aaz_dev/command/controller/workspace_manager.py +++ b/src/aaz_dev/command/controller/workspace_manager.py @@ -1070,10 +1070,12 @@ def generate_to_aaz(self): # Merge the commands of subresources which exported in aaz but not exist in current workspace self._merge_sub_resources_in_aaz() - # update client config - editor = self.load_client_cfg_editor() - if editor: - self.aaz_specs.update_client_cfg(editor.cfg) + # in memory worspace folder does not support client cfg + if not self.is_in_memory: + # update client config + editor = self.load_client_cfg_editor() + if editor: + self.aaz_specs.update_client_cfg(editor.cfg) # update configurations for ws_leaf in self.iter_command_tree_leaves(): @@ -1258,8 +1260,6 @@ def create_cfg_editor(self, auth, templates=None, cloud_medadata=None, arm_resou def load_client_cfg_editor(self, reload=False): if not reload and self._client_cfg_editor: return self._client_cfg_editor - if self.is_in_memory: - return None assert not self.is_in_memory try: self._client_cfg_editor = WorkspaceClientCfgEditor.load_client_cfg(self.folder) From 834f3099c24f9f19249d9a0ad0713778b4929996 Mon Sep 17 00:00:00 2001 From: AllyW Date: Fri, 28 Feb 2025 15:59:01 +0800 Subject: [PATCH 4/4] fix regre --- .../swagger/model/specs/_resource_provider.py | 41 +------------------ 1 file changed, 2 insertions(+), 39 deletions(-) diff --git a/src/aaz_dev/swagger/model/specs/_resource_provider.py b/src/aaz_dev/swagger/model/specs/_resource_provider.py index 144b6a30..0ae26ae9 100644 --- a/src/aaz_dev/swagger/model/specs/_resource_provider.py +++ b/src/aaz_dev/swagger/model/specs/_resource_provider.py @@ -86,7 +86,7 @@ def tags(self): self._tags = self._parse_readme_input_file_tags() return self._tags - def _parse_readme_input_file_tags_v0(self): + def _parse_readme_input_file_tags(self): tags = {} if not self._readme_paths: return tags @@ -96,7 +96,7 @@ def _parse_readme_input_file_tags_v0(self): readme = f.read() re_yaml = re.compile( - r'```\s*yaml\s*(.*\$\(\s*tag\s*\)\s*==\s*[\'"]\s*(.*)\s*[\'"].*)?\n((((?!```).)*\n)*)\s*```\s*\n', + r'```\s*yaml\s*(.*\$\(\s*tag\s*\)\s*==\s*[\'"]\s*(.*)\s*[\'"].*)?\n((((?!```).)*\n)*)\s*```\s*', flags=re.MULTILINE) for piece in re_yaml.finditer(readme): flags = piece[1] @@ -133,43 +133,6 @@ def _parse_readme_input_file_tags_v0(self): tags = OrderedDict(tags) return tags - def _parse_readme_input_file_tags(self): - tags = {} - if not self._readme_paths: - return tags - - for readme_path in self._readme_paths: - with open(readme_path, 'r', encoding='utf-8') as f: - readme = f.read() - - pattern = re.compile(r'```\s*yaml\s*\$\(\s*tag\s*\)\s*==\s*\'([^\']+)\'\s*input-file:\s*((?:\s*- [^\n]+\s*)+)\s*```', - flags=re.DOTALL) - for piece in pattern.finditer(readme): - tag = piece[1].strip() - input_files = piece[2].splitlines() - files = [] - for i_file in input_files: - file_path = i_file.strip().lstrip('-').strip() - file_path = file_path.replace('$(this-folder)/', '') - file_path = os.path.join(os.path.dirname(readme_path), *file_path.split('/')) - if not os.path.isfile(file_path): - logger.warning(f'FileNotExist: {self} : {file_path}') - continue - files.append(file_path) - - if len(files): - if tag is None: - tag = '' - tag = OpenAPIResourceProviderTag(tag.strip(), self) - if tag not in tags: - tags[tag] = set() - tags[tag] = tags[tag].union(files) - - tags = [*tags.items()] - tags.sort(key=lambda item: item[0].date, reverse=True) - tags = OrderedDict(tags) - return tags - def _fetch_latest_tag(self, file_path): for tag, file_set in self.tags.items(): if file_path in file_set: