o
    h                     @  st  d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&Z&ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl&m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z> ddlm?Z?m@Z@mAZAmBZBmCZCmDZD ddl<mEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZM erddlNmOZO G dd deZPG dd  d e(ZQe"d!ZRee#eRdf eCf ZSeeReBf ZTe"d"eUd#ZVeeVeAf ZWeeVe@f ZXe
ZYeeReYf ZZee[e\ e)g d$eDe?f Z]G d%d& d&eMeeR Z^dS )'z'Command-line interface settings source.    )annotationsN)SUPPRESSArgumentParserBooleanOptionalAction	NamespaceRawDescriptionHelpFormatter_SubParsersAction)defaultdict)MappingSequence)Enum)dedent)SimpleNamespace)TYPE_CHECKING	AnnotatedAnyCallableGenericNoReturnOptionalTypeVarUnioncastoverload)	BaseModelField)Representation)is_model_class)is_pydantic_dataclass)	FieldInfo)PydanticUndefined)get_args
get_origin)typing_objects)is_union_origin   SettingsError)_lenient_issubclass_WithArgsTypes   )NoDecode_CliExplicitFlag_CliImplicitFlag_CliPositionalArg_CliSubCommand_CliUnknownArgs)_annotation_contains_types_annotation_enum_val_to_name_get_alias_names_get_model_fields_is_function_strip_annotatedparse_env_vars   )EnvSettingsSource)BaseSettingsc                      s.   e Zd Zdd fdd	Zd fddZ  ZS )_CliInternalArgParserTcli_exit_on_errorboolkwargsr   returnNonec                   s   t  jdi | || _d S )N )super__init___cli_exit_on_error)selfr<   r>   	__class__rA   {/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/pydantic_settings/sources/providers/cli.pyrC   C   s   
z_CliInternalArgParser.__init__messagestrr   c                   s$   | j s
td| t | d S )Nzerror parsing CLI: )rD   r'   rB   error)rE   rI   rF   rA   rH   rK   G   s   z_CliInternalArgParser.error)T)r<   r=   r>   r   r?   r@   )rI   rJ   r?   r   )__name__
__module____qualname__rC   rK   __classcell__rA   rA   rF   rH   r;   B   s    r;   c                   @  s   e Zd ZdS )CliMutuallyExclusiveGroupN)rL   rM   rN   rA   rA   rA   rH   rP   M   s    rP   T_CliBoolFlag)bound)defaultc                      s  e Zd ZdZddddddddddddddddejejejej	e
fd fd"d#Zedd%d&Zedd*d&Zedd-d&Zddd.d fd2d&Zedd4d5Zedd6d5Zdd7dd9d5Zdd?d@ZddAdBZddGdHZddIdJZddMdNZddTdUZddVdWZddYdZZedd\d]ZddbdcZddddeZejejejej	e
fddfdgZ	hdddrdsZddudvZddxdyZddzd{Zdd~dZ dddZ!dddZ"dddZ#dddZ$ddddZ%dddZ&dddZ'dddZ(dddZ)  Z*S )CliSettingsSourcea  
    Source class for loading settings values from CLI.

    Note:
        A `CliSettingsSource` connects with a `root_parser` object by using the parser methods to add
        `settings_cls` fields as command line arguments. The `CliSettingsSource` internal parser representation
        is based upon the `argparse` parsing library, and therefore, requires the parser methods to support
        the same attributes as their `argparse` library counterparts.

    Args:
        cli_prog_name: The CLI program name to display in help text. Defaults to `None` if cli_parse_args is `None`.
            Otherwise, defaults to sys.argv[0].
        cli_parse_args: The list of CLI arguments to parse. Defaults to None.
            If set to `True`, defaults to sys.argv[1:].
        cli_parse_none_str: The CLI string value that should be parsed (e.g. "null", "void", "None", etc.) into `None`
            type(None). Defaults to "null" if cli_avoid_json is `False`, and "None" if cli_avoid_json is `True`.
        cli_hide_none_type: Hide `None` values in CLI help text. Defaults to `False`.
        cli_avoid_json: Avoid complex JSON objects in CLI help text. Defaults to `False`.
        cli_enforce_required: Enforce required fields at the CLI. Defaults to `False`.
        cli_use_class_docs_for_groups: Use class docstrings in CLI group help text instead of field descriptions.
            Defaults to `False`.
        cli_exit_on_error: Determines whether or not the internal parser exits with error info when an error occurs.
            Defaults to `True`.
        cli_prefix: Prefix for command line arguments added under the root parser. Defaults to "".
        cli_flag_prefix_char: The flag prefix character to use for CLI optional arguments. Defaults to '-'.
        cli_implicit_flags: Whether `bool` fields should be implicitly converted into CLI boolean flags.
            (e.g. --flag, --no-flag). Defaults to `False`.
        cli_ignore_unknown_args: Whether to ignore unknown CLI args and parse only known ones. Defaults to `False`.
        cli_kebab_case: CLI args use kebab case. Defaults to `False`.
        case_sensitive: Whether CLI "--arg" names should be read with case-sensitivity. Defaults to `True`.
            Note: Case-insensitive matching is only supported on the internal root parser and does not apply to CLI
            subcommands.
        root_parser: The root parser object.
        parse_args_method: The root parser parse args method. Defaults to `argparse.ArgumentParser.parse_args`.
        add_argument_method: The root parser add argument method. Defaults to `argparse.ArgumentParser.add_argument`.
        add_argument_group_method: The root parser add argument group method.
            Defaults to `argparse.ArgumentParser.add_argument_group`.
        add_parser_method: The root parser add new parser (sub-command) method.
            Defaults to `argparse._SubParsersAction.add_parser`.
        add_subparsers_method: The root parser add subparsers (sub-commands) method.
            Defaults to `argparse.ArgumentParser.add_subparsers`.
        formatter_class: A class for customizing the root parser help text. Defaults to `argparse.RawDescriptionHelpFormatter`.
    NTsettings_clstype[BaseSettings]cli_prog_name
str | Nonecli_parse_args)bool | list[str] | tuple[str, ...] | Nonecli_parse_none_strcli_hide_none_typebool | Nonecli_avoid_jsoncli_enforce_requiredcli_use_class_docs_for_groupsr<   
cli_prefixcli_flag_prefix_charcli_implicit_flagscli_ignore_unknown_argscli_kebab_casecase_sensitiveroot_parserr   parse_args_methodCallable[..., Any] | Noneadd_argument_methodadd_argument_group_methodadd_parser_methodadd_subparsers_methodformatter_classr?   r@   c              	     s  |d ur|n	|j dtjd | _|d ur|n|j dd| _|d ur%|n|j dd| _|s8| jdu r6dnd}|| _|d urA|n|j d	d| _|d urO|n|j d
d| _	|	d ur]|	n|j dd| _
|
d urk|
n|j dd| _|d ury|n|j dd| _| jd | _| jr|
ds|
ds|
dd std|
 |  jd7  _|d ur|n|j dd| _|d ur|n|j dd| _|d ur|n|j dd| _|d ur|nd}|s|d urtdt j|d| jd| j|d |d u rt| j
