o
    pfB                     @  s   d Z ddlmZ ddlZddlmZmZ ddlmZ dZ	ej
di ejG dd	 d	Zej
di ejG d
d dZej
di ejG dd dZdS )z!Support for alias configurations.    )annotationsN)CallableLiteral   )_internal_dataclass)AliasGenerator	AliasPathAliasChoicesc                   @  s.   e Zd ZU dZded< dd
dZdddZdS )r   zUsage docs: https://docs.pydantic.dev/2.6/concepts/alias#aliaspath-and-aliaschoices

    A data class used by `validation_alias` as a convenience to create aliases.

    Attributes:
        path: A list of string or integer aliases.
    zlist[int | str]path	first_argstrargs	str | intreturnNonec                 G     |gt | | _d S N)listr
   )selfr   r    r   I/home/ertert/spirit/venv/lib/python3.10/site-packages/pydantic/aliases.py__init__      zAliasPath.__init__list[str | int]c                 C  s   | j S )zvConverts arguments to a list of string or integer aliases.

        Returns:
            The list of aliases.
        )r
   )r   r   r   r   convert_to_aliases   s   zAliasPath.convert_to_aliasesN)r   r   r   r   r   r   )r   r   __name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r      
   
 
r   c                   @  s.   e Zd ZU dZded< ddd	ZdddZdS )r	   zUsage docs: https://docs.pydantic.dev/2.6/concepts/alias#aliaspath-and-aliaschoices

    A data class used by `validation_alias` as a convenience to create aliases.

    Attributes:
        choices: A list containing a string or `AliasPath`.
    zlist[str | AliasPath]choicesfirst_choicestr | AliasPathr   r   c                 G  r   r   )r   r"   )r   r#   r"   r   r   r   r   0   r   zAliasChoices.__init__list[list[str | int]]c                 C  s:   g }| j D ]}t|tr||  q||g q|S )zConverts arguments to a list of lists containing string or integer aliases.

        Returns:
            The list of aliases.
        )r"   
isinstancer   appendr   )r   aliasescr   r   r   r   3   s   

zAliasChoices.convert_to_aliasesN)r#   r$   r"   r$   r   r   )r   r%   r   r   r   r   r   r	   $   r!   r	   c                   @  sJ   e Zd ZU dZdZded< dZded< dZded< dddZdddZ	dS )r   a  Usage docs: https://docs.pydantic.dev/2.6/concepts/alias#using-an-aliasgenerator

    A data class used by `alias_generator` as a convenience to create various aliases.

    Attributes:
        alias: A callable that takes a field name and returns an alias for it.
        validation_alias: A callable that takes a field name and returns a validation alias for it.
        serialization_alias: A callable that takes a field name and returns a serialization alias for it.
    NzCallable[[str], str] | Nonealiasz6Callable[[str], str | AliasPath | AliasChoices] | Nonevalidation_aliasserialization_alias
alias_kind;Literal['alias', 'validation_alias', 'serialization_alias']allowed_types<tuple[type[str] | type[AliasPath] | type[AliasChoices], ...]
field_namer   r   %str | AliasPath | AliasChoices | Nonec                 C  sH   d}t | | }r"||}|r"t||s"td| d| d| d|S )zGenerate an alias of the specified kind. Returns None if the alias generator is None.

        Raises:
            TypeError: If the alias generator produces an invalid type.
        Nz	Invalid `z	` type. `z!` generator must produce one of ``)getattrr&   	TypeError)r   r-   r/   r1   r*   alias_generatorr   r   r   _generate_aliasR   s   zAliasGenerator._generate_aliasDtuple[str | None, str | AliasPath | AliasChoices | None, str | None]c                 C  s>   |  dtf|}|  dtttf|}|  dtf|}|||fS )zGenerate `alias`, `validation_alias`, and `serialization_alias` for a field.

        Returns:
            A tuple of three aliases - validation, alias, and serialization.
        r*   r+   r,   )r7   r   r	   r   )r   r1   r*   r+   r,   r   r   r   generate_aliasesf   s   
zAliasGenerator.generate_aliases)r-   r.   r/   r0   r1   r   r   r2   )r1   r   r   r8   )
r   r   r   r   r*   r    r+   r,   r7   r9   r   r   r   r   r   B   s   
 

r   r   )r   
__future__r   dataclassestypingr   r   	_internalr   __all__	dataclass
slots_truer   r	   r   r   r   r   r   <module>   s    