o
    h                     @  s  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 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+m,Z,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl(m9Z9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlAmLZLmMZMmNZNmOZOmPZPmQZQmRZR ddlSmTZT erddlUmVZV G dd deZWG d d! d!e,ZXG d"d# d#e,ZYe$d$ZZee%eZdf eJf Z[eeZeIf Z\e$d%e]d&Z^ee^eHf Z_ee^eGf Z`e
ZaeeZeaf Zbeeced e-g d'eKeEf ZeG d(d) d)eTe!eZ ZfdS )*z'Command-line interface settings source.    )annotationsN)SUPPRESSArgumentParserBooleanOptionalAction	NamespaceRawDescriptionHelpFormatter_SubParsersAction)defaultdict)MappingSequence)Enum)cached_property)dedent)SimpleNamespace)TYPE_CHECKING	AnnotatedAnyCallableGenericNoReturnOptionalTypeVarUnioncastoverload)AliasChoices	AliasPath	BaseModelFieldPrivateAttr)Representation)is_model_class)is_pydantic_dataclass)	FieldInfo)PydanticUndefined)get_args
get_origin)typing_objects)is_union_origin   SettingsError)_lenient_issubclass_WithArgsTypes   )ForceDecodeNoDecodePydanticModel_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)selfrB   rD   	__class__rG   i/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/pydantic_settings/sources/providers/cli.pyrI   M   s   
z_CliInternalArgParser.__init__messagestrr   c                   s$   | j s
td| t | d S )Nzerror parsing CLI: )rJ   r+   rH   error)rK   rO   rL   rG   rN   rQ   Q   s   z_CliInternalArgParser.error)T)rB   rC   rD   r   rE   rF   )rO   rP   rE   r   )__name__
__module____qualname__rI   rQ   __classcell__rG   rG   rL   rN   rA   L   s    rA   c                   @  s   e Zd ZdS )CliMutuallyExclusiveGroupN)rR   rS   rT   rG   rG   rG   rN   rV   W   s    rV   c                      sv  e Zd ZU ded< ded< ded< ded< ded< ded	< d
ed< ded< g Zded< i Zded< edZded< ei Zded< edZ	ded< e Z
ded< dD fd!d"ZedEd$d%ZdFd(d)ZedGd*d+ZedHd-d.ZedId/d0ZedId1d2ZedJd4d5ZedKd6d7ZedLd8d9ZedId:d;ZedMd<d=ZedMd>d?ZedMd@dAZedMdBdCZ  ZS )N_CliArgr   modelrP   
field_name
arg_prefixrC   case_sensitivehide_none_type
kebab_caseOptional[bool]enable_decodingintenv_prefix_len	list[str]argsdict[str, Any]rD   rG   tuple[str, ...]_alias_namesdict[str, Optional[int]]_alias_pathsF_is_alias_path_onlyr#   _field_info
field_info
parser_map@defaultdict[str | FieldInfo, dict[Optional[int] | str, _CliArg]]valuesrE   rF   c           	        s  t  jdi | | _t j j j jd\ _ _	 fdd j
 D } jrQ jD ]!} |} jg i dd| j |< | j | | j |< q.n j|vri | j d < | j d  | j d < |
 D ]\}} jg i dd|| |< || | | j |< qmd S )N)alias_path_argsr[   c                   s    i | ]\}} j  | |qS rG   rZ   ).0nameindexrK   rG   rN   
<dictcomp>x        z$_CliArg.__init__.<locals>.<dictcomp>rc   rD   )updaterG   )rH   rI   rj   r9   rY   rk   rh   r[   rf   ri   itemssubcommand_dest
sub_modelssubcommand_alias
model_copydest)	rK   rk   rl   rn   alias_path_dests	sub_modelr|   alias_path_destrs   rL   rt   rN   rI   l   s&   