| j|jd u rd nt|j|| jddn|}| j|||||||d |dvrO|du r1tjdd  }nt|ttfsBtdt| | j | !| j"|d d S d S )NrX   r   r]   Fr_   Tr@   nullr`   ra   r<   rb    rc   -r*   .z'CLI settings source prefix is invalid: rd   re   rf   zGCase-insensitive matching is only supported on the internal root parser)env_nested_delimiterenv_parse_none_strenv_parse_enums
env_prefixrg   )r<   progdescriptionro   prefix_charsallow_abbrev)rh   ri   rk   rl   rm   rn   ro   )NFr8   z<cli_parse_args must be a list or tuple of strings, received parsed_args)#model_configgetsysargvrX   r]   r_   r\   r`   ra   r<   rb   rc   _cli_flag_prefix
startswithendswithreplaceisidentifierr'   rd   re   rf   rB   rC   r;   __doc__r   _connect_root_parser
isinstancelisttupletype_load_env_vars_parse_argsrh   )rE   rV   rX   rZ   r\   r]   r_   r`   ra   r<   rb   rc   rd   re   rf   rg   rh   ri   rk   rl   rm   rn   ro   rF   rA   rH   rC      s   $
	


zCliSettingsSource.__init__dict[str, Any]c                 C     d S NrA   rE   rA   rA   rH   __call__     zCliSettingsSource.__call__args"list[str] | tuple[str, ...] | boolCliSettingsSource[T]c                C     dS )a  
        Parse and load the command line arguments list into the CLI settings source.

        Args:
            args:
                The command line arguments to parse and load. Defaults to `None`, which means do not parse
                command line arguments. If set to `True`, defaults to sys.argv[1:]. If set to `False`, does
                not parse command line arguments.

        Returns:
            CliSettingsSource: The object instance itself.
        NrA   )rE   r   rA   rA   rH   r     s   r}   ,Namespace | SimpleNamespace | dict[str, Any]c                C  r   )a  
        Loads parsed command line arguments into the CLI settings source.

        Note:
            The parsed args must be in `argparse.Namespace`, `SimpleNamespace`, or vars dictionary
            (e.g., vars(argparse.Namespace)) format.

        Args:
            parsed_args: The parsed args to load.

        Returns:
            CliSettingsSource: The object instance itself.
        NrA   rE   r}   rA   rA   rH   r        )r   r}   )list[str] | tuple[str, ...] | bool | None?Namespace | SimpleNamespace | dict[str, list[str] | str] | None%dict[str, Any] | CliSettingsSource[T]c                  s~   |d ur|d urt d|d ur0|du r| ji dS |du r%tjdd  }| j| | j|dS |d ur:| j|dS t  S )Nz/`args` and `parsed_args` are mutually exclusiveFr|   Tr8   )r'   r   r   r   r   rh   rB   r   )rE   r   r}   rF   rA   rH   r   (  s   
Mapping[str, str | None]c                 C  r   r   rA   r   rA   rA   rH   r   ;  r   z CliSettingsSource._load_env_varsc                C  r   )a  
        Loads the parsed command line arguments into the CLI environment settings variables.

        Note:
            The parsed args must be in `argparse.Namespace`, `SimpleNamespace`, or vars dictionary
            (e.g., vars(argparse.Namespace)) format.

        Args:
            parsed_args: The parsed args to load.

        Returns:
            CliSettingsSource: The object instance itself.
        NrA   r   rA   rA   rH   r   >  r   r|   /Mapping[str, str | None] | CliSettingsSource[T]c                  s8  |d u ri S t |ttfrt|}g }| D ]0\}}t |tr)| ||||< q|drG|d urG|dd | }| j	| | }|
| q| j	 D ]}| D ]}||vr^| j||< qSqMdd | D }|rt|td t fdd| D sd	| < || j tttttf || j| j| j| _| S )
N:subcommand:r   c                 S  s(   i | ]\}}| d s|tur||qS )r   )r   r    ).0keyvalrA   rA   rH   
<dictcomp>f  s    z4CliSettingsSource._load_env_vars.<locals>.<dictcomp>)r   c                 3  s"    | ]}  d |v r|V  qdS )rs   NrA   )r   
field_namelast_selected_subcommandrA   rH   	<genexpr>m  s     z3CliSettingsSource._load_env_vars.<locals>.<genexpr>{})r   r   r   varsitemsr   _merge_parsed_listr   split_cli_subcommandsappendvaluesr\   maxlenanykeysupdate_cli_unknown_argsr7   r   r
   rJ   rg   env_ignore_emptyenv_vars)rE   r}   selected_subcommandsr   r   subcommand_namesubcommand_destsubcommandsrA   r   rH   r   O  sD   


parsed_list	list[str]r   rJ   %tuple[Optional[type], Optional[type]]c                 C  sr   | j |t}|tu stt|rtdd t|D s"|}||fS |r3t|dks1|d dr3tnt	}||fS )Nc                 s  s0    | ]}|t d urt|ttfvr|V  qd S r   )r   r"   dictr
   r   type_rA   rA   rH   r     s    zACliSettingsSource._get_merge_parsed_list_types.<locals>.<genexpr>r8   r   [)
_cli_dict_argsr   r   r$   r"   r   r!   r   r   rJ   )rE   r   r   
merge_typeinferred_typerA   rA   rH   _get_merge_parsed_list_types{  s   
&z.CliSettingsSource._get_merge_parsed_list_typesc                 C  s  zg }d}|  ||\}}|D ]}}t|ts nu| }|dr.|dr.|dd  }|r| }|drC| |||}d}n>|dsM|drT| ||}n+z	| |||}W n! t	y~ } z||u rk||}| |||}W Y d }~nd }~ww d}|s0|s| |||}q|tu r|d	 W S |t
u rdd| dW S i }	|D ]
}
|	t|
 qt|	W S  ty } z
td
| d| d }~ww )NFr   ]r8   ,{Tr   zParsing error encountered for z: )r   r   rJ   stripr   r   _consume_comma_consume_object_or_array_consume_string_or_number
ValueErrorr   joinr   jsonloadsdumps	Exceptionr'   )rE   r   r   merged_listis_last_consumed_a_valuer   r   r   emerged_dictitemrA   rA   rH   r     sV   


z$CliSettingsSource._merge_parsed_listr   r   r   r=   c                 C  s   |s| d |dd  S )Nz""r8   )r   )rE   r   r   r   rA   rA   rH   r     s   
z CliSettingsSource._consume_commac                 C  s   d}| dr	dnd}tdt|D ]6}|| dv r|d7 }q|| dv rH|d8 }|| |krH|dkrH||d |d   ||d d    S qtd| d	)
Nr8   r   }r   )r   r   )r   r   r   zMissing end delimiter "")r   ranger   r   r'   )rE   r   r   countclose_delimconsumedrA   rA   rH   r     s   
z*CliSettingsSource._consume_object_or_arrayr   type[Any] | Nonec           	      C  sz  |t urdnt|}d}|t|k r:|| dkr'|dks$||d  dkr'| }|s0|| dkr0n
|d7 }|t|k s|r@td|d |  }|tt fv rzzt| W n tys   || jkrbd}|d	vrq|dsqd| d}Y nw |	| n=d
d |
ddD \}}|dr|ds|ds|drtd| |d|d}}|	t||i ||d  S )Nr   Fr   r8   \r   zMismatched quotesrp   )truefalserp   c                 s  s    | ]}|V  qd S r   rA   )r   kvrA   rA   rH   r     s    z>CliSettingsSource._consume_string_or_number.<locals>.<genexpr>=z1Dictionary key=val parameter is a quoted string: )rJ   r   r'   r   r   floatr   r\   r   r   r   r   r   r   )	rE   r   r   r   r   is_find_end_quote
val_stringr   r   rA   rA   rH   r     s:   $
(z+CliSettingsSource._consume_string_or_numbermodeltype[BaseModel]
field_infor   list[type[BaseModel]]c                 C  s   t |js	|jfnt |j}| jrtdd |D }g }|D ];}t|tfddr3td|j d| t|tfddrFtd|j d| t	t
|sRtt
|rY|t
| q|S )Nc                 S     g | ]
}|t d ur|qS r   r   r   rA   rA   rH   
<listcomp>      z5CliSettingsSource._get_sub_models.<locals>.<listcomp>F)is_include_originz.CliSubCommand is not outermost annotation for rs   z1CliPositionalArg is not outermost annotation for )r!   
annotationr]   r   r1   r/   r'   rL   r.   r   r6   r   r   )rE   r   r   r   field_types
sub_modelsr   rA   rA   rH   _get_sub_models  s   z!CliSettingsSource._get_sub_modelsc                 C  sN   t |jv rd}n
t|jv rd}nd S |jtur%t| d|j d| dd S )NCliImplicitFlagCliExplicitFlagz
 argument rs   z is not of type bool)r-   metadatar,   r   r=   r'   rL   )rE   r   r   r   cli_flag_namerA   rA   rH   _verify_cli_flag_annotations  s   


z.CliSettingsSource._verify_cli_flag_annotationslist[tuple[str, FieldInfo]]c                 C  s  g }g g g }}}t | D ]\}}t|jv rm| s)td|j d| dt||^}}	t|dkrBtd|j d| ddd t	|j
D }
|
D ]}t|sdt|sdtd|j d| dqN|||f qt|jv rt||^}}	t|dkrtd	|j d| dt|j
tttttfd
d}|s|||f q|||f q| ||| |||f q|rt|dkrddd |D }t|j d| |rddd || D }t|j d| || | | S )Nzsubcommand argument rs   z has a default valuer8   z has multiple aliasesc                 S  r   r   r   r   rA   rA   rH   r     r   z6CliSettingsSource._sort_arg_fields.<locals>.<listcomp>z$ has type not derived from BaseModelzpositional argument Tis_strip_annotated, c                 S     g | ]\}}|qS rA   rA   r   nameinforA   rA   rH   r   )      z- has multiple variadic positional arguments: c                 S  r  rA   rA   r  rA   rA   rH   r   ,  r  z= has variadic positional arguments and subcommand arguments: )r4   r   r/   r   is_requiredr'   rL   r3   r   r!   r   r   r   r   r.   r1   r   setr   r   r
   r   r   )rE   r   positional_variadic_argpositional_argssubcommand_argsoptional_argsr   r   alias_names_r   
field_typeis_append_actionfield_namesrA   rA   rH   _sort_arg_fields  sN   

z"CliSettingsSource._sort_arg_fieldsrQ   c                 C  s   | j S )z#The connected root parser instance.)_root_parserr   rA   rA   rH   rh   3  s   zCliSettingsSource.root_parserparser_methodmethod_namer>   Callable[..., Any]c                   s^   d ur j du r  dkr tjtr 	 	 ddfdd}|S d u r-d fdd}|S S )NFri   rh   r;   r   "list[str] | tuple[str, ...] | None	namespaceNamespace | Noner?   r   c                   sv   g }|rt t |ng D ]&}dj d}td| d|}|r/|d |d }|| q | ||S )Nr   z{1,2}z^(z[^\s=]+)(.*)r8   r*   )	shlexr   r   rc   rematchgrouplowerr   )rh   r   r  insensitive_argsargflag_prefixmatched)r  rE   rA   rH   parse_args_insensitive_methodB  s   zOCliSettingsSource._connect_parser_method.<locals>.parse_args_insensitive_methodr>   c                    s   t d  d)Nz0cannot connect CLI settings source root parser: z. is set to `None` but is needed for connectingr&   )r   r>   )r  rA   rH   none_parser_methodT  s   
zDCliSettingsSource._connect_parser_method.<locals>.none_parser_method)NN)rh   r;   r   r  r  r  r?   r   )r   r   r>   r   r?   r   )rg   r   r  r;   )rE   r  r  r   r>   r#  r$  rA   )r  r  rE   rH   _connect_parser_method8  s   

z(CliSettingsSource._connect_parser_methodc                   s   |  |d d fdd}|S )	Nrl   parserr   r>   r?   c                   sx     ds  d | fi  S  fdddD }|d  d7  < | fi |}t|ds4td	|jd
i  S )N _is_cli_mutually_exclusive_grouprequiredc                   s    i | ]}| v r|  |qS rA   )popr   r   r>   rA   rH   r   f  s     zUCliSettingsSource._connect_group_method.<locals>.add_group_method.<locals>.<dictcomp>)titlery   r,  z (mutually exclusive)add_mutually_exclusive_groupzcannot connect CLI settings source root parser: group object is missing add_mutually_exclusive_group but is needed for connectingrA   )r)  hasattrr'   r-  )r&  r>   main_group_kwargsr  add_argument_groupr+  rH   add_group_methoda  s   


zACliSettingsSource._connect_group_method.<locals>.add_group_method)r&  r   r>   r   r?   r   )r%  )rE   rl   r2  rA   r0  rH   _connect_group_method^  s   z'CliSettingsSource._connect_group_methodc           	   
     s   i  _ d fdd}| _|d u r jr|ntj} |d _ |d	 _ | _	 |d
 _
 |d _| _i  _tt _ j j jg  j jd g td d S )Nr   r   r>   r?   r   c                    s4   t j| i |\} } jD ]}| j|< qtt| S r   )r   parse_known_argsr   r   r   )r   r>   unknown_argsdestr   rA   rH   _parse_known_args~  s   

zACliSettingsSource._connect_root_parser.<locals>._parse_known_argsri   rk   rm   rn   r&  r   
added_args
arg_prefixsubcommand_prefixr  alias_prefixesmodel_default)r   r   r>   r   r?   r   )r   r  re   r   
parse_argsr%  r   _add_argumentr3  
_add_group_add_parser_add_subparsers_formatter_classr   r	   r   r   _add_parser_argsrh   rV   rw   r    )	rE   rh   ri   rk   rl   rm   rn   ro   r7  rA   r   rH   r   r  s.   


z&CliSettingsSource._connect_root_parserFr&  r9  r:  r;  r  r<  r=  is_model_suppressedr   c
                   s  d }
i }t t|stt|rtt||sd n|}| |D ]\}}| |||}t|||| jd\}}|d }t|j	v r|D ]}| 
t|dkrO|jn|}| | }| | }|| j| d |< t|dkrpd n|j}| jr|jd u r}d nt|j}|
d u r| j|d| dt|dkr|jnd dn|
}
t|
dr|
jr|
jd d  d	| d
nd| d
|
_| j| j|
||| j|jd u rd nt|jd|g | | d| | dd g td qBq | j t|jttttt fdd}|o| }i }t!|d< | "||||	|d< | #|j|d< | j$o|% o|tu |d< |r8|j&d ur8|s8| | | j'd  n| | |d< | (|||||}|rS|d |v rTq | )||| t*|j	v rk| +||||\} | ,||| |r| j-|||||| |||||||	d q t.|j	v rg | j/|d < q |s|d urt0|tr| j1|fi |}|t|7 }| j2|g fdd|D R i | q |t|7 }| j2|g fdd|D R i | q | 3|||||| |S )N)alias_path_argsrg   r   r8   r   r   )r,  r6  ry   metavarr   r   r   r   )helpro   ry   rs   r8  Tr   rT   rH  r(  r6  )r=  rE  c                 3  (    | ]} d t |  | V  qd S r   r   r   r  r!  rA   rH   r   !     & z5CliSettingsSource._add_parser_args.<locals>.<genexpr>c                 3  rI  r   rJ  rK  rL  rA   rH   r   &  rM  )4r   r   r   
issubclassr  r   r3   rg   r/   r   _check_kebab_namer   rL   r   ry   ra   r   r   rB  r.  rG  rD  rA  rC  r    r   r1   r   r   r  r   r   r
   CLI_SUPPRESS_help_format_metavar_formatr`   r  validation_aliasenv_prefix_len_get_arg_names_convert_append_actionr.   _convert_positional_arg_convert_bool_flag_add_parser_submodelsr0   r   r   r@  r?  _add_parser_alias_paths)rE   r&  r   r9  r:  r;  r  r<  r=  rE  
