Skip to content

Commit 3fa9d73

Browse files
authored
Merge pull request #512 from necusjz/fix-duplicate-option
fix: duplicate option name
2 parents 8adf4b4 + ee24dc4 commit 3fa9d73

File tree

1 file changed

+31
-20
lines changed

1 file changed

+31
-20
lines changed

src/aaz_dev/command/model/configuration/_command.py

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -324,44 +324,55 @@ def _build_output_type_by_subresource_selector(subresource_selector):
324324

325325

326326
def handle_duplicated_options(arguments, has_subresource, operation_id):
327+
def can_be_replaced(arg1, arg2):
328+
# check whether you need to replace argument
329+
ret = False
330+
if _compare_argument(arg1, arg2, has_subresource):
331+
arg2.ref_schema.arg = arg1.var
332+
dropped_args.add(arg2.var)
333+
ret = False
334+
335+
elif _compare_argument(arg2, arg1, has_subresource):
336+
arg1.ref_schema.arg = arg2.var
337+
dropped_args.add(arg1.var)
338+
ret = True
339+
340+
else:
341+
# warning developer handle duplicated options
342+
logger.warning(
343+
f"Duplicated Option Value: {set(arg1.options).intersection(arg2.options)} : "
344+
f"{arg1.var} with {arg2.var} : {operation_id}"
345+
)
346+
347+
return ret
348+
327349
# check argument with duplicated option names
328350
dropped_args = set()
329351
used_args = set()
330352
for arg in arguments.values():
331353
used_args.add(arg.var)
332354
if arg.var in dropped_args or not arg.options:
333355
continue
334-
r_arg = None
356+
335357
for v in arguments.values():
336358
if v.var in used_args or v.var in dropped_args or arg.var == v.var or not v.options:
337359
continue
360+
338361
if not set(arg.options).isdisjoint(v.options):
339-
r_arg = v
340-
break
341-
if r_arg:
342-
# check whether you need to replace argument
343-
if _can_replace_argument(r_arg, arg, has_subresource):
344-
arg.ref_schema.arg = r_arg.var
345-
dropped_args.add(arg.var)
346-
elif _can_replace_argument(arg, r_arg, has_subresource):
347-
r_arg.ref_schema.arg = arg.var
348-
dropped_args.add(r_arg.var)
349-
else:
350-
# warning developer handle duplicated options
351-
logger.warning(
352-
f"Duplicated Option Value: {set(arg.options).intersection(r_arg.options)} : "
353-
f"{arg.var} with {r_arg.var} : {operation_id}"
354-
)
362+
if can_be_replaced(arg, v):
363+
break
355364

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

358367

359-
def _can_replace_argument(arg, old_arg, has_subresource):
368+
def _compare_argument(arg, old_arg, has_subresource):
360369
arg_prefix = arg.var.split('.')[0]
361370
old_prefix = old_arg.var.split('.')[0]
362371

363-
if old_prefix in (CMDArgBuildPrefix.Query, CMDArgBuildPrefix.Header, CMDArgBuildPrefix.Path):
364-
# replace argument should only be in body
372+
if old_prefix in (CMDArgBuildPrefix.Query, CMDArgBuildPrefix.Header):
373+
return True
374+
375+
if old_prefix == CMDArgBuildPrefix.Path:
365376
return False
366377

367378
if arg_prefix in (CMDArgBuildPrefix.Query, CMDArgBuildPrefix.Header):

0 commit comments

Comments
 (0)