z_CliArg.__init__rr   c                 C  s   |r| ddS |S )N_-)replace)clsrr   r]   rG   rG   rN   get_kebab_case   s   z_CliArg.get_kebab_caser   type[BaseModel]c                 C  s*   |  t| jdkr|j| jS | j| jS )Nr>   )r   lenr{   rR   preferred_aliasr]   )rK   r   rG   rG   rN   r|      s
   z_CliArg.subcommand_aliasc                 C     | j S N)rj   rt   rG   rG   rN   rk         z_CliArg.field_infoOptional[str]c                 C  s   t | jjv r| j dS d S )N:subcommand)r5   rk   metadatarZ   rt   rG   rG   rN   rz      s   z_CliArg.subcommand_destc                 C  sH   | j s| jr| jjd ur| js| j | j | jd  S | j | j S r   )rz   rZ   rk   validation_aliasis_parser_submodelr   ra   rt   rG   rG   rN   r~      s   z_CliArg.destc                 C  s"   | j r| jd ddS | jd S )Nr   r   r   )r]   rc   r   rt   rG   rG   rN   preferred_arg_name   s   "z_CliArg.preferred_arg_namelist[type[BaseModel]]c                 C  s   t | jjs| jjfnt | jj}| jrtdd |D }g }|D ]?}t|tfddr8td| jj	 d| j
 t|tfddrMtd| jj	 d| j
 tt|sYtt|r`|t| q!|S )Nc                 S     g | ]
}|t d ur|qS r   typerq   type_rG   rG   rN   
<listcomp>       z&_CliArg.sub_models.<locals>.<listcomp>F)is_include_originz.CliSubCommand is not outermost annotation for .z1CliPositionalArg is not outermost annotation for )r%   rk   
annotationr\   tupler7   r5   r+   rX   rR   rY   r4   r!   r<   r"   append)rK   field_typesr{   r   rG   rG   rN   r{      s(   

z_CliArg.sub_modelsc                 C  r   r   rf   rt   rG   rG   rN   alias_names   r   z_CliArg.alias_namesc                 C  r   r   )rh   rt   rG   rG   rN   alias_paths   r   z_CliArg.alias_pathsc                 C  s
   | j d S )Nr   r   rt   rG   rG   rN   r      s   
z_CliArg.preferred_aliasc                 C  r   r   )ri   rt   rG   rG   rN   is_alias_path_only   r   z_CliArg.is_alias_path_onlyc                 C  s$   | j  ot| jjtttttfddS )NTis_strip_annotated)	rz   r7   rk   r   listsetdictr   r
   rt   rG   rG   rN   is_append_action   s   
z_CliArg.is_append_actionc                 C  s   | j  ot| jo| j S r   )rz   rC   r{   r   rt   rG   rG   rN   r      s   z_CliArg.is_parser_submodelc                 C  s,   | j d uot| j jv p| jdu ot| j jvS NF)rk   r0   r   r_   r/   rt   rG   rG   rN   is_no_decode   s   
z_CliArg.is_no_decode)rk   r#   rl   rm   rn   r   rE   rF   )rr   rP   r]   r^   rE   rP   )r   r   rE   rP   )rE   r#   )rE   r   )rE   rP   )rE   r   )rE   re   )rE   rg   )rE   rC   )rR   rS   rT   __annotations__rc   rD   r   rf   rh   ri   rj   rI   classmethodr   r|   r   rk   rz   r~   r   r{   r   r   r   r   r   r   r   rU   rG   rG   rL   rN   rW   [   sV   
 
rW   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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d0d fd4d(Zedd6d7Zedd8d7Zdd9dd;d7ZddBdCZddFdGZddIdJZddKdLZddOdPZddQdRZddUdVZdd[d\Zdd^d_ZeddadbZddgdhZddidjZejejejej	e
fddkdlZ	mdddwdxZddzd{Zdd|d}ZdddZ dddZ!dddZ"dddZ#dddZ$ddddZ%dddZ&dddZ'dddZ(dddZ)dddZ*dddd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`.
        cli_shortcuts: Mapping of target field name to alias names. Defaults to `None`.
        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_groupsrB   