subparsersrF  r   r   r   r  is_alias_path_onlypreferred_aliassubcommand_aliasr   r   subcommand_helpr  is_parser_submodelr>   	arg_namesrA   rL  rH   rD    s   




	

/


z"CliSettingsSource._add_parser_argsr  c                 C  s   | j r	|ddS |S )Nr  rr   )rf   r   )rE   r  rA   rA   rH   rO  ,  s   z#CliSettingsSource._check_kebab_namer  c                 C  s<   |rd|d< t |jttfddr|j| j|d < d S d S d S )Nr   actionTr   r6  )r1   r   r   r
   r   )rE   r>   r   r  rA   rA   rH   rV  1  s   z(CliSettingsSource._convert_append_actionc                 C  sD   |d dkr| j st|jv r t|jvr|d= t|d< d S d S d S d S )NrG  r=   rb  )rd   r-   r   r,   r   )rE   r>   r   r=  rA   rA   rH   rX  7  s   
z$CliSettingsSource._convert_bool_flagr]  tuple[list[str], str]c                 C  s~   d}|d g}t |d< | | |d< | o|t u }|ddkr/|d= |r*dnd|d	< n|s5d
|d	< |d= |d= ||fS )Nrq   r6  rT   rG  rb  r   +*nargs?r(  )r    rO  upperr  r   )rE   r>   r   r]  r=  r!  ra  r  rA   rA   rH   rW  ?  s   
z)CliSettingsSource._convert_positional_argr  tuple[str, ...]c           
   	   C  sf   g }|g| D ])}|D ]$}|  || jkr| | n
