
    ,h{                        d dl mZ d dlZd dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ erdd	lmZ dd
lmZ  G d d      Z e       ZddZddZ	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 	 	 	 	 ddZy)    )annotationsN)	Parameter	Signature	signature)TYPE_CHECKINGAnyCallable)PydanticUndefined   )is_valid_identifier   )ExtraValues	FieldInfoc                      e Zd Zd Zy)_HAS_DEFAULT_FACTORY_CLASSc                     y)Nz	<factory> )selfs    _/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/pydantic/_internal/_signature.py__repr__z#_HAS_DEFAULT_FACTORY_CLASS.__repr__   s        N)__name__
__module____qualname__r   r   r   r   r   r      s    r   r   c                    t        |j                  t              r!t        |j                        r|j                  S t        |j                  t              r!t        |j                        r|j                  S | S )a  Extract the correct name to use for the field when generating a signature.

    Assuming the field has a valid alias, this will return the alias. Otherwise, it will return the field name.
    First priority is given to the alias, then the validation_alias, then the field name.

    Args:
        field_name: The name of the field
        field_info: The corresponding FieldInfo object.

    Returns:
        The correct name to use when generating a signature.
    )
isinstancealiasstrr   validation_alias)
field_name
field_infos     r   _field_name_for_signaturer#      s^     *""C(-@AQAQ-R*--s38KJLgLg8h***r   c                N   ddl m} | j                  }t        ||      r| j                  }|dk(  rt
        }|j                  }|t        u r3|j                  t        u rt        j                  }nt        j                  }| j                  |t        | j                  |      |      S | S )zModify the signature for a parameter in a dataclass where the default value is a FieldInfo instance.

    Args:
        param (Parameter): The parameter

    Returns:
        Parameter: The custom processed parameter
    r   r   r   )
annotationnamedefault)fieldsr   r'   r   r%   r   r
   default_factoryr   emptydataclasses_HAS_DEFAULT_FACTORYreplacer#   r&   )paramr   param_defaultr%   r'   s        r   _process_param_defaultsr0   .   s     #MMM-+%%
 J  '''',,0AA#// &::}}!(A%**m(\fm  
 	
 Lr   c                x   ddl m} t        |       j                  j	                         }i }d}d} ||dd      D ]  }	|j                  |	j                        rPt        ||	j                     dd      du r;|	j                  t        |	j                  ||	j                                 }	|	j                  d	k(  r|	j                  t        
      }	|	j                  |	j                  u r|	}|	||	j                  <    |r|}
|j                         D ]  \  }}t        ||      }||v s||v rt        |      s|
r|}nd}.|j!                         rt"        j$                  }n|j&                  t(        }n|j*                  }t#        |t"        j,                  |j/                         |      ||<    |dk(  rd}|r|rdt"        j0                  fdt"        j                  fg}|D cg c]  }|j                  |j                  f c}|k(  rd}n|j                  }||v r
|dz  }||v r
|j                  |      ||<   |S c c}w )zaGenerate a mapping of parameter names to Parameter objects for a pydantic BaseModel or dataclass.r   )isliceNFr   initT)r&   r   )r%   )r%   r'   allowr   data
extra_data_)	itertoolsr2   r   
parametersvaluesgetr&   getattrr-   r#   r%   r   kindVAR_KEYWORDitemsr   is_requiredr   r*   r)   r,   r'   KEYWORD_ONLYrebuild_annotationPOSITIONAL_ONLY)r3   r(   validate_by_nameextrar2   present_paramsmerged_paramsvar_kw
use_var_kwr.   allow_namesr!   field
param_namer'   default_model_signaturepvar_kw_names                     r   _generate_signature_parametersrP   P   sA    !t_//668N*,MFJ40 * ::ejj!vejj)648EAMM'@VTYT^T^M_'`MaEu$MMSM1E::***F$)ejj!* &!' 	J2:uEJ]*jM.I&z2!+J!%J  "#//&&2.--(1&& 335	)M*%+	8 
* Y../Y**+#
 '55QVVQVV59PP&K !++K V#3K V#%+^^^%Ek" 6s   H7c                    t        | |||      }|r,|j                         D ci c]  \  }}|t        |       }}}t        t	        |j                               d      S c c}}w )ay  Generate signature for a pydantic BaseModel or dataclass.

    Args:
        init: The class init.
        fields: The model fields.
        validate_by_name: The `validate_by_name` value of the config.
        extra: The `extra` value of the config.
        is_dataclass: Whether the model is a dataclass.

    Returns:
        The dataclass/BaseModel subclass signature.
    N)r9   return_annotation)rP   r?   r0   r   listr:   )r3   r(   rD   rE   is_dataclassrG   kvs           r   generate_pydantic_signaturerW      sf    & 34AQSXYMCPCVCVCXY41a3A66YY]%9%9%; <PTUU Zs   A!)r!   r   r"   r   returnr   )r.   r   rX   r   )
r3   Callable[..., None]r(   dict[str, FieldInfo]rD   boolrE   ExtraValues | NonerX   zdict[str, Parameter])F)r3   rY   r(   rZ   rD   r[   rE   r\   rT   r[   rX   r   )
__future__r   r+   inspectr   r   r   typingr   r   r	   pydantic_corer
   _utilsr   configr   r(   r   r   r,   r#   r0   rP   rW   r   r   r   <module>rc      s    "  3 3 / / + '$" 
 23 *DQ
Q Q Q 	Q
 Qr V
V V V 	V
 V Vr   