cli_prefixcli_flag_prefix_charcli_implicit_flagscli_ignore_unknown_argscli_kebab_casecli_shortcuts$Mapping[str, str | list[str]] | Noner[   root_parserr   parse_args_methodCallable[..., Any] | Noneadd_argument_methodadd_argument_group_methodadd_parser_methodadd_subparsers_methodformatter_classrE   rF   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|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r]|du r?tjdd  }nt|ttfsPtdt | | j!| "| j#|d d S d S )Nr   r   r   Fr   TrF   nullr   r   rB   r    r   r   r.   r   z'CLI settings source prefix is invalid: r   r   r   r   zGCase-insensitive matching is only supported on the internal root parser)env_nested_delimiterenv_parse_none_strenv_parse_enums
env_prefixr[   )rB   progdescriptionr   prefix_charsallow_abbrev)r   r   r   r   r   r   r   r   r>   z<cli_parse_args must be a list or tuple of strings, received parsed_args)$model_configgetsysargvr   r   r   r   r   r   rB   r   r   _cli_flag_prefix
startswithendswithr   isidentifierr+   r   r   r   r   rH   rI   rA   __doc__r   _connect_root_parser
isinstancer   r   r   _load_env_vars_parse_argsr   )rK   r   r   r   r   r   r   r   r   rB   r   r   r   r   r   r   r[   r   r   r   r   r   r   r   rL   rG   rN   rI     s   $
	


zCliSettingsSource.__init__rd   c                 C     d S r   rG   rt   rG   rG   rN   __call__     zCliSettingsSource.__call__rc   "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.
        NrG   )rK   rc   rG   rG   rN   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.
        NrG   rK   r   rG   rG   rN   r        )rc   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   Tr>   )r+   r   r   r   r   r   rH   r   )rK   rc   r   rL   rG   rN   r     s   
Mapping[str, str | None]c                 C  r   r   rG   rt   rG   rG   rN   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.
        NrG   r   rG   rG   rN   r     r   r   /Mapping[str, str | None] | CliSettingsSource[T]c          	        s  |d u ri S t |ttfrt|}g }t| D ]E\}}t |trJ| |||r*q| j|i d }|rA|j	rAd
|||< q| ||||< q|dr^|d ur^|| j| | j q| j D ]#\}}t |tr|drdd | D D ]}||vr| j||< q{qddd | D }|rt|td t fdd	| D sd
| < || j tttttf || j| j| j| _| S )N,r   c                 S     g | ]}|j qS rG   )r~   rq   argrG   rG   rN   r          z4CliSettingsSource._load_env_vars.<locals>.<listcomp>c                 S  s(   i | ]\}}| d s|tur||qS )r   )r   r$   )rq   keyvalrG   rG   rN   ru     s    z4CliSettingsSource._load_env_vars.<locals>.<dictcomp>)r   c                 3  s"    | ]}  d |v r|V  qdS )r   NrG   )rq   rY   last_selected_subcommandrG   rN   	<genexpr>  s     z3CliSettingsSource._load_env_vars.<locals>.<genexpr>{})r   r   r   varsr   ry   %_is_nested_alias_path_only_workaround_parser_mapr   r   join_merge_parsed_listr   r   r~   rP   rn   r   maxr   anykeysrx   _cli_unknown_argsr=   r   r
   r[   env_ignore_emptyenv_vars)	rK   r   selected_subcommandsrY   r   cli_argarg_destarg_maprz   rG   r   rN   r     sL   


dict[str, list[str] | str]rY   rP   r   rb   rC   c                 C  s   | j |i  }|sdS tt|}|jrO|jdrO||= |jdd }d|j d| 	|| }||vr=d| dn|| dd  d	| d||< d
S dS )z
        Workaround for nested alias path environment variables not being handled.
        See https://github.com/pydantic/pydantic-settings/issues/670
        Fr   N"z": {}, T)
