o
    i:                     @  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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l0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZAmBZB ddlmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ ddl@mKZKmLZLmMZMmNZNmOZOmPZPmQZQ ddlRmSZS erddlTmUZU G dd deZVG dd  d e-ZWG d!d" d"e-ZXe$d#ZYeeYdB eIf ZZeeYeHf Z[e$d$e\d%Z]ee]eGf Z^ee]eFf Z_e
Z`eeYe`f Zaeebec e.g d&eJeDf ZdG d'd( d(eSe!eY ZedS ))z'Command-line interface settings source.    )annotationsN)SUPPRESSArgumentParserBooleanOptionalAction	NamespaceRawDescriptionHelpFormatter_SubParsersAction)defaultdict)CallableMappingSequence)Enum)cached_property)dedent)SimpleNamespace)TYPE_CHECKING	AnnotatedAnyGenericLiteralNoReturnTypeVarcastget_args
get_originoverload)AliasChoices	AliasPath	BaseModelFieldPrivateAttr)Representation)is_model_class)is_pydantic_dataclass)	FieldInfo)PydanticUndefined)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)selfrA   rC   	__class__rF   m/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_settings/sources/providers/cli.pyrH   L   s   
z_CliInternalArgParser.__init__messagestrr   c                   s$   | j s
td| t | d S )Nzerror parsing CLI: )rI   r*   rG   error)rJ   rN   rK   rF   rM   rP   P   s   z_CliInternalArgParser.error)T)rA   rB   rC   r   rD   rE   )rN   rO   rD   r   )__name__
__module____qualname__rH   rP   __classcell__rF   rF   rK   rM   r@   K   s    r@   c                   @  s   e Zd ZdS )CliMutuallyExclusiveGroupN)rQ   rR   rS   rF   rF   rF   rM   rU   V   s    rU   c                      s  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< dI fd"d#ZedJd%d&ZedKd)d*ZdLd-d.ZedMd/d0ZedNd2d3ZedOd4d5ZedOd6d7ZedPd9d:ZedQd;d<ZedRd=d>ZedOd?d@ZedSdAdBZedSdCdDZedSdEdFZedSdGdHZ  ZS )T_CliArgr   modelrO   
field_name
arg_prefixrB   case_sensitivehide_none_type(bool | Literal['all', 'no_enums'] | None
kebab_casebool | Noneenable_decodingintenv_prefix_len	list[str]argsdict[str, Any]rC   rF   tuple[str, ...]_alias_namesdict[str, int | None]_alias_pathsF_is_alias_path_onlyr$   _field_info
field_info
parser_map=defaultdict[str | FieldInfo, dict[int | None | str, _CliArg]]valuesrD   rE   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_argsrZ   c                   s    i | ]\}} j  | |qS rF   rY   ).0nameindexrJ   rF   rM   
<dictcomp>w        z$_CliArg.__init__.<locals>.<dictcomp>rc   rC   )updaterF   )rG   rH   rj   r8   rX   rk   rh   rZ   rf   ri   itemssubcommand_dest
sub_modelssubcommand_alias
model_copydest)	rJ   rk   rl   rn   alias_path_dests	sub_modelr|   alias_path_destrs   rK   rt   rM   rH   k   s&   


z_CliArg.__init__rr   c                 C  s   |dvr
| ddS |S )NNF_-)replace)clsrr   r]   rF   rF   rM   get_kebab_case   s   z_CliArg.get_kebab_case
annotation	type[Any]c                   sX   d}t |}t|D ]
}| |7 }q
|r*t|tr*|t fdd|D 7 }|S )NrF   c                 3  s"    | ]}  |jd kV  qdS )allN)r   rr   rq   valr   r]   rF   rM   	<genexpr>        z)_CliArg.get_enum_names.<locals>.<genexpr>)r;   r   get_enum_namesr+   r   tuple)r   r   r]   
enum_namestype_rF   r   rM   r      s   z_CliArg.get_enum_namesr   type[BaseModel]c                 C  s*   |  t| jdkr|j| jS | j| jS )Nr=   )r   lenr{   rQ   preferred_aliasr]   )rJ   r   rF   rF   rM   r|      s
   z_CliArg.subcommand_aliasc                 C     | j S N)rj   rt   rF   rF   rM   rk         z_CliArg.field_info
