From e81acd1eb6615690dbd7db3d66b093a53bf5fd1f Mon Sep 17 00:00:00 2001 From: Julie Zhu Date: Tue, 23 Sep 2025 23:17:38 +1000 Subject: [PATCH 1/2] fix some issues --- .../command/controller/command_tree.py | 4 +- .../command/controller/workspace_manager.py | 2 +- .../command/model/configuration/_command.py | 41 +++++++++++-------- .../swagger/controller/_example_builder.py | 3 ++ .../swagger/model/schema/cmd_builder.py | 8 ---- 5 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/aaz_dev/command/controller/command_tree.py b/src/aaz_dev/command/controller/command_tree.py index e180737d..b4361d39 100644 --- a/src/aaz_dev/command/controller/command_tree.py +++ b/src/aaz_dev/command/controller/command_tree.py @@ -597,7 +597,7 @@ def verify_updated_command_tree(self): if not group: details[' '.join(group_names)] = { 'type': 'group', - 'help': "Miss short summary." + 'help': "Group not found." } elif not group.help or not group.help.short: details[' '.join(group.names)] = { @@ -610,7 +610,7 @@ def verify_updated_command_tree(self): if not cmd: details[' '.join(cmd_names)] = { 'type': 'command', - 'help': "Miss short summary." + 'help': "Command not found." } elif not cmd.help or not cmd.help.short: details[' '.join(cmd.names)] = { diff --git a/src/aaz_dev/command/controller/workspace_manager.py b/src/aaz_dev/command/controller/workspace_manager.py index 27a58193..34d62603 100644 --- a/src/aaz_dev/command/controller/workspace_manager.py +++ b/src/aaz_dev/command/controller/workspace_manager.py @@ -1088,7 +1088,7 @@ 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() - # in memory worspace folder does not support client cfg + # in memory workspace folder does not support client cfg if not self.is_in_memory: # update client config editor = self.load_client_cfg_editor() diff --git a/src/aaz_dev/command/model/configuration/_command.py b/src/aaz_dev/command/model/configuration/_command.py index 7785bf80..112500d4 100644 --- a/src/aaz_dev/command/model/configuration/_command.py +++ b/src/aaz_dev/command/model/configuration/_command.py @@ -324,6 +324,26 @@ def _build_output_type_by_subresource_selector(subresource_selector): def handle_duplicated_options(arguments, has_subresource, operation_id): + def _replace_arg(arg1, arg2): + left_arg1 = True + # check whether you need to replace argument + if _can_replace_argument(arg2, arg1, has_subresource): + arg1.ref_schema.arg = arg2.var + dropped_args.add(arg1.var) + left_arg1 = False + elif _can_replace_argument(arg1, arg2, has_subresource): + arg2.ref_schema.arg = arg1.var + dropped_args.add(arg2.var) + left_arg1 = True + else: + # warning developer handle duplicated options + logger.warning( + f"Duplicated Option Value: {set(arg1.options).intersection(arg2.options)} : " + f"{arg1.var} with {arg2.var} : {operation_id}" + ) + + return left_arg1 + # check argument with duplicated option names dropped_args = set() used_args = set() @@ -331,27 +351,14 @@ def handle_duplicated_options(arguments, has_subresource, operation_id): used_args.add(arg.var) if arg.var in dropped_args or not arg.options: continue - r_arg = None + for v in arguments.values(): if v.var in used_args or v.var in dropped_args or arg.var == v.var or not v.options: continue if not set(arg.options).isdisjoint(v.options): - r_arg = v - break - if r_arg: - # check whether you need to replace argument - if _can_replace_argument(r_arg, arg, has_subresource): - arg.ref_schema.arg = r_arg.var - dropped_args.add(arg.var) - elif _can_replace_argument(arg, r_arg, has_subresource): - r_arg.ref_schema.arg = arg.var - dropped_args.add(r_arg.var) - else: - # warning developer handle duplicated options - logger.warning( - f"Duplicated Option Value: {set(arg.options).intersection(r_arg.options)} : " - f"{arg.var} with {r_arg.var} : {operation_id}" - ) + left_arg = _replace_arg(arg, v) + if not left_arg: + break return [arg for var, arg in arguments.items() if var not in dropped_args] diff --git a/src/aaz_dev/swagger/controller/_example_builder.py b/src/aaz_dev/swagger/controller/_example_builder.py index 354d176c..2feb4b70 100644 --- a/src/aaz_dev/swagger/controller/_example_builder.py +++ b/src/aaz_dev/swagger/controller/_example_builder.py @@ -78,6 +78,9 @@ def __init__(self, command=None, operation=None, cmd_operation=None): self.cmd_operation = cmd_operation def mapping(self, example_dict): + if not self.operation.parameters: + return self.example_items + for param in self.operation.parameters: if param.name not in example_dict: continue diff --git a/src/aaz_dev/swagger/model/schema/cmd_builder.py b/src/aaz_dev/swagger/model/schema/cmd_builder.py index e24ad962..5541ffd2 100644 --- a/src/aaz_dev/swagger/model/schema/cmd_builder.py +++ b/src/aaz_dev/swagger/model/schema/cmd_builder.py @@ -407,14 +407,6 @@ def build_cmd_string_format(schema): fmt = CMDStringFormat() if schema.pattern is not None: - try: - _ = re.compile(schema.pattern) # verify schema pattern - except Exception as err: - raise exceptions.InvalidSwaggerValueError( - msg=f"Invalid regex expression", - key=[schema.traces], - value=[schema.pattern] - ) fmt.pattern = schema.pattern fmt_assigned = True if schema.max_length is not None: From 707062f2aae5b3ac1db9aca8b7491c56d1d81670 Mon Sep 17 00:00:00 2001 From: Julie Zhu Date: Wed, 15 Oct 2025 14:53:28 +1100 Subject: [PATCH 2/2] fix --- .../command/model/configuration/_command.py | 41 ++++++++----------- .../swagger/controller/_example_builder.py | 3 -- .../swagger/model/schema/cmd_builder.py | 8 +++- 3 files changed, 23 insertions(+), 29 deletions(-) diff --git a/src/aaz_dev/command/model/configuration/_command.py b/src/aaz_dev/command/model/configuration/_command.py index 112500d4..7785bf80 100644 --- a/src/aaz_dev/command/model/configuration/_command.py +++ b/src/aaz_dev/command/model/configuration/_command.py @@ -324,26 +324,6 @@ def _build_output_type_by_subresource_selector(subresource_selector): def handle_duplicated_options(arguments, has_subresource, operation_id): - def _replace_arg(arg1, arg2): - left_arg1 = True - # check whether you need to replace argument - if _can_replace_argument(arg2, arg1, has_subresource): - arg1.ref_schema.arg = arg2.var - dropped_args.add(arg1.var) - left_arg1 = False - elif _can_replace_argument(arg1, arg2, has_subresource): - arg2.ref_schema.arg = arg1.var - dropped_args.add(arg2.var) - left_arg1 = True - else: - # warning developer handle duplicated options - logger.warning( - f"Duplicated Option Value: {set(arg1.options).intersection(arg2.options)} : " - f"{arg1.var} with {arg2.var} : {operation_id}" - ) - - return left_arg1 - # check argument with duplicated option names dropped_args = set() used_args = set() @@ -351,14 +331,27 @@ def _replace_arg(arg1, arg2): used_args.add(arg.var) if arg.var in dropped_args or not arg.options: continue - + r_arg = None for v in arguments.values(): if v.var in used_args or v.var in dropped_args or arg.var == v.var or not v.options: continue if not set(arg.options).isdisjoint(v.options): - left_arg = _replace_arg(arg, v) - if not left_arg: - break + r_arg = v + break + if r_arg: + # check whether you need to replace argument + if _can_replace_argument(r_arg, arg, has_subresource): + arg.ref_schema.arg = r_arg.var + dropped_args.add(arg.var) + elif _can_replace_argument(arg, r_arg, has_subresource): + r_arg.ref_schema.arg = arg.var + dropped_args.add(r_arg.var) + else: + # warning developer handle duplicated options + logger.warning( + f"Duplicated Option Value: {set(arg.options).intersection(r_arg.options)} : " + f"{arg.var} with {r_arg.var} : {operation_id}" + ) return [arg for var, arg in arguments.items() if var not in dropped_args] diff --git a/src/aaz_dev/swagger/controller/_example_builder.py b/src/aaz_dev/swagger/controller/_example_builder.py index 2feb4b70..354d176c 100644 --- a/src/aaz_dev/swagger/controller/_example_builder.py +++ b/src/aaz_dev/swagger/controller/_example_builder.py @@ -78,9 +78,6 @@ def __init__(self, command=None, operation=None, cmd_operation=None): self.cmd_operation = cmd_operation def mapping(self, example_dict): - if not self.operation.parameters: - return self.example_items - for param in self.operation.parameters: if param.name not in example_dict: continue diff --git a/src/aaz_dev/swagger/model/schema/cmd_builder.py b/src/aaz_dev/swagger/model/schema/cmd_builder.py index 5541ffd2..79497241 100644 --- a/src/aaz_dev/swagger/model/schema/cmd_builder.py +++ b/src/aaz_dev/swagger/model/schema/cmd_builder.py @@ -407,8 +407,12 @@ def build_cmd_string_format(schema): fmt = CMDStringFormat() if schema.pattern is not None: - fmt.pattern = schema.pattern - fmt_assigned = True + try: + _ = re.compile(schema.pattern) # verify schema pattern + fmt.pattern = schema.pattern + fmt_assigned = True + except Exception as err: + logger.warning('Invalid regex expression: traces: {}, pattern: {}'.format(str([schema.traces]), schema.pattern)) if schema.max_length is not None: fmt.max_length = schema.max_length fmt_assigned = True