||dd | }	|	|vr/||	 qq|S )Nrq   r8   )rO  rw   r   r   )
rE   r:  r;  r<  r  r9  ra  prefixr  arg_namerA   rA   rH   rU  T  s   

z CliSettingsSource._get_arg_namesr   r!  ra  c                   s&  t |tr	tdd }i }|d  d|d< |j|d< |	d |d< tdd |D |d	< |d	 r:t|d
kr:td| jrUt|d
krU|d jd u rLd nt|d j|d< |t	urkt
t|sett|rjt||
}n|jt	urt|j}n|jd ur||j}|d u rd| j d}|d d urt| d|d  |d< n||d< |d }| |p|}| js||d  d|	d< d|	d< |rtnd|d  d |	d< |	d< | j|fi |}| j|gfdd|D R i |	 |D ]$}| j|||  | d||r|n| fdd|d
d  D ||d	 qd S )Nz8cannot have nested models in a CliMutuallyExclusiveGroupr   z optionsr,  ry   r(  c                 s  s    | ]}t |tV  qd S r   )rN  rP   )r   r   rA   rA   rH   r     s    

z:CliSettingsSource._add_parser_submodels.<locals>.<genexpr>r'  r8   z/cannot use union with CliMutuallyExclusiveGroupz	default: z (undefined)
rg  rf  r   constzset z from JSON string (default: {})rH  c                 3  s    | ]	}  | V  qd S r   rA   rK  rL  rA   rH   r     s    rs   c                   s   g | ]	}  | d qS )rs   rA   rK  )r:  rA   rH   r     s    z;CliSettingsSource._add_parser_submodels.<locals>.<listcomp>)	r&  r   r9  r:  r;  r  r<  r=  rE  )rN  rP   r'   ry   r   r   ra   r   r   r    r   r   r   getattrrT   default_factoryr\   _is_field_suppressedr_   r   rP  r@  r?  rD  )rE   r&  r   r   r9  r:  r;  r!  ra  r>   r   r   r  r=  rE  model_groupmodel_group_kwargsdesc_headerr]  rA   )r:  r!  rH   rY  h  sd   