str | Nonec                 C  s   t | jjv r| j dS d S )N:subcommand)r4   rk   metadatarY   rt   rF   rF   rM   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   rY   rk   validation_aliasis_parser_submodelr   ra   rt   rF   rF   rM   r~      s   z_CliArg.destc                 C  s"   | j r| jd ddS | jd S )Nr   r   r   )r]   rc   r   rt   rF   rF   rM   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   r   rF   rF   rM   
<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   r   r[   r   r6   r4   r*   rW   rQ   rX   r3   r"   r;   r#   append)rJ   field_typesr{   r   rF   rF   rM   r{      s(   

z_CliArg.sub_modelsc                 C  r   r   rf   rt   rF   rF   rM   alias_names   r   z_CliArg.alias_namesc                 C  r   r   )rh   rt   rF   rF   rM   alias_paths   r   z_CliArg.alias_pathsc                 C  s
   | j d S )Nr   r   rt   rF   rF   rM   r      s   
z_CliArg.preferred_aliasc                 C  r   r   )ri   rt   rF   rF   rM   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   r6   rk   r   listsetdictr   r   rt   rF   rF   rM   is_append_action   s   
z_CliArg.is_append_actionc                 C  s   | j  ot| jo| j S r   )rz   rB   r{   r   rt   rF   rF   rM   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 r   )rk   r/   r   r_   r.   rt   rF   rF   rM   is_no_decode   s   
z_CliArg.is_no_decode)rk   r$   rl   rm   rn   r   rD   rE   )rr   rO   r]   r\   rD   rO   )r   r   r]   r\   rD   re   )r   r   rD   rO   )rD   r$   )rD   r   )rD   rO   )rD   r   )rD   re   )rD   rg   )rD   rB   )rQ   rR   rS   __annotations__rc   rC   r    rf   rh   ri   rj   rH   classmethodr   r   r|   r   rk   rz   r~   r   r{   r   r   r   r   r   r   r   rT   rF   rF   rK   rM   rV   Z   sZ   
 
rV   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dd0d)Zddd1d fd5d)Zedd7d8Zedd9d8Zdd:dd<d8Zdd?d@ZddEdFZddIdJZddLdMZddNdOZddRdSZddTdUZddXdYZdd^d_ZddadbZeddddeZddjdkZddldmZejejejej	e
fddndoZ	pdddzd{Zdd}d~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_namer   cli_parse_args)bool | list[str] | tuple[str, ...] | Nonecli_parse_none_strcli_hide_none_typer^   cli_avoid_jsoncli_enforce_requiredcli_use_class_docs_for_groupsrA   
cli_prefixcli_flag_prefix_charcli_implicit_flagscli_ignore_unknown_argscli_kebab_caser\   cli_shortcuts$Mapping[str, str | list[str]] | NonerZ   root_parserr   parse_args_methodCallable[..., Any] | Noneadd_argument_methodadd_argument_group_methodadd_parser_methodadd_subparsers_methodformatter_classrD   rE   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   TrE   nullr   r   rA   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_prefixrZ   )rA   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   rA   r   r   _cli_flag_prefix
startswithendswithr   isidentifierr*   r   r   r   r   rG   rH   r@   __doc__r   _connect_root_parser
isinstancer   r   r   _load_env_vars_parse_argsr   )rJ   r   r   r   r   r   r   r   r   rA   r   r   r   r   r   r   rZ   r   r   r   r   r   r   r   rK   rF   rM   rH   %  s   $
	


zCliSettingsSource.__init__rd   c                 C     d S r   rF   rt   rF   rF   rM   __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.
        NrF   )rJ   rc   rF   rF   rM   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.
        NrF   rJ   r   rF   rF   rM   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   rG   r   )rJ   rc   r   rK   rF   rM   r     s   