r  r   rn   nextiterr   rZ   r   r   r  )rK   r   rY   r   	known_argr   nested_dest
nested_valrG   rG   rN   r    s   z7CliSettingsSource._is_nested_alias_path_only_workaroundparsed_list%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&   r   r
   r   rG   rG   rN   r   7  s    zACliSettingsSource._get_merge_parsed_list_types.<locals>.<genexpr>r>   r   [)
_cli_dict_argsr   r   r(   r&   r  r%   r   r   rP   )rK   r  rY   
merge_typeinferred_typerG   rG   rN   _get_merge_parsed_list_types0  s   
&z.CliSettingsSource._get_merge_parsed_list_typesmerged_listc                 C  s   g }d }| j |i }t|D ]>\}}||}|d u p|j }	|d u r'|	}n||	kr/td|r8|dd}n|drH|drH|dd }|| qd	|}
|r[d|
 d	S |
S )
NzKMixing Decode and NoDecode across different AliasPath fields is not allowed\z\\r  r>   r  r   r  ])
r  r   	enumerater   r+   r   r   r   r   r  )rK   r"  rY   decode_listis_use_decodecli_arg_maprs   itemr  	is_decodemerged_list_strrG   rG   rN   _merged_list_to_strC  s"   

z%CliSettingsSource._merged_list_to_strc                 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 r| ||W S i }	|D ]
}
|	t|
 qt|	W S  ty } z
td
| d| d }~ww )NFr  r$  r>   r  r   r  Tr   zParsing error encountered for z: )r!  r   rP   stripr   r   _consume_comma_consume_object_or_array_consume_string_or_number
ValueErrorr   r,  rx   jsonloadsdumps	Exceptionr+   )rK   r  rY   r"  is_last_consumed_a_valuer  r   r   emerged_dictr)  rG   rG   rN   r  V  sV   


z$CliSettingsSource._merge_parsed_listr)  r6  c                 C  s   |s| d |dd  S )Nz""r>   )r   )rK   r)  r"  r6  rG   rG   rN   r.    s   
z CliSettingsSource._consume_commac                 C  s   d}| dr	dnd}d}tdt|D ]K}|| dkr(||d  dkr(| }q|r+q|| dv r6|d7 }q|| d	v r_|d8 }|| |kr_|d
kr_||d |d   ||d d    S qtd| d)Nr>   r  r  r$  Fr  r#  )r  r  )r  r$  r   zMissing end delimiter ")r   ranger   r   r+   )rK   r)  r"  countclose_delimin_strconsumedrG   rG   rN   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  r>   r#  r   zMismatched quotesr   )truefalser   c                 s  s    | ]}|V  qd S r   rG   )rq   kvrG   rG   rN   r     s    z>CliSettingsSource._consume_string_or_number.<locals>.<genexpr>=z1Dictionary key=val parameter is a quoted string: )rP   r   r+   r-  r   floatr1  r   r   r   splitr   r2  r4  )	rK   r)  r"  r  r=  is_find_end_quote
val_stringr   r   rG   rG   rN   r0    s:   $
(z+CliSettingsSource._consume_string_or_numberrX   r   rk   r#   c                 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 r   z is not of type bool)r3   r   r2   r   rC   r+   rR   )rK   rX   rY   rk   cli_flag_namerG   rG   rN   _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 r   z has a default valuer>   z has multiple aliasesc                 S  r   r   r   r   rG   rG   rN   r     r   z6CliSettingsSource._sort_arg_fields.<locals>.<listcomp>z$ has type not derived from BaseModelzpositional argument Tr   r  c                 S     g | ]\}}|qS rG   rG   rq   rr   inforG   rG   rN   r         z- has multiple variadic positional arguments: c                 S  rL  rG   rG   rM  rG   rG   rN   r     rO  z= has variadic positional arguments and subcommand arguments: )r:   ry   r5   r   is_requiredr+   rR   r9   r   r%   r   r!   r"   r   r4   r7   r   r   r   r   r
   rJ  r  )rK   rX   positional_variadic_argpositional_argssubcommand_argsoptional_argsrY   rk   r   r   r   