$


&
z'CliSettingsSource._add_parser_submodelsrF  dict[str, str]c                 C  s  |r|}|d urt |tr| j|fi |n|}|d}|r%|d d n|}| D ]_\}	}
|r3dn|	}	|| jkr@| |	 n
||dd |	 }i }t|d< d|d< | |	 |d< |
d	ksc|rhd	|d
< nd|d< d|d
< ||vr|| | j	|| j
 | fi | q+d S d S )Nrs   r   rq   r8   rT   zpydantic alias pathrH  r6  r   rG  r   rb  r   )r   r   r@  r   r   rw   r   rP  r   r?  r   )rE   r&  rF  r9  r:  r;  r  contextis_nested_alias_pathr  rG  rk  r>   rA   rA   rH   rZ    s4   	 



z)CliSettingsSource._add_parser_alias_pathsobjc                 C  s$   | j st|S tdd t|D S )Nc                 S  r   r   r   r   rA   rA   rH   r     r   z8CliSettingsSource._get_modified_args.<locals>.<listcomp>)r]   r!   r   rE   rw  rA   rA   rH   _get_modified_args  s   z$CliSettingsSource._get_modified_argsobj_qualnamec                 C  sx   d|v r|d | dd  dd || dd d  D  }d|}|r.| d| dS t|dkr6|S d| d	S )
NJSONr8   c                 S  s   g | ]}|d kr|qS )r{  rA   r*  rA   rA   rH   r     s    z=CliSettingsSource._metavar_format_choices.<locals>.<listcomp>r   r   r   r   r   )indexr   r   )rE   r   rz  rG  rA   rA   rH   _metavar_format_choices  s   6
z)CliSettingsSource._metavar_format_choicesc                 C  sn  t |}t|rd|jv r|jS |jS |du rdS t|tr"t|S t|r+t	|S t
|}|du r@t|ttjtjfs@|j}t|rR| tt| j| |S t|rd| ttt	| |S t|trs| dd |D S t|tr| jtt| j| |t|dr|jdS t	|dS |tdu r| jS t|rd	S t|tr|jS t|d
dddS )z\Pretty metavar representation of a type. Adapts logic from `pydantic._repr.display_as_type`.z<locals>.z...Nc                 S  s   g | ]}|j qS rA   )r  )r   r   rA   rA   rH   r     s    z=CliSettingsSource._metavar_format_recurse.<locals>.<listcomp>rN   )rz  r{  ztyping.rq   ztyping_extensions.)r6   r5   rN   rL   r   r   reprr#   is_typealiastyperJ   r"   r   typing
ForwardReftyping_extensionsrG   r$   r}  r   map_metavar_format_recursery  
is_literalr(   r   r)   r.  r\   r   r   )rE   rw  originrA   rA   rH   r    s@   