Mapping[str, str | None]c                 C  r   r   rF   rt   rF   rF   rM   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.
        NrF   r   rF   rF   rM   r     r   r   /Mapping[str, str | None] | CliSettingsSource[T]c                  s   |d u ri S t |ttfrt|}| |}| j D ]#\}}t |tr>|dr>dd |	 D D ]}||vr=| j
||< q2qdd | D }|rat|td t fdd| D sad	| < || j tttttf || j| j| j
| _| S )
Nr   c                 S  s   g | ]}|j qS rF   )r~   rq   argrF   rF   rM   r     s    z4CliSettingsSource._load_env_vars.<locals>.<listcomp>c                 S  s(   i | ]\}}| d s|tur||qS )r   )r   r%   )rq   keyr   rF   rF   rM   ru     s    z4CliSettingsSource._load_env_vars.<locals>.<dictcomp>)r   c                 3  s"    | ]}  d |v r|V  qdS )r   NrF   )rq   rX   last_selected_subcommandrF   rM   r     r   z3CliSettingsSource._load_env_vars.<locals>.<genexpr>{})r   r   r   vars_resolve_parsed_args_parser_mapry   rO   r   rn   r   maxr   anykeysrx   _cli_unknown_argsr<   r   r   rZ   env_ignore_emptyenv_vars)rJ   r   selected_subcommandsarg_destarg_maprz   rF   r   rM   r     s4   

dict[str, list[str] | str]rb   c                 C  s  g }t | D ]\}}t|t r9| |||rq| j|i d }|r0|jr0d|||< q| ||||< q|	drN|d urN|
| j| | j q| jdkr|dd}| j|i d }|r|jjr|||jjdv rd|v rtd|dd d| d	|||< q|S )
N,r   r   r   r   FzInput should be kebab-case "z", not "")r   ry   r   %_is_nested_alias_path_only_workaroundr  r   r   join_merge_parsed_listr   r   r~   r   r   rk   r   r   
ValueError)rJ   r   r  rX   r   cli_arg	snake_valrF   rF   rM   r    s2   


z&CliSettingsSource._resolve_parsed_argsrX   rO   r   rB   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   Nr  z": {}, T)
r  r   rn   nextiterr   rY   r   r   r  )rJ   r   rX   r   	known_argr   nested_dest
nested_valrF   rF   rM   r  3  s   z7CliSettingsSource._is_nested_alias_path_only_workaroundparsed_listtuple[type | None, type | None]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   rF   rF   rM   r   O  s    zACliSettingsSource._get_merge_parsed_list_types.<locals>.<genexpr>r=   r   [)
_cli_dict_argsr   r   r'   r   r  r   r   r   rO   )rJ   r!  rX   
merge_typeinferred_typerF   rF   rM   _get_merge_parsed_list_typesJ  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  )rJ   r(  rX   decode_listis_use_decodecli_arg_maprs   itemr  	is_decodemerged_list_strrF   rF   rM   _merged_list_to_str[  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   rO   stripr   r   _consume_comma_consume_object_or_array_consume_string_or_numberr  r   r2  rx   jsonloadsdumps	Exceptionr*   )rJ   r!  rX   r(  is_last_consumed_a_valuer%  r&  r   emerged_dictr/  rF   rF   rM   r  n  sV   


z$CliSettingsSource._merge_parsed_listr/  r;  c                 C  s   |s| d |dd  S )Nz""r=   )r   )rJ   r/  r(  r;  rF   rF   rM   r4    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*   )rJ   r/  r(  countclose_delimin_strconsumedrF   rF   rM   r5    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   rF   )rq   kvrF   rF   rM   r     s    z>CliSettingsSource._consume_string_or_number.<locals>.<genexpr>=z1Dictionary key=val parameter is a quoted string: )rO   r   r*   r3  r   floatr  r   r   r   splitr   r7  r9  )	rJ   r/  r(  r%  rB  is_find_end_quote
val_stringr   r   rF   rF   rM   r6    s:   $
(z+CliSettingsSource._consume_string_or_numberrW   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)r2   r   r1   r   rB   r*   rQ   )rJ   rW   rX   rk   cli_flag_namerF   rF   rM   _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   rF   rF   rM   r     r   z6CliSettingsSource._sort_arg_fields.<locals>.<listcomp>z$ has type not derived from BaseModelzpositional argument Tr   r  c                 S     g | ]\}}|qS rF   rF   rq   rr   inforF   rF   rM   r         z- has multiple variadic positional arguments: c                 S  rQ  rF   rF   rR  rF   rF   rM   r      rT  z= has variadic positional arguments and subcommand arguments: )r9   ry   r4   r   is_requiredr*   rQ   r8   r   r   r   r"   r#   r   r3   r6   r   r   r   r   r   rO  r  )rJ   rW   positional_variadic_argpositional_argssubcommand_argsoptional_argsrX   rk   r   r   r   
field_typer   field_namesrF   rF   rM   _sort_arg_fields  sN   