field_typer   field_namesrG   rG   rN   _sort_arg_fields  sN   

z"CliSettingsSource._sort_arg_fieldsr   c                 C  r   )z#The connected root parser instance.)_root_parserrt   rG   rG   rN   r     s   zCliSettingsSource.root_parserparser_methodmethod_namerD   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 )NFr   r   rA   rc   "list[str] | tuple[str, ...] | None	namespaceNamespace | NonerE   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=]+)(.*)r>   r.   )	shlexrD  r  r   rematchgrouplowerr   )r   rc   r]  insensitive_argsr   flag_prefixmatched)rY  rK   rG   rN   parse_args_insensitive_method  s   zOCliSettingsSource._connect_parser_method.<locals>.parse_args_insensitive_methodrD   c                    s   t d  d)Nz0cannot connect CLI settings source root parser: z. is set to `None` but is needed for connectingr*   rw   )rZ  rG   rN   none_parser_method  s   
zDCliSettingsSource._connect_parser_method.<locals>.none_parser_method)NN)r   rA   rc   r\  r]  r^  rE   r   )rc   r   rD   r   rE   r   )r[   r   rX  rA   )rK   rY  rZ  rc   rD   rg  rh  rG   )rZ  rY  rK   rN   _connect_parser_method  s   

z(CliSettingsSource._connect_parser_methodc                   s   |  |d d fdd}|S )	Nr   parserr   rD   rE   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 rG   )popr   rD   rG   rN   ru   "  rv   zUCliSettingsSource._connect_group_method.<locals>.add_group_method.<locals>.<dictcomp>)titler   ro  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 connectingrG   )rm  hasattrr+   rp  )rj  rD   main_group_kwargsrb  add_argument_grouprn  rN   add_group_method  s   


zACliSettingsSource._connect_group_method.<locals>.add_group_method)rj  r   rD   r   rE   r   )ri  )rK   r   ru  rG   rs  rN   _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 )Nrc   r   rD   rE   r   c                    s4   t j| i |\} } jD ]}| j|< qtt| S r   )r   parse_known_argsr	  r   r   )rc   rD   unknown_argsr~   rt   rG   rN   _parse_known_args:  s   

zACliSettingsSource._connect_root_parser.<locals>._parse_known_argsr   r   r   r   rj  rX   
added_argsrZ   subcommand_prefixrb  alias_prefixesmodel_default)rc   r   rD   r   rE   r   )r	  rX  r   r   
parse_argsri  r   _add_argumentrv  
_add_group_add_parser_add_subparsers_formatter_classr  r	   r   r  _add_parser_argsr   r   r   r$   )	rK   r   r   r   r   r   r   r   ry  rG   rt   rN   r   .  s.   


z&CliSettingsSource._connect_root_parserFrj  r{  rZ   r|  rb  r}  r~  is_model_suppressedr   c
                   s  d }
