o
    _�¿j5 ã                   @  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	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  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,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZDmEZEmFZF ddlmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP ddlCmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZX ddlYmZZZ e!rüddl[m\Z\ G dd„ deƒZ]G d d!„ d!e/ƒZ^d7d&d'„Z_d8d-d.„Z`G d/d0„ d0e/ƒZae'd1ƒZbe"ebdB eNf Zce"ebeMf Zde'd2eed3�Zfe"efeLf Zge"efeKf Zhe"efeOf Zie"efeJf ZjeZke"ebekf Zle"emen e0g d4�ePeHf ZoG d5d6„ d6eZe$eb ƒZpdS )9z'Command-line interface settings source.é    )ÚannotationsN)ÚSUPPRESSÚArgumentParserÚBooleanOptionalActionÚ	NamespaceÚRawDescriptionHelpFormatterÚ_SubParsersAction)Údefaultdict)ÚCallableÚMappingÚSequence)ÚEnum)Úcached_property)Úchain)Údedent)ÚSimpleNamespace)ÚTYPE_CHECKINGÚ	AnnotatedÚAnyÚGenericÚLiteralÚNoReturnÚTypeVarÚcastÚget_argsÚ
get_originÚoverload)ÚAliasChoicesÚ	AliasPathÚ	BaseModelÚFieldÚPrivateAttrÚTypeAdapter)ÚRepresentation)Úis_model_class)Úis_pydantic_dataclass)Ú	FieldInfo)ÚPydanticUndefined)Útyping_objects)Úis_union_originé   ©ÚSettingsError)Ú_lenient_issubclassÚ_typing_baseÚ_WithArgsTypesé   )
ÚForceDecodeÚNoDecodeÚPydanticModelÚ_CliDualFlagÚ_CliExplicitFlagÚ_CliImplicitFlagÚ_CliPositionalArgÚ_CliSubCommandÚ_CliToggleFlagÚ_CliUnknownArgs)Ú	InitStateÚ_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)ÚselfrG   rI   ©Ú	__class__rM   úb/home/dinkstrade/pdmp/venv/lib/python3.10/site-packages/pydantic_settings/sources/providers/cli.pyrO   P   s   
z_CliInternalArgParser.__init__ÚmessageÚstrr   c                   s$   | j s
td|› �ƒ‚tƒ  |¡ d S )Nzerror parsing CLI: )rP   r,   rN   Úerror)rQ   rU   rR   rM   rT   rW   T   s   z_CliInternalArgParser.error)T)rG   rH   rI   r   rJ   rK   )rU   rV   rJ   r   )Ú__name__Ú
__module__Ú__qualname__rO   rW   Ú__classcell__rM   rM   rR   rT   rF   O   s    rF   c                   @  s   e Zd ZdS )ÚCliMutuallyExclusiveGroupN)rX   rY   rZ   rM   rM   rM   rT   r\   Z   s    r\   Ú	model_clsú	type[Any]rJ   ú
str | Nonec                 C  sÐ   i }t | ƒr
| j}n
t| ƒrt| di ƒ}| d¡}t|tƒr*| d¡}|dur)|S n2t|ƒr\z$d}t | ƒr=|  ¡  d¡}nt| ƒrJt	| ƒ 
¡  d¡}|durQ|W S W n	 ty[   Y nw | jdurft| jƒS dS )a"  Get model description from json_schema_extra or __doc__ fallback.

    ``json_schema_extra.description`` takes precedence over ``__doc__`` to
    match pydantic's own behaviour.  When neither is available (e.g. under
    ``python -OO`` where docstrings are stripped), returns ``None``.
    Ú__pydantic_config__Újson_schema_extraÚdescriptionN)r$   Úmodel_configr%   ÚgetattrÚgetÚ
isinstanceÚdictÚcallableÚmodel_json_schemar"   Újson_schemaÚ	ExceptionÚ__doc__r   )r]   Úconfigra   ÚdescrM   rM   rT   Ú_get_model_description^   s6   


ÿÿÿ

ro   Útype_r   Ú
sub_modelsúlist[type[BaseModel]]rK   c                 C  sR   t | ƒ}t|ƒst|ƒr| |¡ dS tt|ƒƒr%t|ƒD ]	}t||ƒ qdS dS )zJRecursively collect BaseModel subclasses from possibly nested union types.N)rA   r$   r%   Úappendr)   r   r   Ú_collect_sub_models)rp   rq   ÚstrippedÚargrM   rM   rT   rt      s   þrt   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< 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< dK‡ fd$d%„ZedLd'd(„ƒZedMd+d,„ƒZdNd/d0„ZedOd1d2„ƒZedPd4d5„ƒZedQd6d7„ƒZedQd8d9„ƒZedRd;d<„ƒZedSd=d>„ƒZedTd?d@„ƒZedQdAdB„ƒZedUdCdD„ƒZedUdEdF„ƒZedUdGdH„ƒZedUdIdJ„ƒZ‡  ZS )VÚ_CliArgr   ÚmodelÚparserrV   Ú
field_nameÚ
arg_prefixrH   Úcase_sensitiveÚpopulate_by_nameÚ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]rI   rM   útuple[str, ...]Ú_alias_namesúdict[str, int | None]Ú_alias_pathsFÚ_is_alias_path_onlyr&   Ú_field_infoÚ
field_infoÚ
parser_mapúOdefaultdict[str | FieldInfo, dict[int | None | str | type[BaseModel], _CliArg]]ÚvaluesrJ   rK   c           	        s4  t ƒ jdi |¤Ž |ˆ _tˆ jˆ jˆ jˆ jˆ jd�\ˆ _	ˆ _
‡ fdd„ˆ j ¡ D ƒ}ˆ jr_ˆ jD ]-}ˆ  |¡}ˆ jg i dœd�|ˆ j |< |ˆ j | |ˆ j |< |ˆ j | |ˆ j |< q0nˆ j|vrwˆ |ˆ j d < |ˆ j d  |ˆ j d < | ¡ D ]\}}ˆ jg i dœd�|| |< || | |ˆ j |< q{d S )N)Úalias_path_argsr|   r}   c                   s    i | ]\}}ˆ j › |› �|“qS rM   ©r{   )Ú.0ÚnameÚindex©rQ   rM   rT   Ú
<dictcomp>¬   ó     z$_CliArg.__init__.<locals>.<dictcomp>©r†   rI   )ÚupdaterM   )rN   rO   r�   r>   rz   rŽ   r‹   r|   r}   r‰   rŒ   ÚitemsÚsubcommand_destrq   Úsubcommand_aliasÚ
model_copyÚdest)	rQ   rŽ   r�   r‘   Úalias_path_destsÚ	sub_modelrž   Úalias_path_destr–   rR   r—   rT   rO   œ   s0   û