z"CliSettingsSource._sort_arg_fieldsr   c                 C  r   )z#The connected root parser instance.)_root_parserrt   rF   rF   rM   r     s   zCliSettingsSource.root_parserparser_methodmethod_namerC   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   r@   rc   "list[str] | tuple[str, ...] | None	namespaceNamespace | NonerD   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-   )	shlexrI  r  r   rematchgrouplowerr   )r   rc   rb  insensitive_argsr   flag_prefixmatched)r^  rJ   rF   rM   parse_args_insensitive_method  s   zOCliSettingsSource._connect_parser_method.<locals>.parse_args_insensitive_methodrC   c                    s   t d  d)Nz0cannot connect CLI settings source root parser: z. is set to `None` but is needed for connectingr)   rw   )r_  rF   rM   none_parser_method(  s   
zDCliSettingsSource._connect_parser_method.<locals>.none_parser_method)NN)r   r@   rc   ra  rb  rc  rD   r   )rc   r   rC   r   rD   r   )rZ   r   r]  r@   )rJ   r^  r_  rc   rC   rl  rm  rF   )r_  r^  rJ   rM   _connect_parser_method  s   

z(CliSettingsSource._connect_parser_methodc                   s   |  |d d fdd}|S )	Nr   parserr   rC   rD   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 rF   )popr   rC   rF   rM   ru   :  rv   zUCliSettingsSource._connect_group_method.<locals>.add_group_method.<locals>.<dictcomp>)titler   rt  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 connectingrF   )rr  hasattrr*   ru  )ro  rC   main_group_kwargsrg  add_argument_grouprs  rM   add_group_method5  s   


zACliSettingsSource._connect_group_method.<locals>.add_group_method)ro  r   rC   r   rD   r   )rn  )rJ   r   rz  rF   rx  rM   _connect_group_method2  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   rC   rD   r   c                    s4   t j| i |\} } jD ]}| j|< qtt| S r   )r   parse_known_argsr	  r   r   )rc   rC   unknown_argsr~   rt   rF   rM   _parse_known_argsR  s   

zACliSettingsSource._connect_root_parser.<locals>._parse_known_argsr   r   r   r   ro  rW   
added_argsrY   subcommand_prefixrg  alias_prefixesmodel_default)rc   r   rC   r   rD   r   )r	  r]  r   r   
parse_argsrn  r   _add_argumentr{  
_add_group_add_parser_add_subparsers_formatter_classr$  r	   r   r  _add_parser_argsr   r   r   r%   )	rJ   r   r   r   r   r   r   r   r~  rF   rt   rM   r   F  s.   