i }t t|stt|rtt||sd n|}| |D ]\}}t|| j|||| j| j| j	| j
d| jd
}||j |jr|jD ]}||}| j|j | }|g|_d|jd< | j|jd< |jd u rmd nt|j|jd< t|jdkr~d n|j|jd< | jr|jd u rd nt|j|jd< |
d u r| j|d	| d
t|jdkr|jnd dn|
}
t|
dr|
jr|
jd d  d| dnd| d|
_| j| j|
g|jR i |j|g |j d| |j  dd g t!d qHq | j" |j|jd< t#|jd< | $||||	|jd< | %|j&|jd< | j'o!|( o!|t!u |jd< | )||||j*|}|r:|jd |v r;q | +|j||j, t-|j.v rV| /|j||j |\} | 0|j|| |j1rt2|j&dds| j3|||j||| ||j|||j*||	d q t4|j.v rg | j5|jd < q |j6st7|t8r| j9|fi |}|d u r|n|} fdd|D |_| j:|g|jR i |j |t;|7 }q | <|||||| |S )Nr_   )
rk   rl   rX   rY   rZ   r[   r\   r]   r_   ra   Fr   r   r   r>   helpsubcommandsr   )ro  r~   r   metavarr  r   r  r  r   rz  r~   r   rl  __pydantic_root_model__)r~  r  c                   s$   g | ]} d t |  | qS r   )r   rq   rr   re  rG   rN   r        $ z6CliSettingsSource._add_parser_args.<locals>.<listcomp>)=r!   r   r"   
issubclassrW  rW   r  r[   r   r   configr   ra   rx   r   rz   r{   r|   rc   rD   r  r   r   r   r   r   r  rq  r  r  r  r~   r   r$   r   CLI_SUPPRESS_help_format_metavar_formatr   r   rP  _get_arg_namesr   _convert_append_actionr   r4   r   _convert_positional_arg_convert_bool_flagr   getattr_add_parser_submodelsr6   r	  r   r   r   r  r  r   _add_parser_alias_paths)rK   rj  rX   r{  rZ   r|  rb  r}  r~  r  
subparsersro   rY   rk   r   r   r|   subcommand_arg	arg_namescontextrG   r  rN   r  V  s   





	


*
z"CliSettingsSource._add_parser_argsr   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   r~   )r7   r   r   r
   r  )rK   rD   rk   r   rG   rG   rN   r    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 )Nr  rC   r  )r   r3   r   r2   r   )rK   rD   rk   r~  rG   rG   rN   r    s   
z$CliSettingsSource._convert_bool_flagr   tuple[list[str], str]c                 C  s   d}|d g}t |d< t| | j|d< | o|t u }|ddkr1|d= |r,dnd|d	< n|s7d
|d	< |d= |d= ||fS )Nr   r~   r   r  r  r   +*nargs?rl  )r$   rW   r   upperr   rP  r   )rK   rD   rk   r   r~  re  r  rP  rG   rG   rN   r    s   
z)CliSettingsSource._convert_positional_argr   re   c              	     s   g }|g| D ]+}|D ]&}t || jkr| | n
||dd | | j}	|	 vr1||	 qq| jrZ| j D ]\}
}|
|v rYt|t	rK|gn|}|
 fdd|D  q;|S )Nr   r>   c                 3  s    | ]	}| vr|V  qd S r   rG   rq   aliasr{  rG   rN   r         z3CliSettingsSource._get_arg_names.<locals>.<genexpr>)rW   r   r   r   r   r   r   ry   r   rP   extend)rK   rZ   r|  r}  r   r{  r  prefixrr   arg_nametargetaliases
alias_listrG   r  rN   r     s(   


z CliSettingsSource._get_arg_namesr{   r   re  r  c                   s4  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|}|rt|d< | js||d  d|	d< d|	d< d|	d< |rtn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 optionsro  r   rl  c                 s  s    | ]}t |tV  qd S r   )r  rV   )rq   rX   rG   rG   rN   r   9  s    

z:CliSettingsSource._add_parser_submodels.<locals>.<genexpr>rk  r>   z/cannot use union with CliMutuallyExclusiveGroupz	default: z (undefined)
Fr  r  r   constzset z from JSON string (default: {})r  c                 3  s    | ]	}  | V  qd S r   rG   r  r  rG   rN   r   ]  r  r   c                   s   g | ]	}  | d qS )r   rG   r  rp   rG   rN   r   f  s    z;CliSettingsSource._add_parser_submodels.<locals>.<listcomp>)	rj  rX   r{  rZ   r|  rb  r}  r~  r  )r  rV   r+   r   r  r   r   r   r   r$   r!   r   r"   r  r   default_factoryr   _is_field_suppressedr  r   r   r  r  r  )rK   rj  rX   r{   r{  rZ   r|  re  r  rD   rY   rk   r   r~  r  model_groupmodel_group_kwargsdesc_headerr   rG   )rZ   re  rN   r    sj   

$