z)CliSettingsSource._metavar_format_recursec                 C  s   |  |ddS )Nr  r   )r  r   rx  rA   rA   rH   rR    s   z!CliSettingsSource._metavar_formatc           	      C  s`  |j r|j nd}|s| |rtS | r9|td fv r9t|jvr8|d u r&dnd}||r1d| dnd| d7 }ngd| j d}tt	|sLt
t	|rVdt|| d}n?|td fvrjt|rjd| | d}n+|jtd fvrt|j|j}d|d u r|jn| d}n|jd urd| |j d}||rd	| n|7 }tt	| jtr|d
dS |S )Nrq   zifdef: z (z	required)(z
(default: )z(default factory:  %z%%)ry   rp  rP  r  r    r.   r   r\   r   r   r   rn  r5   rR  rT   r2   r   ro  rN  r  r   r   )	rE   r   r   r=  rE  _helpifdefrT   	enum_namerA   rA   rH   rQ    s(   
 
 zCliSettingsSource._help_formatc                 C  s"   |j r|j nd}|tkpt|jv S )Nrq   )ry   rP  r   )rE   r   r  rA   rA   rH   rp  '  s   z&CliSettingsSource._is_field_suppressed).rV   rW   rX   rY   rZ   r[   r\   rY   r]   r^   r_   r^   r`   r^   ra   r^   r<   r^   rb   rY   rc   rY   rd   r^   re   r^   rf   r^   rg   r^   rh   r   ri   rj   rk   rj   rl   rj   rm   rj   rn   rj   ro   r   r?   r@   )r?   r   )r   r   r?   r   )r}   r   r?   r   )r   r   r}   r   r?   r   )r?   r   )r}   r   r?   r   )r   r   r   rJ   r?   r   )r   r   r   rJ   r?   rJ   )r   rJ   r   r   r   r=   r?   rJ   )r   rJ   r   r   r?   rJ   )r   rJ   r   r   r   r   r?   rJ   )r   r   r   rJ   r   r   r?   r   )r   r   r   rJ   r   r   r?   r@   )r   r   r?   r   )r?   rQ   )