ü
þz_CliArg.__init__r•   c                 C  s   |dvr
|  dd¡S |S )N©NFÚ_ú-)Úreplace)Úclsr•   r€   rM   rM   rT   Úget_kebab_caseº   s   z_CliArg.get_kebab_caseÚ
annotationr^   c                   sZ   d}t |ƒ}t|ƒD ]
}|ˆ  |ˆ¡7 }q
|r+t|tƒr+|t‡ ‡fdd„|jD ƒƒ7 }|S )NrM   c                 3  s    � | ]}ˆ   |ˆd k¡V  qdS )ÚallN)r©   ©r”   r•   ©r¨   r€   rM   rT   Ú	<genexpr>Ç   s   € z)_CliArg.get_enum_names.<locals>.<genexpr>)rA   r   Úget_enum_namesr-   r   ÚtupleÚ__members__)r¨   rª   r€   Ú
enum_namesrp   rM   r­   rT   r¯   ¾   s   z_CliArg.get_enum_namesr¢   útype[BaseModel]c                 C  s*   |   t| jƒdkr|j| j¡S | j| j¡S ©NrC   )r©   Úlenrq   rX   Úpreferred_aliasr€   )rQ   r¢   rM   rM   rT   rž   Ê   s
   ÿÿz_CliArg.subcommand_aliasc                 C  ó   | j S ©N)r�   r—   rM   rM   rT   rŽ   Ï   ó   z_CliArg.field_infor_   c                 C  s   t | jjv r| j› d�S d S )Nú:subcommand)r8   rŽ   Úmetadatar{   r—   rM   rM   rT   r�   Ó   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¸   )r�   r{   rŽ   Úvalidation_aliasÚis_parser_submodelr¶   r„   r—   rM   rM   rT   r    ×   s   ÿþÿz_CliArg.destc                 C  s"   | j r| jd  dd¡S | jd S )Nr   r¥   r¦   )r€   r†   r§   r—   rM   rM   rT   Úpreferred_arg_nameä   s   "z_CliArg.preferred_arg_namerr   c                 C  sª   t | jjƒs| jjfnt | jjƒ}| jrtdd„ |D ƒƒ}g }|D ]1}t|tfdd�r8td| jj	› d| j
› �ƒ‚t|tfdd�rMtd| jj	› d| j
› �ƒ‚t||ƒ q!|S )Nc                 S  ó   g | ]
}|t d ƒur|‘qS r¸   ©Útype©r”   rp   rM   rM   rT   Ú
<listcomp>ð   ó    z&_CliArg.sub_models.<locals>.<listcomp>F)Úis_include_originz.CliSubCommand is not outermost annotation for Ú.z1CliPositionalArg is not outermost annotation for )r   rŽ   rª   r~   r°   r<   r8   r,   rx   rX   rz   r7   rt   )rQ   Úfield_typesrq   rp   rM   rM   rT   rq   è   s$   
ÿ
ýÿÿz_CliArg.sub_modelsc                 C  r·   r¸   ©r‰   r—   rM   rM   rT   Úalias_namesÿ   r¹   z_CliArg.alias_namesc                 C  r·   r¸   )r‹   r—   rM   rM   rT   Úalias_paths  r¹   z_CliArg.alias_pathsc                 C  s
   | j d S )Nr   rÈ   r—   rM   rM   rT   r¶     s   