&z'CliSettingsSource._add_parser_submodelsro   rg   c                 C  s  |r|}|d urt |tr| j|fi |n|}| D ]g\}}	|| jkr+| | n
||dd | }
i }t|d< d|d< d|d< d|d	< |	d u rUd
|d	< t| j|
< | j |
 g}| j	|
  D ]\}}|||_
|_qd| j|g|R i | ||
 qd S d S )Nr   r>   r   zpydantic alias pathr  r   r  r   r  r   )r   r   r  ry   r   r   r  r  r   r  rc   rD   r  r   )rK   rj  ro   r{  rZ   r|  rb  r  rr   rs   r  rD   rc   r   r   rG   rG   rN   r  k  s0   	 

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   rG   rG   rN   r     r   z8CliSettingsSource._get_modified_args.<locals>.<listcomp>)r   r%   r   rK   r  rG   rG   rN   _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JSONr>   c                 S  s   g | ]}|d kr|qS )r  rG   r   rG   rG   rN   r     s    z=CliSettingsSource._metavar_format_choices.<locals>.<listcomp>r   r  r$  r  r  )rs   r  r   )rK   rc   r  r  rG   rG   rN   _metavar_format_choices  s   6
z)CliSettingsSource._metavar_format_choicesc                 C  s  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|st|rt|d	d
r| t|d j S d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  r   rG   )rr   )rq   r   rG   rG   rN   r     r   z=CliSettingsSource._metavar_format_recurse.<locals>.<listcomp>rT   )r  r  Frootr  ztyping.r   ztyping_extensions.)"r<   r;   rT   rR   r   r    reprr'   is_typealiastyperP   r&   r   typing
ForwardReftyping_extensionsrM   r(   r  r   map_metavar_format_recurser  
is_literalr,   r   r-   rq  r   r!   r"   r  r:   r   r   )rK   r  originrG   rG   rN   r    sH   






z)CliSettingsSource._metavar_format_recursec                 C  s   |  |ddS )Nr  r   )r  r   r  rG   rG   rN   r    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 )Nr   zifdef: z (z	required)(z
(default: )z(default factory:  %z%%)r   r  r  rP  r$   r4   r   r   r!   r   r"   r  r;   r  r   r8   r   r  r  rX  r   r   )	rK   rY   rk   r~  r  _helpifdefr   	enum_namerG   rG   rN   r    s(   
 
 zCliSettingsSource._help_formatc                 C  s"   |j r|j nd}|tkpt|jv S )Nr   )r   r  r   )rK   rk   r  rG   rG   rN   r    s   z&CliSettingsSource._is_field_suppressedr  valuealias_path_only_defaultslist[Any] | dict[str, Any]c                 C  s   dd |j |jfD d }|jdd }|s!||g  || }n+||i  || }|d d D ]}	||	i  ||	 }q1||d g  ||d  }tt|jd }
|dgt|
d t| d  |||
< || S )Nc                 S  s8   g | ]}t |ttfrt |tr|ntt|jd  qS )r   )r   r   r   r   choicesr  rG   rG   rN   r     s    zECliSettingsSource._update_alias_path_only_default.<locals>.<listcomp>r   r>   r  r   )	r  r   path
setdefaultr   r`   r  r  r   )rK   r  r  rk   r  
alias_pathalias_nested_pathsalias_defaultcurrent_pathnested_pathalias_path_indexrG   rG   rN   _update_alias_path_only_default  s(   


"z1CliSettingsSource._update_alias_path_only_defaultr1   _is_submodelc                 C  s  i }g }g }g }t |rt|n| j D ]\}}t||}	|j|	kr$qt|jv r.|	d u r.qtt	| j
|  }
|
jrP||
t|	 || j|	dd7 }qtt|	s\tt|	rf|| j|	dd7 }qtd|
j}|rs| nd\}}t|	tttfrt|	nt|	}|
jr| ||||}t|jv rt|	tr|	n|	gD ]}t|tttfrt|nt|}|| qq|
j !dt"kr|	du r|dkr|d7 }|| |  |
j !dt"kr|| qg }|d	d
 |D 7 }|dd
 |D 7 }|| S )NT)r  z(-*)(.+))r   r   r  Fz--zno-c                 S  $   g | ]}t |tst|n|qS rG   r   rP   r2  r4  rq   r  rG   rG   rN   r   1  r  z6CliSettingsSource._serialized_args.<locals>.<listcomp>c                 S  r  rG   r  r  rG   rG   rN   r   2  r  )#r:   r   r   ry   r  r   r5   r   r  r  r  rn   rz   r   r|   _serialized_argsr!   r"   r`  ra  r   groupsr   r   r   r   r2  r4  rP   r   r  r4   rD   r   r   )rK   rX   r  r  rT  rR  rS  rY   rk   r~  r   rf  