r  rj   r  rJ   r   r   r>   r   r?   r  )rl   rj   r?   r  )rh   rQ   ri   rj   rk   rj   rl   rj   rm   rj   rn   rj   ro   r   r?   r@   )F)r&  r   r   r   r9  r   r:  rJ   r;  rJ   r  r   r<  r   r=  r   rE  r=   r?   r   )r  rJ   r?   rJ   )r>   r   r   r   r  r=   r?   r@   )r>   r   r   r   r=  r   r?   r@   )
r>   r   r   r   r]  rJ   r=  r   r?   rc  )r:  rJ   r;  rJ   r<  r   r  ri  r9  r   r?   r   )r&  r   r   r   r   r   r9  r   r:  rJ   r;  rJ   r!  rJ   ra  r   r>   r   r   rJ   r   r   r  ri  r=  r   rE  r=   r?   r@   )r&  r   rF  rt  r9  r   r:  rJ   r;  rJ   r  r   r?   r@   )rw  r   r?   ri  r   )r   r   rz  rY   r?   rJ   )rw  r   r?   rJ   )
r   rJ   r   r   r=  r   rE  r=   r?   rJ   )r   r   r?   r=   )+rL   rM   rN   r   r   add_argumentr1  r   
add_parseradd_subparsersr   rC   r   r   r   r   r   r   r   r   r   r   r  propertyrh   r%  r3  r   rD  rO  rV  rX  rW  rU  rY  rZ  ry  r}  r  rR  rQ  rp  rO   rA   rA   rF   rH   rU   \   s    /{
,

-




-

&2 






L
#
	
%
rU   )_r   
__future__r   _annotationsr   r  r  r   r  argparser   r   r   r   r   r   collectionsr	   collections.abcr
   r   enumr   textwrapr   typesr   r   r   r   r   r   r   r   r   r   r   r   r  pydanticr   r   pydantic._internal._reprr   pydantic._internal._utilsr   pydantic.dataclassesr   pydantic.fieldsr   pydantic_corer    r!   r"   typing_inspectionr#   typing_inspection.introspectionr$   
exceptionsr'   utilsr(   r)   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   envr9   pydantic_settings.mainr:   r;   rP   rQ   CliSubCommandCliPositionalArgr=   rR   r   r   rP  CliSuppressr   rJ   CliUnknownArgsrU   rA   rA   rA   rH   <module>   sV     4 $	