z_CliArg.preferred_aliasc                 C  r·   r¸   )rŒ   r—   rM   rM   rT   Ú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)	r�   r<   rŽ   rª   ÚlistÚsetrg   r   r   r—   rM   rM   rT   Úis_append_action  s   
ÿz_CliArg.is_append_actionc                 C  s   | j  ot| jƒo| j S r¸   )r�   rH   rq   rÐ   r—   rM   rM   rT   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¤   )rŽ   r2   r»   r‚   r1   r—   rM   rM   rT   Úis_no_decode  s   
þz_CliArg.is_no_decode)rŽ   r&   r�   r�   r‘   r   rJ   rK   )r•   rV   r€   r   rJ   rV   )rª   r^   r€   r   rJ   rˆ   )r¢   r³   rJ   rV   )rJ   r&   )rJ   r_   )rJ   rV   )rJ   rr   )rJ   rˆ   )rJ   rŠ   )rJ   rH   )rX   rY   rZ   Ú__annotations__r†   rI   r!   r‰   r‹   rŒ   r�   rO   Úclassmethodr©   r¯   rž   r   rŽ   r�   r    r¾   rq   rÉ   rÊ   r¶   rË   rÐ   r½   rÑ   r[   rM   rM   rR   rT   rw   ‰   s^   
 
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dejejejej	ej
eddfdà‡ fd,d-„Zedád/d0„ƒZedâd2d3„ƒZedãd7d3„ƒZedäd:d3„ƒZddd;œdå‡ fd?d3„ZedædAdB„ƒZedädCdB„ƒZddDœdçdFdB„ZdèdIdJ„ZdédOdP„ZdêdSdT„ZdëdVdW„ZdìdXdY„Zdíd\d]„Zdîd^d_„Zdïdbdc„Zdðdhdi„Zdñdkdl„Zedòdndo„ƒZdódtdu„Zdôdvdw„Zejejejej	ej
efdõdxdy„Zdödzd{„Z 	|				}d÷dødŽd�„Z!dùd‘d’„Z"dúd“d”„Z#dûd—d˜„Z$düdœd�„Z%		}dýdþd¥d¦„Z&dÿd©dª„Z'�d d¬d­„Z(�d�dd¯d°„Z)�dd±d²„Z*�dd³d´„Z+�ddµd¶„Z,�dd·d¸„Z-�ddºd»„Z.�dd¼d½„Z/�dd¿dÀ„Z0�d	dÂdÃ„Z1	}�d
�ddÄdÅ„Z2�ddÆdÇ„Z3�ddÌdÍ„Z4	Î	Î�d�ddÕdÖ„Z5e6�ddÚdÛ„ƒZ7	Î	Î	|	|�d�ddÞdß„Z8‡  Z9S (  ÚCliSettingsSourceaO  
    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_show_env_vars: Show resolved environment variable names in CLI help text. 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: Controls how `bool` fields are exposed as CLI flags.

            - False (default): no implicit flags are generated; booleans must be set explicitly (e.g. --flag=true).
            - True / 'dual': optional boolean fields generate both positive and negative forms (--flag and --no-flag).
            - 'toggle': required boolean fields remain in 'dual' mode, while optional boolean fields generate a single
              flag aligned with the default value (if default=False, expose --flag; if default=True, expose --no-flag).
        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`.
        format_help_method: The root parser format help method. Defaults to `argparse.ArgumentParser.format_help`.
        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_groupsÚcli_show_env_varsrG   Ú
cli_prefixÚcli_flag_prefix_charÚcli_implicit_flagsú'bool | Literal['dual', 'toggle'] | NoneÚcli_ignore_unknown_argsÚcli_kebab_caser   Ú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Úformat_help_methodÚformatter_classÚ_env_settings_sourceúEnvSettingsSource | NoneÚ_init_stateúInitState | NonerJ   rK   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¡| _|d ur‡|n|j  dd¡| _| jd | _| jr¸| d¡sª| d¡sª| dd¡ ¡ s±t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 | _| j
rý|pût|ƒ| _i | _|d u�r|nd}|�s|d u�rtdƒ‚tƒ j|d| jd| j|d|d� |d u �r:t| j| jt|ƒ|| jddd�n|}| j||||||||d� |dv�ry|du �r[tjdd … }nt |t!t"fƒ�sltdt#|ƒ› �ƒ‚| j$|  %| j&|¡d� d S d S ) NrÛ   r   rß   Frà   TrK   Únullrá   râ   rã   rG   rä   Ú rå   r¦   r0   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|   Úenv_nested_max_splitr÷   )rG   Úprogrb   rô   Úprefix_charsÚallow_abbrevÚadd_help)rì   rí   rï   rð   rñ   rò   ró   rô   r¤   rC   z<cli_parse_args must be a list or tuple of strings, received ©Úparsed_args)'rc   re   ÚsysÚargvrÛ   rß   rà   rÞ   rá   râ   rã   rG   rä   rå   Ú_cli_flag_prefixÚ
startswithÚendswithr§   Úisidentifierr,   ræ   rè   ré   rê   rõ   rD   Ú_env_var_namesrN   rO   rF   ro   Ú_connect_root_parserrf   rÎ   r°   rÁ   Ú_load_env_varsÚ_parse_argsrì   )rQ   rÙ   rÛ   rÜ   rÞ   rß   rà   rá   râ   rã   rG   rä   rå   ræ   rè   ré   rê   r|   rì   rí   rï   rð   rñ   rò   ró   rô   rõ   r÷   rR   rM   rT   rO   b  sÂ   ÿÿýÿÿýÿýÿýÿýÿý$ÿýÿýÿÿø
÷ù
õø

ÿùzCliSettingsSource.__init__úMapping[str, tuple[str, ...]]c                 C  s
   | j  ¡ S )z6Resolved environment variable names for CLI arguments.)r  Úcopyr—   rM   rM   rT   Úenv_var_namesò  s   
zCliSettingsSource.env_var_namesr‡   c                 C  ó   d S r¸   rM   r—   rM   rM   rT   Ú__call__÷  ó   zCliSettingsSource.__call__r†   ú"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.
        NrM   )rQ   r†   rM   rM   rT   r  ú  ó    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.
        NrM   ©rQ   r  rM   rM   rT   r  	  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t |¡d�S tƒ  ¡ S )Nz/`args` and `parsed_args` are mutually exclusiveFr  TrC   )	r,   r  r  r  r  rì   r  rN   r  )rQ   r†   r  rR   rM   rT   r    s   
úMapping[str, str | None]c                 C  r  r¸   rM   r—   rM   rM   rT   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.
        NrM   r  rM   rM   rT   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 ƒ}|r`t|td�‰ t‡ fdd„|D ƒƒs_d	|ˆ < nd
‰ | js¦| jr¦tdd„ | j 	¡ D ƒƒ}|r¦t‡ fdd„| jD ƒƒ}|s¦tdd„ | j 	¡ D ƒƒ}t | jtƒr¢| j dd |¡› �¡ tdƒ‚| | j¡ tttttf |ƒ| j| j| j
ƒ| _| S )Nrº   c                 S  s   g | ]}|j ‘qS rM   )r    ©r”   rv   rM   rM   rT   rÃ   K  ó    z4CliSettingsSource._load_env_vars.<locals>.<listcomp>c                 S  s(   i | ]\}}|  d ¡s|tur||“qS )rº   )r
  r'   )r”   ÚkeyÚvalrM   rM   rT   r˜   O  s    ýþz4CliSettingsSource._load_env_vars.<locals>.<dictcomp>)r#  c                 3  s"   � | ]}ˆ › d �|v r|V  qdS )rÆ   NrM   )r”   rz   ©Úlast_selected_subcommandrM   rT   r®   V  s   €  z3CliSettingsSource._load_env_vars.<locals>.<genexpr>ú{}rú   c                 s  ó   � | ]}|V  qd S r¸   rM   ©r”   r†   rM   rM   rT   r®   ^  ó   € c                 3  s$   � | ]}|  d d¡d ˆ v V  qdS )rÆ   rC   r   N)Úrsplit)r”   r    r%  rM   rT   r®   `  ó   € 
ÿc                 s  s   � | ]}|r|V  qd S r¸   rM   r)  rM   rM   rT   r®   d  ó   € zunrecognized arguments: ú r0   )rf   r   r   ÚvarsÚ_resolve_parsed_argsÚ_parser_maprœ   rV   r
  r‘   rÞ   Úmaxrµ   Úanyrè   Ú_cli_unknown_argsÚnextrì   r   rW   ÚjoinÚ
SystemExitr›   rB   r   r   r|   Úenv_ignore_emptyÚenv_vars)	rQ   r  Úselected_subcommandsÚarg_destÚarg_mapr�   Úhas_unknownÚselected_accepts_unknownÚunknownrM   r%  rT   r  ?  sN   

€þ€ÿüúdict[str, list[str] | str]r…   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�t|tƒr�| dd¡}| j |i ¡ d ¡}|r�|jjr�|| |jjd¡v r�d|v r‹td| dd¡› d|› d	�ƒ‚|||< q|S )
Nú,rº   r«   r¦   r¥   FzInput should be kebab-case "z", not "ú")rÎ   rœ   rf   Ú%_is_nested_alias_path_only_workaroundr1  re   rÑ   r6  Ú_merge_parsed_listr
  rs   r    ré   rV   r§   rŽ   rª   r¯   Ú
ValueError)rQ   r  r:  rz   r$  Úcli_argÚ	snake_valrM   rM   rT   r0  t  s2   

ÿþ€z&CliSettingsSource._resolve_parsed_argsrz   rV   r$  rH   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éÿÿÿÿrB  z": Ú{Ú}ú, T)
r1  re   r‘   r5  ÚiterrË   r{   r
  r¶   rD  )rQ   r  rz   r$  Ú	known_argrv   Únested_destÚ