flag_charsr  r  serialized_argsrG   rG   rN   r     sN   "

 
" 
z"CliSettingsSource._serialized_args)0r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rB   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   r   rE   rF   )rE   rd   )rc   r   rE   r   )r   r   rE   r   )rc   r   r   r   rE   r   )rE   r   )r   r   rE   r   )r   r  rY   rP   r   rb   rE   rC   )r  rb   rY   rP   rE   r  )r"  rb   rY   rP   rE   rP   )r  rb   rY   rP   rE   rP   )r)  rP   r"  rb   r6  rC   rE   rP   )r)  rP   r"  rb   rE   rP   )r)  rP   r"  rb   r  r>  rE   rP   )rX   r   rY   rP   rk   r#   rE   rF   )rX   r   rE   rK  )rE   r   )
rY  r   rZ  rP   rc   r   rD   r   rE   r[  )r   r   rE   r[  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rE   rF   )F)rj  r   rX   r   r{  rb   rZ   rP   r|  rP   rb  r   r}  rb   r~  r   r  rC   rE   r   )rD   rd   rk   r#   r   rC   rE   rF   )rD   rd   rk   r#   r~  r   rE   rF   )
rD   rd   rk   r#   r   rP   r~  r   rE   r  )rZ   rP   r|  rP   r}  rb   r   re   r{  rb   rE   rb   )rj  r   rX   r   r{   r   r{  rb   rZ   rP   r|  rP   re  rP   r  rb   rD   rd   rY   rP   rk   r#   r   re   r~  r   r  rC   rE   rF   )rj  r   ro   rg   r{  rb   rZ   rP   r|  rP   rb  r   rE   rF   )r  r   rE   re   r   )rc   rb   r  r   rE   rP   )r  r   rE   rP   )
rY   rP   rk   r#   r~  r   r  rC   rE   rP   )rk   r#   rE   rC   )
r  rP   r  r   rk   r#   r  rd   rE   r  )rX   r1   r  rC   rE   rb   )-rR   rS   rT   r   r   add_argumentrt  r   
add_parseradd_subparsersr   rI   r   r   r   r  r!  r,  r  r.  r/  r0  rJ  rW  propertyr   ri  rv  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rU   rG   rG   rL   rN   r      s    0
5



-



-

&2 





O
!
	
)


r   )gr   
__future__r   _annotationsr2  r`  r_  r   r  argparser   r   r   r   r   r   collectionsr	   collections.abcr
   r   enumr   	functoolsr   textwrapr   typesr   r   r   r   r   r   r   r   r   r   r   r   r  pydanticr   r   r   r   r   pydantic._internal._reprr    pydantic._internal._utilsr!   pydantic.dataclassesr"   pydantic.fieldsr#   pydantic_corer$   r%   r&   typing_inspectionr'   typing_inspection.introspectionr(   
exceptionsr+   utilsr,   r-   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   envr?   pydantic_settings.mainr@   rA   rV   rW   r   CliSubCommandCliPositionalArgrC   r   rG  rH  r  CliSuppressr   rP   CliUnknownArgsr   rG   rG   rG   rN   <module>   s\     4($
	 