z&CliSettingsSource._connect_root_parserFro  r  rY   r  rg  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   rW   rX   rY   rZ   r[   r]   r_   ra   Fr   r   r   r=   helpsubcommandsr   )rt  r~   r   metavarr  r  r  r  r   r  r~   r   rq  __pydantic_root_model__)r  r  c                   s$   g | ]} d t |  | qS r   )r   rq   rr   rj  rF   rM   r        $ z6CliSettingsSource._add_parser_args.<locals>.<listcomp>)=r"   r   r#   
issubclassr\  rV   r  rZ   r   r   configr   ra   rx   r   rz   r{   r|   rc   rC   r  r   r   r   r   r   r  rv  r  r  r  r~   r   r%   r   CLI_SUPPRESS_help_format_metavar_formatr   r   rU  _get_arg_namesr   _convert_append_actionr   r3   r   _convert_positional_arg_convert_bool_flagr   getattr_add_parser_submodelsr5   r	  r   r   r   r  r  r   _add_parser_alias_paths)rJ   ro  rW   r  rY   r  rg  r  r  r  
subparsersro   rX   rk   r   r   r|   subcommand_arg	arg_namescontextrF   r  rM   r  n  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~   )r6   r   r   r   r$  )rJ   rC   rk   r   rF   rF   rM   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  rB   r  )r   r2   r   r1   r   )rJ   rC   rk   r  rF   rF   rM   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?rq  )r%   rV   r   upperr   rU  r   )rJ   rC   rk   r   r  rj  r  rU  rF   rF   rM   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   rF   rq   aliasr  rF   rM   r   0      z3CliSettingsSource._get_arg_names.<locals>.<genexpr>)rV   r   r   r   r   r   r   ry   r   rO   extend)rJ   rY   r  r  r   r  r  prefixrr   arg_nametargetaliases
alias_listrF   r  rM   r    s(   


z CliSettingsSource._get_arg_namesr{   r   rj  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 optionsrt  r   rq  c                 s  s    | ]}t |tV  qd S r   )r  rU   )rq   rW   rF   rF   rM   r   Q  s    

z:CliSettingsSource._add_parser_submodels.<locals>.<genexpr>rp  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   rF   r  r  rF   rM   r   u  r  r   c                   s   g | ]	}  | d qS )r   rF   r  rp   rF   rM   r   ~  s    z;CliSettingsSource._add_parser_submodels.<locals>.<listcomp>)	ro  rW   r  rY   r  rg  r  r  r  )r  rU   r*   r   r  r   r   r   r   r%   r"   r   r#   r  r   default_factoryr   _is_field_suppressedr  r   r   r  r  r  )rJ   ro  rW   r{   r  rY   r  rj  r  rC   rX   rk   r   r  r  model_groupmodel_group_kwargsdesc_headerr   rF   )rY   rj  rM   r  4  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   rC   r  r   )rJ   ro  ro   r  rY   r  rg  r  rr   rs   r  rC   rc   r   r   rF   rF   rM   r    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   rF   rF   rM   r     r   z8CliSettingsSource._get_modified_args.<locals>.<listcomp>)r   r   r   rJ   r  rF   rF   rM   _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  rF   r   rF   rF   rM   r     s    z=CliSettingsSource._metavar_format_choices.<locals>.<listcomp>r  r#  r*  r  r  )rs   r  r   )rJ   rc   r  r  rF   rF   rM   _metavar_format_choices  s   6
z)CliSettingsSource._metavar_format_choicesc                   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ru  f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    g | ]}t |j jd kqS )r   )rV   r   rr   r   r   rt   rF   rM   r     rv   z=CliSettingsSource._metavar_format_recurse.<locals>.<listcomp>rS   )r  r  Frootr  ztyping.r   ztyping_extensions.)"r;   r:   rS   rQ   r   r!   reprr&   is_typealiastyperO   r   r   typing
ForwardReftyping_extensionsrL   r'   r  r   map_metavar_format_recurser  
is_literalr+   r   r,   rv  r   r"   r#   r  r9   r   r   )rJ   r  originrF   rt   rM   r    sL   






z)CliSettingsSource._metavar_format_recursec                 C  s   |  |ddS )Nr  r  )r  r   r  rF   rF   rM   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  rU  r%   r3   r   r   r"   r   r#   r  r:   r  r   r7   r   r  r  r]  r   r   )	rJ   rX   rk   r  r  _helpifdefr   	enum_namerF   rF   rM   r    s(   
 
 zCliSettingsSource._help_formatc                 C  s"   |j r|j nd}|tkpt|jv S )Nr   )r   r  r   )rJ   rk   r  rF   rF   rM   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  rF   rF   rM   r     s    zECliSettingsSource._update_alias_path_only_default.<locals>.<listcomp>r   r=   r  r   )	r  r   path
