Skip to content

Commit 07d9b5a

Browse files
committed
Fix adding duplicate args.
1 parent 02f186e commit 07d9b5a

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

pydantic_settings/sources.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,15 +1682,15 @@ def _add_parser_args(
16821682
else f'{arg_prefix}{preferred_alias}'
16831683
)
16841684

1685-
if kwargs['dest'] in added_args:
1685+
arg_names = self._get_arg_names(arg_prefix, subcommand_prefix, alias_prefixes, alias_names, added_args)
1686+
if not arg_names or (kwargs['dest'] in added_args):
16861687
continue
16871688

16881689
if is_append_action:
16891690
kwargs['action'] = 'append'
16901691
if _annotation_contains_types(field_info.annotation, (dict, Mapping), is_strip_annotated=True):
16911692
self._cli_dict_args[kwargs['dest']] = field_info.annotation
16921693

1693-
arg_names = self._get_arg_names(arg_prefix, subcommand_prefix, alias_prefixes, alias_names)
16941694
if _CliPositionalArg in field_info.metadata:
16951695
kwargs['metavar'] = preferred_alias.upper()
16961696
arg_names = [kwargs['dest']]
@@ -1748,18 +1748,25 @@ def _convert_bool_flag(self, kwargs: dict[str, Any], field_info: FieldInfo, mode
17481748
)
17491749

17501750
def _get_arg_names(
1751-
self, arg_prefix: str, subcommand_prefix: str, alias_prefixes: list[str], alias_names: tuple[str, ...]
1751+
self,
1752+
arg_prefix: str,
1753+
subcommand_prefix: str,
1754+
alias_prefixes: list[str],
1755+
alias_names: tuple[str, ...],
1756+
added_args: list[str],
17521757
) -> list[str]:
17531758
arg_names: list[str] = []
17541759
for prefix in [arg_prefix] + alias_prefixes:
17551760
for name in alias_names:
1756-
arg_names.append(
1761+
arg_name = (
17571762
f'{prefix}{name}'
17581763
if subcommand_prefix == self.env_prefix
17591764
else f'{prefix.replace(subcommand_prefix, "", 1)}{name}'
17601765
)
17611766
if self.cli_kebab_case:
1762-
arg_names[-1] = arg_names[-1].replace('_', '-')
1767+
arg_name = arg_name.replace('_', '-')
1768+
if arg_name not in added_args:
1769+
arg_names.append(arg_name)
17631770
return arg_names
17641771

17651772
def _add_parser_submodels(

0 commit comments

Comments
 (0)