nested_valrM   rM   rT   rC  “  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   rg   r   rÂ   rM   rM   rT   r®   ¯  s   € þýzACliSettingsSource._get_merge_parsed_list_types.<locals>.<genexpr>rC   r   ú[)
Ú_cli_dict_argsre   rÎ   r)   r   r3  r   rµ   r	  rV   )rQ   rP  rz   Ú
merge_typeÚinferred_typerM   rM   rT   Ú_get_merge_parsed_list_typesª  s   
ÿþþ&þz.CliSettingsSource._get_merge_parsed_list_typesÚmerged_listc              	   C  s`  g }d }| j  |i ¡}zttt| ¡ ƒƒjjƒ}ttt| 	dg¡ƒƒƒt
u }W n ty2   d }Y nw t|ƒD ]i\}}	| |¡}
|
d u pG|
j }|d u rO|}n||krWtdƒ‚|r‹|	 dd¡}	z"|	 d¡rp|	 d¡rp|	dd… n|	}t|ƒ |r~d|› d�n|}	W n tyŠ   Y nw |	 d¡r›|	 d¡r›|	dd… }	| |	¡ q7d |¡}|r®d	|› d
�S |S )NÚ1zKMixing Decode and NoDecode across different AliasPath fields is not allowedú\z\\rB  rC   rH  rA  rR  ú])r1  re   r"   r5  rL  r‘   rŽ   rª   rÁ   Úvalidate_pythonrV   rk   Ú	enumeraterÑ   r,   r§   r	  r
  ÚfloatrE  rs   r6  )rQ   rW  rz   Údecode_listÚis_use_decodeÚcli_arg_mapÚlist_adapterÚis_num_type_strr–   ÚitemrF  Ú	is_decodeÚunquoted_itemÚmerged_list_strrM   rM   rT   Ú_merged_list_to_str»  s<    ÿ
$ÿ
z%CliSettingsSource._merged_list_to_strc              
   C  sz  z¦g }d}|   ||¡\}}|D ]n}t|tƒs nf| ¡ }| d¡r.| d¡r.|dd…  ¡ }|rt| ¡ }| d¡rC|  |||¡}d}n/| d¡rO|  ||¡}n!z	|  |||¡}W n t	yo   ||u rd‚ |}|  |||¡}Y nw d}|s0|s}|  |||¡}q|tu r‡|d	 W S |t
u r’|  ||¡W S i }|D ]
}	| t |	¡¡ q–t |¡W S  ty¼ }
 z
td
|› d|
› �ƒ‚d }
~
ww )NFrR  rZ  rC   rH  rA  ©rI  rR  Tr   zParsing error encountered for z: )rV  rf   rV   Ústripr	  r
  Ú_consume_commaÚ_consume_object_or_arrayÚ_consume_string_or_numberrE  rÎ   rg  r›   ÚjsonÚloadsÚdumpsrk   r,   )rQ   rP  rz   rW  Úis_last_consumed_a_valuerT  rU  r$  Úmerged_dictrc  ÚerM   rM   rT   rD  Ù  sT   


üð€
€ÿz$CliSettingsSource._merge_parsed_listrc  rp  c                 C  s   |s|  d¡ |dd … S )Nz""rC   )rs   )rQ   rc  rW  rp  rM   rM   rT   rj    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�ƒ‚)NrC   rI  rJ  rZ  FrB  rY  rh  )rJ  rZ  r   zMissing end delimiter ")r	  Úrangerµ   rs   r,   )rQ   rc  rW  ÚcountÚclose_delimÚin_strÚconsumedrM   rM   rT   rk    s"   
€z*CliSettingsSource._consume_object_or_arrayrT  ú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¡r¢td|› �ƒ‚| d¡| d¡}}| 	t ||i¡¡ ||d … S )Nr   FrB  rC   rY  rA  zMismatched quotesrù   )ÚtrueÚfalserù   c                 s  r(  r¸   rM   )r”   ÚkvrM   rM   rT   r®   3  r*  z>CliSettingsSource._consume_string_or_number.<locals>.<genexpr>ú=z1Dictionary key=val parameter is a quoted string: )rV   rµ   r,   ri  rÎ   r]  rE  rÞ   r	  rs   Úsplitr
  rm  ro  )	rQ   rc  rW  rT  rw  Úis_find_end_quoteÚ
val_stringr#  r$  rM   rM   rT   rl    s:   $û
€ü(z+CliSettingsSource._consume_string_or_numberrx   r³   rŽ   r&   c                 C  s–   t |jv rd}n.t|jv rd}n&t|jv r,d}t|jtƒs+t|› d|j› d|› d�ƒ‚n
t	|jv r4d}nd S |j
turIt|› d|j› d|› d�ƒ‚d S )	NÚCliImplicitFlagÚCliExplicitFlagÚCliToggleFlagz
 argument rÆ   z must have a default bool valueÚCliDualFlagz is not of type bool)r6   r»   r5   r9   rf   r×   rH   r,   rX   r4   rª   )rQ   rx   rz   rŽ   Úcli_flag_namerM   rM   rT   Ú_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 rªt||ƒ^}}	t|ƒdkr‹td	|j› d|› d�ƒ‚t|j
tttttfd
d�}|s¢| ||f¡ q| ||f¡ q|  |||¡ | ||f¡ q|rít|ƒdkrÕd dd„ |D ƒ¡}t|j› d|› �ƒ‚|ríd dd„ || D ƒ¡}t|j› d|› �ƒ‚|| | | S )Nzsubcommand argument rÆ   z has a default valuerC   z has multiple aliasesc                 S  r¿   r¸   rÀ   rÂ   rM   rM   rT   rÃ   X  rÄ   z6CliSettingsSource._sort_arg_fields.<locals>.<listcomp>z$ has type not derived from BaseModelzpositional argument TrÌ   rK  c                 S  ó   g | ]\}}|‘qS rM   rM   ©r”   r•   ÚinforM   rM   rT   rÃ   p  ó    z- has multiple variadic positional arguments: c                 S  r‡  rM   rM   rˆ  rM   rM   rT   rÃ   s  rŠ  z= has variadic positional arguments and subcommand arguments: )r?   rœ   r8   r»   Úis_requiredr,   rX   r>   rµ   r   rª   r$   r%   rs   r7   r<   rÎ   rÏ   rg   r   r   r…  r6  )rQ   rx   Úpositional_variadic_argÚpositional_argsÚsubcommand_argsÚoptional_argsrz   rŽ   rÉ   r¥   rÇ   Ú
field_typerÐ   Úfield_namesrM   rM   rT   Ú_sort_arg_fieldsM  sN   
ÿ€
ÿÿz"CliSettingsSource._sort_arg_fieldsrÔ   c                 C  r·   )z#The connected root parser instance.)Ú_root_parserr—   rM   rM   rT   rì   z  s   zCliSettingsSource.root_parserÚparser_methodÚmethod_namerI   ú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ì   rF   r†   ú"list[str] | tuple[str, ...] | NoneÚ	namespaceúNamespace | NonerJ   r   c                   sv   g }|rt  t  |¡¡ng D ]&}dˆj› d�}t d|› d�|¡}|r/| d¡ ¡ | d¡ }| |¡ qˆ | ||ƒS )NrY  z{1,2}z^(z[^\s=]+)(.*)rC   r0   )	Úshlexr}  r6  rå   ÚreÚmatchÚgroupÚlowerrs   )rì   r†   r˜  Úinsensitive_argsrv   Úflag_prefixÚmatched)r”  rQ   rM   rT   Úparse_args_insensitive_method‰  s   zOCliSettingsSource._connect_parser_method.<locals>.parse_args_insensitive_methodrI   c                    s   t dˆ › d�ƒ‚)Nz0cannot connect CLI settings source root parser: z. is set to `None` but is needed for connectingr+   rš   )r•  rM   rT   Únone_parser_method›  s   
ÿzDCliSettingsSource._connect_parser_method.<locals>.none_parser_method)NN)rì   rF   r†   r—  r˜  r™  rJ   r   )r†   r   rI   r   rJ   r   )r|   rf   r“  rF   )rQ   r”  r•  r†   rI   r¢  r£  rM   )r•  r”  rQ   rT   Ú_connect_parser_method  s   

ÿýz(CliSettingsSource._connect_parser_methodc                   s   |   |d¡‰ d‡ fdd„}|S )	Nrð   ry   r   rI   rJ   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 rM   )Úpopr!  ©rI   rM   rT   r˜   ­  r™   zUCliSettingsSource._connect_group_method.<locals>.add_group_method.<locals>.<dictcomp>)Útitlerb   r©  z (mutually exclusive)Úadd_mutually_exclusive_groupz�cannot connect CLI settings source root parser: group object is missing add_mutually_exclusive_group but is needed for connectingrM   )r§  Úhasattrr,   rª  )ry   rI   Úmain_group_kwargsr�  ©Úadd_argument_groupr¨  rT   Úadd_group_method¨  s   


ÿzACliSettingsSource._connect_group_method.<locals>.add_group_method)ry   r   rI   r   rJ   r   )r¤  )rQ   rð   r¯  rM   r­  rT   Ú_connect_group_method¥  s   z'CliSettingsSource._connect_group_methodc	                   s  i ˆ _ d‡ fdd„}	|ˆ _|d u }
|d u rˆ jr|	ntj}ˆ  |d¡ˆ _ˆ  |d	¡ˆ _ˆ  |¡ˆ _	ˆ  |d
¡ˆ _
ˆ  |d¡ˆ _ˆ  |d¡ˆ _|ˆ _i ˆ _ttƒˆ _ˆ  ¡  ˆ jˆ jˆ jg ˆ jˆ jd g ttƒ ˆ  ¡ d�
 ˆ j r|ˆ js~|
r€ˆ  |	d¡ˆ _d S d S d S d S )Nr†   r   rI   rJ   r   c                    s4   t j| i |¤Ž\} }ˆ jD ]}|ˆ j|< qtt| ƒS r¸   )r   Úparse_known_argsr4  r   r   )r†   rI   Úunknown_argsr    r—   rM   rT   Ú_parse_known_argsÆ  s   

zACliSettingsSource._connect_root_parser.<locals>._parse_known_argsrí   rï   rñ   rò   ró   ©
ry   rx   Ú
added_argsr{   Úsubcommand_prefixr�  Úalias_prefixesÚmodel_defaultÚ
model_pathÚenv_prefixes)r†   r   rI   r   rJ   r   )r4  r“  rè   r   Ú
parse_argsr¤  r  Ú_add_argumentr°  Ú
_add_groupÚ_add_parserÚ_add_subparsersÚ_format_helpÚ_formatter_classrS  r	   rg   r1  Ú_add_default_helpÚ_add_parser_argsrì   rÙ   rþ   r'   rÏ   Ú_root_env_prefixes)rQ   rì   rí   rï   rð   rñ   rò   ró   rô   r³  Ú_is_default_parse_argsrM   r—   rT   r  ¹  sB   ÿöÿz&CliSettingsSource._connect_root_parserc                 C  sŒ   t | jtƒrD| js&t| jƒ ¡ D ]\}}t||| jd�^}}d|v r% d S q| j	| j
| jd d… › d�| jd d… › d�dtdd� d S d S )N)r|   ÚhelprC   Úhr0   zshow this help message and exit)Úactionr×   rÆ  )rf   r“  rF   rä   r?   rÙ   rœ   r>   r|   r¼  rì   r  r   )rQ   rz   rŽ   rÉ   r¥   rM   rM   rT   rÂ  ï  s    ÿ
úùz#CliSettingsSource._add_default_helpFrM   ry   rµ  r{   r¶  r�  r·  r¸  Úis_model_suppressedÚdiscriminator_valsúdict[str, set[Any]] | NoneÚis_last_discriminatorr¹  úset[type[BaseModel]] | Nonerº  útuple[tuple[str, bool], ...]r   c                   sH  |
d u ri }
ˆd u rt ƒ ‰ˆ|hB ‰d }i }tt|ƒƒs"tt|ƒƒr+tt|ƒ|ƒs+d n|}|  |¡D �]ä\}}t||| j|||| j| j	 
dd¡pN| j	 
dd¡| j| j| j	 
d¡| jd�}| |j¡ |j�r|jD ]§}| |¡}| j|j | }|g|_d|jd< | j|jd< t|ƒ|jd< t|jƒd	kr—d n|j|jd
< | jr§t|ƒ|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|g|j¢R i |j¤Ž|_| j|j|g |j › d�|› |j!› d�d g t"ˆ|  #|  $|||¡¡d�
 qiq2| j%‰ |  $|||¡}|j |jd< t&|jd< |  '||||	|¡|jd
< |  (|j)¡|jd< | j*�oH| +¡ �oH|t"u |jd< |  ,|||||
|¡}|�ra|jd |v �rbq2|  -|j||j.¡ t/|j0v �r}|  1|j||j!|¡\}‰ |  2|j||¡ ‡fdd„|jD ƒ}|j3�r¶t4|j)ddƒ�s¶|�r¶| j5||||||ˆ ||j|||j6||	ˆ|d� q2t7|j0v �rÅg | j8|jd < q2|j9�st:|t;ƒ�rØ| j<|fi |¤Ž}|d u �rß|n|}|j 
d¡dk�rîˆ d7 ‰ ‡ fdd„|D ƒ|_|  =|j |jd
 |¡ | j>|g|j¢R i |j¤Ž |t?|ƒ7 }q2|  @||||||¡ |S ) Nr}   FÚvalidate_by_namer‚   )ry   rŽ   r�   rx   rz   r{   r|   r}   r~   r€   r‚   r„   r  rô   rb   rC   rÆ  Úsubcommandsrº   )r©  r    rb   ÚmetavarrH  rA  rJ  rI  rÆ   r´  r    r×   r¦  c                   s   g | ]}|ˆ vr|‘qS rM   rM   )r”   Úm)r¹  rM   rT   rÃ   „  ó    z6CliSettingsSource._add_parser_args.<locals>.<listcomp>Ú__pydantic_root_model__)r¸  rÉ  r¹  r  rÈ  Ústore_falseúno-c                   s0   g | ]}ˆ d t |ƒdkrdnd … › |› �‘qS r´   )rµ   r¬   ©r   rM   rT   rÃ   ¤  s   0 )ArÏ   r$   rÁ   r%   Ú
issubclassr’  rw   r1  r|   rm   re   rß   ré   r„   r›   rÊ   r�   rq   rž   r†   rI   rÁ  ro   rµ   rb   râ   r¿  r«  rÑ  r¾  ry   rÃ  r    r¶   r'   Ú_nested_env_prefixesÚ_get_field_env_var_namesr  ÚCLI_SUPPRESSÚ_help_formatÚ_metavar_formatrª   rá   r‹  Ú_get_arg_namesÚ_convert_append_actionrÐ   r7   r»   Ú_convert_positional_argÚ_convert_bool_flagr½   rd   Ú_add_parser_submodelsrÉ   r:   r4  rË   rf   rg   r½  Ú_add_env_var_namesr¼  rÎ   Ú_add_parser_alias_paths)rQ   ry   rx   rµ  r{   r¶  r�  r·  r¸  rÉ  rÊ  rÌ  r¹  rº  Ú
subparsersr’   rz   rŽ   rv   r¢   rž   Úsubcommand_argr  Ú	arg_namesÚnon_recursive_sub_modelsÚcontextrM   )r   r¹  rT   rÃ     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 )Nrs   rÈ  TrÌ   r    )r<   rª   rg   r   rS  )rQ   rI   rŽ   rÐ   rM   rM   rT   rß  ¬  s   ýz(CliSettingsSource._convert_append_actionc                 C  s¨   |d dkrNdd„ |j D ƒ}|s| jrtg}|rP| ¡ }|tu r/| jdkr-t|jtƒr-tnt}|tu r<|d= t	|d< d S |tu rR|d= |jrHdnd|d< d S d S d S d S )	NrÑ  rH   c                 S  s(   g | ]}t |tƒrt|ttB ƒr|‘qS rM   )rf   rÁ   rØ  r6   r5   )r”   ÚmetarM   rM   rT   rÃ   ´  s    ýýÿz8CliSettingsSource._convert_bool_flag.<locals>.<listcomp>ÚtogglerÈ  rÕ  Ú
store_true)
r»   ræ   r6   r§  rf   r×   rH   r9   r4   r   )rQ   rI   rŽ   r¸  Úmeta_bool_flagsÚ	bool_flagrM   rM   rT   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È  rs   ú+Ú*Únargsú?r¦  )r'   rw   r©   Úupperré   r‹  re   )rQ   rI   rŽ   r¶   r¸  r   rç  r‹  rM   rM   rT   rà  Ê  s   
z)CliSettingsSource._convert_positional_argrv   rw   údict[str, set[Any]]c              	     s*  g }|j g| D ],}|jD ]&}	t || jkr|› |	› �n
| |dd¡› |	› �| j¡}
|
ˆ vr3| |
¡ qq| jr\| j 	¡ D ]\}}||v r[t
|tƒrM|gn|}| ‡ fdd„|D ƒ¡ q=tƒ }| |j¡}|d ur“t|jjtfd|d� | t dd„ |D ƒ¡¡ |s…g S |  ttt|ƒƒ ¡|jd< |S )	Nrú   rC   c                 3  s   � | ]	}|ˆ vr|V  qd S r¸   rM   ©r”   Úalias©rµ  rM   rT   r®   ø  ó   € z3CliSettingsSource._get_arg_names.<locals>.<genexpr>T)rÅ   Úcollectc                 s  s   � | ]}t |ƒV  qd S r¸   )r   )r”   ÚtagrM   rM   rT   r®     r-  rÑ  )r{   rÉ   rw   r©   rþ   r§   ré   rs   rê   rœ   rf   rV   ÚextendrÏ   re   r    r<   rŽ   rª   r   r›   r   Úfrom_iterablerÝ  r°   ÚsortedrI   )rQ   rv   r¶  r·  rµ  rÊ  rÌ  rç  Úprefixr•   Úarg_nameÚtargetÚaliasesÚ
alias_listÚtagsÚdiscriminatorsrM   rø  rT   rÞ  ß  sB   	

ÿü
€ø
€üz CliSettingsSource._get_arg_namesrq   rr   r   rç  rÉ   rˆ   r  c                   sn  t |tƒr	tdƒ‚i }|d › d�|d< |j|d< |	d |d< tdd„ |D ƒƒ|d	< |d	 r8t|ƒd
kr8tdƒ‚| jrIt|ƒd
krIt|d ƒ|d< |tur_t	t
|ƒƒsYtt
|ƒƒr^t||
ƒ}n|jturh|j}n|jd urp|j}|d u r“d| j› d�}|d d ur�t|› d|d › �ƒ|d< n||d< |d }|  |¡p�|}|r¤t|d< | |d ¡ d|	d< d|	d< d|	d< |s¼| jr¾tn|  d|d › d�|¡|	d< |  |	d |	d |¡ | j|fi |¤Ž}| j|g‡fdd„|D ƒ¢R i |	¤Ž |j�rˆ › |› d|j› �tƒ ini }|D ],}| j|||ˆ › |› d�||‡ fdd„|d
d … D ƒ|||||d u ||  |¡d� �qd S )Nz8cannot have nested models in a CliMutuallyExclusiveGroupr   z optionsr©  rb   r¦  c                 s  s   � | ]}t |tƒV  qd S r¸   )rØ  r\   )r”   rx   rM   rM   rT   r®   (  s   € 

ÿz:CliSettingsSource._add_parser_submodels.<locals>.<genexpr>r¥  rC   z/cannot use union with CliMutuallyExclusiveGroupz	default: z (undefined)Ú
Fró  rò  r'  Úconstzset z from JSON string (default: {})rÆ  r    c                 3  s   � | ]	}ˆ › |› �V  qd S r¸   rM   r¬   r×  rM   rT   r®   N  rù  rÆ   c                   s   g | ]	}ˆ › |› d �‘qS )rÆ   rM   r¬   r“   rM   rT   rÃ   Z  s    z;CliSettingsSource._add_parser_submodels.<locals>.<listcomp>rH  )ry   rx   rµ  r{   r¶  r�  r·  r¸  rÉ  rÊ  rÌ  r¹  rº  )rØ  r\   r,   rb   r3  rµ   râ   ro   r'   r$   rÁ   r%   rd   r×   Údefault_factoryrÞ   r   Ú_is_field_suppressedrÛ  rs   rà   Ú_help_format_env_varsrã  r½  r¼  ÚdiscriminatorrÏ   rÃ  rÙ  )rQ   ry   rx   rq   rµ  r{   r¶  r   rç  rI   rz   rŽ   rÉ   r¸  rÉ  r¹  r  Úmodel_group_kwargsÚdesc_headerr¶   Úmodel_grouprÊ  r¢   rM   )r{   r   rT   râ  
  s|   

ÿ
€

ÿÿý&$ÿ

óÿz'CliSettingsSource._add_parser_submodelsr’   rŠ   c                 C  s  |r€|}|d urt |tƒr| j|fi |¤Žn|}| ¡ D ]e\}}	|| 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ú   rC   r×   zpydantic alias pathrÆ  rs   rÈ  rÎ   rÑ  rg   )rf   rg   r½  rœ   rþ   r§   rÛ  rS  r  r1  r‘   r†   rI   r¼  rs   )rQ   ry   r’   rµ  r{   r¶  r�  ré  r•   r–   r   rI   r†   rv   rM   rM   rT   rä  c  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Â   rM   rM   rT   rÃ   ˆ  rÄ   z8CliSettingsSource._get_modified_args.<locals>.<listcomp>)rß   r   r°   ©rQ   r  rM   rM   rT   Ú_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ÚJSONrC   c                 S  s   g | ]}|d kr|‘qS )r  rM   r!  rM   rM   rT   rÃ   Œ  rÓ  z=CliSettingsSource._metavar_format_choices.<locals>.<listcomp>rA  rR  rZ  rI  rJ  )r–   r6  rµ   )rQ   r†   r  rÑ  rM   rM   rT   Ú_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|tjƒs-t	 
|¡r1t|ƒS t|tttfƒs<|j}t|ƒ}t|ƒrRˆ  ttˆ jˆ  |¡ƒƒ¡S t	 |¡rdˆ  tttˆ  |¡ƒƒ¡S t|tƒrvˆ  ‡ fdd„|j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|ƒs¨t|ƒrºt|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...c                   s   g | ]}t  |ˆ jd k¡‘qS )r«   )rw   r©   ré   r¬   r—   rM   rT   rÃ   ª  ó    z=CliSettingsSource._metavar_format_recurse.<locals>.<listcomp>rZ   )r  NrÔ  FÚrootr  ztyping.rú   ztyping_extensions.)#rA   r@   rZ   rX   rf   r#   ÚreprÚtypingÚ
ForwardRefr(   Úis_typealiastyperV   r.   r/   rÁ   rS   r   r)   r  rÎ   ÚmapÚ_metavar_format_recurser  Ú
is_literalr-   r   r±   r«  rÞ   r$   r%   rd   r?   rª   r§   )rQ   r  ÚoriginrM   r—   rT   r  “  sL   


ÿ
þþ
ÿÿý
z)CliSettingsSource._metavar_format_recursec                 C  s   |   |¡ dd¡S )NrK  rA  )r  r§   r  rM   rM   rT   rÝ  ¾  s   z!CliSettingsSource._metavar_formatc                 C  s   | j d u rdS | j jdffS )NrM   F)rõ   rþ   r—   rM   rM   rT   rÄ  Á  s   
z$CliSettingsSource._root_env_prefixesc                   s,   ˆ j d u s	ˆ j jsdS t‡ fdd„|D ƒƒS )NrM   c                 3  s$   � | ]}|› ˆ j j› �d fV  qdS )TN)rõ   rû   )r”   Úenv_namer—   rM   rT   r®   É  r,  z9CliSettingsSource._nested_env_prefixes.<locals>.<genexpr>)rõ   rû   r°   )rQ   r  rM   r—   rT   rÙ  Æ  s
   ÿz&CliSettingsSource._nested_env_prefixesr  c                 C  s   | j d ur| j js| ¡ S |S r¸   )rõ   r|   rô  )rQ   r  rM   rM   rT   Ú_display_env_var_nameÍ  s   z'CliSettingsSource._display_env_var_namec                 C  s¸   | j d u s|  |¡st|jv st|jv rdS g }t | j ¡}|D ]7\}}||_| |¡}| ||¡D ]$\}	}
}	|rF|rF|
 	|¡sF|› |
› �}
|  
|
¡}|rV||vrV| |¡ q2q t|ƒS rL   )rõ   r	  r7   r»   r:   r  rþ   Ú_apply_case_sensitiveÚ_extract_field_infor	  r   rs   r°   )rQ   rz   rŽ   rº  r  Úenv_settings_sourcerþ   Úforce_env_prefixÚnormalized_env_prefixr¥   r  Údisplay_env_namerM   rM   rT   rÚ  Ò  s(   
ÿ




€ûz*CliSettingsSource._get_field_env_var_namesÚ	help_textc                 C  s0   |s|S dd  |¡› d�}|r|› d|› �S |S )Nz[env: z | rZ  r.  )r6  )rQ   r'  r  Úenv_helprM   rM   rT   r
  î  s   z'CliSettingsSource._help_format_env_varsr    c                 C  s"   |r|t kr|| j|< d S d S d S r¸   )rÛ  r  )rQ   r    r'  r  rM   rM   rT   rã  ô  s   ÿz$CliSettingsSource._add_env_var_namesc           
      C  sv  |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 }nld| j› d�}tt	|ƒƒsLt
t	|ƒƒrVdt||ƒ› d�}n?|td fvrjt|ƒrjd|  |¡› d�}n+|jtd fvr†t|j|jƒ}	d|	d u r€|jn|	› d�}n|jd ur•d|  |j¡› d�}t|jvr¥||r¢d	|› �n|7 }|  ||¡}tt	| jƒtƒr¹| d
d¡S |S )Nrú   zifdef: z (z	required)ú(z
(default: ú)z(default factory: r.  ú%z%%)rb   r	  rÛ  r‹  r'   r7   r»   rÞ   r$   rÁ   r%   rd   r@   rÝ  r×   r=   rª   r  r9   r
  rØ  r“  r   r§   )
rQ   rz   rŽ   r¸  rÉ  r  Ú_helpÚifdefr×   Ú	enum_namerM   rM   rT   rÜ  ø  s,   
 €

 zCliSettingsSource._help_formatc                 C  s"   |j r|j nd}|tkpt|jv S )Nrú   )rb   rÛ  r»   )rQ   rŽ   r,  rM   rM   rT   r	    s   z&CliSettingsSource._is_field_suppressedr   ÚvalueÚalias_path_only_defaultsúlist[Any] | dict[str, Any]c                 C  sÚ   t dd„ |j|jf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  s<   � | ]}t |ttfƒrt |tƒr|ntt|jd  ƒV  qdS )r   N)rf   r   r   r   Úchoicesrö  rM   rM   rT   r®      s   € ý
ÿzDCliSettingsSource._update_alias_path_only_default.<locals>.<genexpr>rC   rH  rú   r   )
r5  r÷  r¼   ÚpathÚ
setdefaultr   rƒ   rü  r2  rµ   )rQ   r   r/  rŽ   r0  Ú
alias_pathÚalias_nested_pathsÚalias_defaultÚcurrent_pathÚnested_pathÚalias_path_indexrM   rM   rT   Ú_update_alias_path_only_default  s$   
þ

"z1CliSettingsSource._update_alias_path_only_defaultrm  ú str | list[Any] | dict[str, Any]Ú
list_styleú#Literal['json', 'argparse', 'lazy']Ú
dict_styleúLiteral['json', 'env']ú&list[str | list[Any] | dict[str, Any]]c                 C  s�   |g}t |tƒrFt |tƒr1|dkr!d dd„ t |¡D ƒ¡g}|S |dkr/dd„ t |¡D ƒ}|S t |tƒrF|dkrFd	d„ t |¡ ¡ D ƒ}|S )
NÚlazyrA  c                 s  s   � | ]}|› V  qd S r¸   rM   ©r”   ÚvrM   rM   rT   r®   D  s   € z9CliSettingsSource._coerce_value_styles.<locals>.<genexpr>Úargparsec                 S  s   g | ]}|› ‘qS rM   rM   rC  rM   rM   rT   rÃ   F  r"  z:CliSettingsSource._coerce_value_styles.<locals>.<listcomp>Úenvc                 S  s   g | ]\}}|› d |› �‘qS )r|  rM   )r”   ÚkrD  rM   rM   rT   rÃ   H  r  )rf   rV   rÎ   r6  rm  rn  rg   rœ   )rQ   r¸  r/  r=  r?  r‘   rM   rM   rT   Ú_coerce_value_styles9  s   

üþz&CliSettingsSource._coerce_value_stylesÚserialized_argsúdict[str, list[str]]Úpositionals_firstc                 C  s,   |s
| d | d  n| d | d  | d  S )NÚoptionalÚ
positionalÚ
subcommandrM   )rI  rK  rM   rM   rT   Ú_flatten_serialized_argsK  s
   ÿüz*CliSettingsSource._flatten_serialized_argsr3   Ú_is_submodelc                 C  sF  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rY|	 | t|ƒ¡¡ | j||||dd�}|	|  ||¡7 }	qtt|ƒƒsett|ƒƒr‚| j||||dd�}||d 7 }||d 7 }|	|d 7 }	qt d|j¡}|r�| ¡ nd\}}t|tttfƒr t |¡nt|ƒ}|jr¯|  ||||¡}t |jv rØt|tƒr»|n|gD ]}t|tttfƒrÍt |¡nt|ƒ}| |¡ q¾q|j! "d¡t#krì|d	u rì|d
krì|d7 }| j$||||d�D ]}| |› |› �¡ |j! "d¡t#ddfv�r| |¡ qõqdd„ |D ƒdd„ |D ƒ|	dœS )NT)r=  r?  rK  rP  rL  rM  rN  z(-*)(.+))rú   rú   rÈ  Fz--rÖ  )r=  r?  rì  rÕ  c                 S  ó$   g | ]}t |tƒst |¡n|‘qS rM   ©rf   rV   rm  ro  ©r”   r/  rM   rM   rT   rÃ   ¡  ó   $ z6CliSettingsSource._serialized_args.<locals>.<listcomp>c                 S  rQ  rM   rR  rS  rM   rM   rT   rÃ   ¢  rT  )rL  rM  rN  )%r?   rÁ   rÙ   rœ   rd   r×   r8   r»   r5  rL  r1  r‘   r�   rs   rž   Ú_serialized_argsrO  r$   r%   r›  rœ  r¾   Úgroupsrf   rg   rÎ   rÏ   rm  ro  rV   rË   r;  r7   rI   re   r   rH  )rQ   rx   r=  r?  rK  rP  r0  r�  r�  rŽ  rz   rŽ   r¸  rv   Úsub_argsr¡  Ú
flag_charsr   r/  Úcoerced_valuerM   rM   rT   rU  V  sv   "

ûû ÿ
" 
ÿ
€ù
ýz"CliSettingsSource._serialized_args)8rÙ   rÚ   rÛ   r_   rÜ   rÝ   rÞ   r_   rß   r�   rà   r�   rá   r�   râ   r�   rã   r�   rG   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î   rô   r   rõ   rö   r÷   rø   rJ   rK   )rJ   r  )rJ   r‡   )r†   r  rJ   r  )r  r  rJ   r  )r†   r  r  r  rJ   r  )rJ   r  )r  r  rJ   r   )r  r@  rJ   r…   )r  r@  rz   rV   r$  r…   rJ   rH   )rP  r…   rz   rV   rJ   rQ  )rW  r…   rz   rV   rJ   rV   )rP  r…   rz   rV   rJ   rV   )rc  rV   rW  r…   rp  rH   rJ   rV   )rc  rV   rW  r…   rJ   rV   )rc  rV   rW  r…   rT  rx  rJ   rV   )rx   r³   rz   rV   rŽ   r&   rJ   rK   )rx   r³   rJ   r†  )rJ   rÔ   )
r”  rî   r•  rV   r†   r   rI   r   rJ   r–  )rð   rî   rJ   r–  )rì   rÔ   rí   rî   rï   rî   rð   rî   rñ   rî   rò   rî   ró   rî   rô   r   rJ   rK   )rJ   rK   )FNTNrM   )ry   r   rx   r³   rµ  r…   r{   rV   r¶  rV   r�  r   r·  r…   r¸  r   rÉ  rH   rÊ  rË  rÌ  rH   r¹  rÍ  rº  rÎ  rJ   r   )rI   r‡   rŽ   r&   rÐ   rH   rJ   rK   )rI   r‡   rŽ   r&   r¸  r   rJ   rK   )
rI   r‡   rŽ   r&   r¶   rV   r¸  r   rJ   rï  )rv   rw   r¶  rV   r·  r…   rµ  r…   rÊ  rõ  rÌ  rH   rJ   r…   rL   )"ry   r   rx   r³   rq   rr   rµ  r…   r{   rV   r¶  rV   r   rV   rç  r…   rI   r‡   rz   rV   rŽ   r&   rÉ   rˆ   r¸  r   rÉ  rH   r¹  rÍ  r  rˆ   rJ   rK   )ry   r   r’   rŠ   rµ  r…   r{   rV   r¶  rV   r�  r   rJ   rK   )r  r   rJ   rˆ   r¸   )r†   r…   r  r_   rJ   rV   )r  r   rJ   rV   )rJ   rÎ  )r  rˆ   rJ   rÎ  )r  rV   rJ   rV   )rz   rV   rŽ   r&   rº  rÎ  rJ   rˆ   )r'  rV   r  rˆ   rJ   rV   )r    rV   r'  rV   r  rˆ   rJ   rK   )rM   )rz   rV   rŽ   r&   r¸  r   rÉ  rH   r  rˆ   rJ   rV   )rŽ   r&   rJ   rH   )
r   rV   r/  r   rŽ   r&   r0  r‡   rJ   r1  )rm  rm  )
r¸  r   r/  r<  r=  r>  r?  r@  rJ   rA  )rI  rJ  rK  rH   rJ   r…   )rm  rm  FF)rx   r3   r=  r>  r?  r@  rK  rH   rP  rH   rJ   rJ  ):rX   rY   rZ   rl   r   Úadd_argumentr®  r   Ú
add_parserÚadd_subparsersÚformat_helpr   rO   Úpropertyr  r   r  r  r0  rC  rV  rg  rD  rj  rk  rl  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;  rH  ÚstaticmethodrO  rU  r[   rM   rM   rR   rT   rØ   .  sØ    6ä üÿ
5




-



-

&÷
6ò 
-


;ï
Y!	+
ú! ûúrØ   )r]   r^   rJ   r_   )rp   r   rq   rr   rJ   rK   )qrl   Ú
__future__r   Ú_annotationsr  rm  r›  rš  r  r  rE  r   r   r   r   r   r   Úcollectionsr	   Úcollections.abcr
   r   r   Úenumr   Ú	functoolsr   Ú	itertoolsr   Útextwrapr   Útypesr   r   r   r   r   r   r   r   r   r   r   r   Úpydanticr   r   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/   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rF  rD   Úpydantic_settings.mainrE   rF   r\   ro   rt   rw   rÔ   ÚCliSubCommandÚCliPositionalArgrH   rÕ   r€  r�  r‚  rƒ  rÛ  ÚCliSuppressrÎ   rV   ÚCliUnknownArgsrØ   rM   rM   rM   rT   Ú<module>   sd     4 0(


!
 