setdefaultr   r`   r  r  r   )rJ   r  r  rk   r  
alias_pathalias_nested_pathsalias_defaultcurrent_pathnested_pathalias_path_indexrF   rF   rM   _update_alias_path_only_default  s(   


"z1CliSettingsSource._update_alias_path_only_defaultr0   _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 rF   r   rO   r7  r9  rq   r  rF   rF   rM   r   K  r  z6CliSettingsSource._serialized_args.<locals>.<listcomp>c                 S  r  rF   r  r  rF   rF   rM   r   L  r  )#r9   r   r   ry   r  r   r4   r   r  r  r  rn   rz   r   r|   _serialized_argsr"   r#   re  rf  r   groupsr   r   r   r   r7  r9  rO   r   r  r3   rC   r   r   )rJ   rW   r  r  rY  rW  rX  rX   rk   r  r   rk  
flag_charsr  r  serialized_argsrF   rF   rM   r    sN   "

 
" 
z"CliSettingsSource._serialized_args)0r   r   r   r   r   r   r   r   r   r^   r   r^   r   r^   r   r^   rA   r^   r   r   r   r   r   r^   r   r^   r   r\   r   r   rZ   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   rE   )rD   rd   )rc   r   rD   r   )r   r   rD   r   )rc   r   r   r   rD   r   )rD   r   )r   r   rD   r   )r   r  rD   rb   )r   r  rX   rO   r   rb   rD   rB   )r!  rb   rX   rO   rD   r"  )r(  rb   rX   rO   rD   rO   )r!  rb   rX   rO   rD   rO   )r/  rO   r(  rb   r;  rB   rD   rO   )r/  rO   r(  rb   rD   rO   )r/  rO   r(  rb   r%  rC  rD   rO   )rW   r   rX   rO   rk   r$   rD   rE   )rW   r   rD   rP  )rD   r   )
r^  r   r_  rO   rc   r   rC   r   rD   r`  )r   r   rD   r`  )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rD   rE   )F)ro  r   rW   r   r  rb   rY   rO   r  rO   rg  r   r  rb   r  r   r  rB   rD   r   )rC   rd   rk   r$   r   rB   rD   rE   )rC   rd   rk   r$   r  r   rD   rE   )
rC   rd   rk   r$   r   rO   r  r   rD   r  )rY   rO   r  rO   r  rb   r   re   r  rb   rD   rb   )ro  r   rW   r   r{   r   r  rb   rY   rO   r  rO   rj  rO   r  rb   rC   rd   rX   rO   rk   r$   r   re   r  r   r  rB   rD   rE   )ro  r   ro   rg   r  rb   rY   rO   r  rO   rg  r   rD   rE   )r  r   rD   re   r   )rc   rb   r  r   rD   rO   )r  r   rD   rO   )
rX   rO   rk   r$   r  r   r  rB   rD   rO   )rk   r$   rD   rB   )
r  rO   r  r   rk   r$   r  rd   rD   r  )rW   r0   r  rB   rD   rb   ).rQ   rR   rS   r   r   add_argumentry  r   
add_parseradd_subparsersr   rH   r   r   r   r  r  r'  r2  r  r4  r5  r6  rO  r\  propertyr   rn  r{  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rT   rF   rF   rK   rM   r      s    0
%




-



-

&2 





O
!
	
+


r   )fr   
__future__r   _annotationsr7  re  rd  r   r  argparser   r   r   r   r   r   collectionsr	   collections.abcr
   r   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%   typing_inspectionr&   typing_inspection.introspectionr'   
exceptionsr*   utilsr+   r,   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   envr>   pydantic_settings.mainr?   r@   rU   rV   r   CliSubCommandCliPositionalArgrB   r   rL  rM  r  CliSuppressr   rO   CliUnknownArgsr   rF   rF   rF   rM   <module>   sZ     4($
	 