Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 31 additions & 20 deletions src/aaz_dev/command/model/configuration/_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -324,44 +324,55 @@ def _build_output_type_by_subresource_selector(subresource_selector):


def handle_duplicated_options(arguments, has_subresource, operation_id):
def can_be_replaced(arg1, arg2):
# check whether you need to replace argument
ret = False
if _compare_argument(arg1, arg2, has_subresource):
arg2.ref_schema.arg = arg1.var
dropped_args.add(arg2.var)
ret = False

elif _compare_argument(arg2, arg1, has_subresource):
arg1.ref_schema.arg = arg2.var
dropped_args.add(arg1.var)
ret = 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 ret

# check argument with duplicated option names
dropped_args = set()
used_args = set()
for arg in arguments.values():
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}"
)
if can_be_replaced(arg, v):
break

return [arg for var, arg in arguments.items() if var not in dropped_args]


def _can_replace_argument(arg, old_arg, has_subresource):
def _compare_argument(arg, old_arg, has_subresource):
arg_prefix = arg.var.split('.')[0]
old_prefix = old_arg.var.split('.')[0]

if old_prefix in (CMDArgBuildPrefix.Query, CMDArgBuildPrefix.Header, CMDArgBuildPrefix.Path):
# replace argument should only be in body
if old_prefix in (CMDArgBuildPrefix.Query, CMDArgBuildPrefix.Header):
return True

if old_prefix == CMDArgBuildPrefix.Path:
return False

if arg_prefix in (CMDArgBuildPrefix.Query, CMDArgBuildPrefix.Header):
Expand Down
Loading