o
    U�¿jµ"  ã                   @  s  d dl mZ d dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZmZmZ ddlmZmZ ddlmZ erLddlmZ dd	lmZ dd
lmZ edeeeef d�ZedƒZG dd„ deeef ƒZG dd„ de	e ƒZ d#dd„Z!d$d%dd„Z"d$d&d d!„Z#d"S )'é    )Úannotations)ÚIteratorÚMapping)ÚTYPE_CHECKINGÚAnyÚCallableÚGenericÚLiteralÚTypeVarÚUnion)Ú
CoreSchemaÚSchemaSerializerÚSchemaValidatoré   )ÚPydanticErrorCodesÚPydanticUserError)ÚPluggableSchemaValidator)ÚPydanticDataclass)Ú	BaseModel)ÚTypeAdapterÚValSer)ÚboundÚTc                   @  sV   e Zd ZdZdZd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S )%ÚMockCoreSchemaz±Mocker for `pydantic_core.CoreSchema` which optionally attempts to
    rebuild the thing it's mocking when one of its methods is accessed and raises an error if that fails.
    ©Ú_error_messageÚ_codeÚ_attempt_rebuildÚ_built_memoN©Úattempt_rebuildÚerror_messageÚstrÚcoder   r    ú&Callable[[], CoreSchema | None] | NoneÚreturnÚNonec                C  s   || _ || _|| _d | _d S ©Nr   )Úselfr!   r#   r    © r)   ú[/home/dinkstrade/pdmp/venv/lib/python3.10/site-packages/pydantic/_internal/_mock_val_ser.pyÚ__init__   s   
zMockCoreSchema.__init__Úkeyr   c                 C  s   |   ¡  |¡S r'   )Ú
_get_builtÚ__getitem__)r(   r,   r)   r)   r*   r.   (   s   zMockCoreSchema.__getitem__Úintc                 C  ó   |   ¡  ¡ S r'   )r-   Ú__len__©r(   r)   r)   r*   r1   +   ó   zMockCoreSchema.__len__úIterator[str]c                 C  r0   r'   )r-   Ú__iter__r2   r)   r)   r*   r5   .   r3   zMockCoreSchema.__iter__r   c                 C  s@   | j d ur| j S | jr|  ¡ }|d ur|| _ |S t| j| jd�‚©N©r#   ©r   r   r   r   r   ©r(   Úschemar)   r)   r*   r-   1   s   
zMockCoreSchema._get_builtúCoreSchema | Nonec                 C  s4   d | _ | jr|  ¡ }|d ur|S t| j| jd�‚d S r6   r8   r9   r)   r)   r*   Úrebuild<   s   zMockCoreSchema.rebuild)r!   r"   r#   r   r    r$   r%   r&   )r,   r"   r%   r   )r%   r/   )r%   r4   )r%   r   )r%   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r+   r.   r1   r5   r-   r<   r)   r)   r)   r*   r      s    û



r   c                   @  s8   e Zd ZdZdZddœddd„Zddd„Zddd„ZdS )Ú
MockValSerzÚMocker for `pydantic_core.SchemaValidator` or `pydantic_core.SchemaSerializer` which optionally attempts to
    rebuild the thing it's mocking when one of its methods is accessed and raises an error if that fails.
    )r   r   Ú_val_or_serr   Nr   r!   r"   r#   r   Ú
val_or_serú"Literal['validator', 'serializer']r    ú"Callable[[], ValSer | None] | Noner%   r&   c                C  s(   || _ |dkr	tnt| _|| _|| _d S )NÚ	validator)r   r   r   rC   r   r   )r(   r!   r#   rD   r    r)   r)   r*   r+   N   s   
zMockValSer.__init__Úitemc                 C  s@   d}| j r|   ¡ }|d urt||ƒS t| j|ƒ t| j| jd�‚)NTr7   )r   ÚgetattrrC   r   r   r   )r(   rH   Ú__tracebackhide__Úval_serr)   r)   r*   Ú__getattr__[   s   
zMockValSer.__getattr__úValSer | Nonec                 C  s.   | j r|   ¡ }|d ur|S t| j| jd�‚d S r6   )r   r   r   r   )r(   rK   r)   r)   r*   r<   f   s   zMockValSer.rebuild)
r!   r"   r#   r   rD   rE   r    rF   r%   r&   )rH   r"   r%   r&   )r%   rM   )r=   r>   r?   r@   rA   r+   rL   r<   r)   r)   r)   r*   rB   G   s    ú
rB   Úadapterr   r%   r&   c                   sz   t ˆ jƒ}d|› d|› d�}d‡ fdd	„}t|d
|dd„ ƒd�ˆ _t|d
d|dd„ ƒd�ˆ _t|d
d|dd„ ƒd�ˆ _dS )z­Set `core_schema`, `validator` and `serializer` to mock core types on a type adapter instance.

    Args:
        adapter: The type adapter instance to set the mocks on
    z`TypeAdapter[z,]` is not fully defined; you should define `zC` and all referenced types, then call `.rebuild()` on the instance.Úattr_fnúCallable[[TypeAdapter], T]r%   úCallable[[], T | None]c                   s   d‡‡ fdd„}|S )Nr%   úT | Nonec                     s   ˆ j ddd�durˆˆ ƒS d S ©NFé   )Úraise_errorsÚ_parent_namespace_depth)r<   r)   )rN   rO   r)   r*   Úhandler}   ó   zCset_type_adapter_mocks.<locals>.attempt_rebuild_fn.<locals>.handler©r%   rR   r)   ©rO   rW   ©rN   ©rO   r*   Úattempt_rebuild_fn|   ó   z2set_type_adapter_mocks.<locals>.attempt_rebuild_fnúclass-not-fully-definedc                 S  ó   | j S r'   )Úcore_schema©Útar)   r)   r*   Ú<lambda>‡   ó    z(set_type_adapter_mocks.<locals>.<lambda>©r#   r    rG   c                 S  r`   r'   )rG   rb   r)   r)   r*   rd   �   re   ©r#   rD   r    Ú
serializerc                 S  r`   r'   )rh   rb   r)   r)   r*   rd   “   re   N)rO   rP   r%   rQ   )r"   Ú_typer   ra   rB   rG   rh   )rN   Ú	type_reprÚundefined_type_error_messager]   r)   r[   r*   Úset_type_adapter_mocksp   s*   
ÿ
ý
ü
ürl   úall referenced typesÚclsútype[BaseModel]Úundefined_namer"   c                   sz   dˆ j › d|› dˆ j › d�}d‡ fd	d
„}t|d|dd„ ƒd�ˆ _t|dd|dd„ ƒd�ˆ _t|dd|dd„ ƒd�ˆ _dS )a  Set `__pydantic_core_schema__`, `__pydantic_validator__` and `__pydantic_serializer__` to mock core types on a model.

    Args:
        cls: The model class to set the mocks on
        undefined_name: Name of the undefined thing, used in error messages
    ú`ú*` is not fully defined; you should define z, then call `z.model_rebuild()`.rO   úCallable[[type[BaseModel]], T]r%   rQ   c                   s   d‡ ‡fdd„}|S )Nr%   rR   c                     s   ˆj ddd�durˆ ˆƒS d S rS   )Úmodel_rebuildr)   )rO   rn   r)   r*   rW   ¤   rX   z<set_model_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerrY   r)   rZ   ©rn   r\   r*   r]   £   r^   z+set_model_mocks.<locals>.attempt_rebuild_fnr_   c                 S  r`   r'   ©Ú__pydantic_core_schema__©Úcr)   r)   r*   rd   ®   re   z!set_model_mocks.<locals>.<lambda>rf   rG   c                 S  r`   r'   ©Ú__pydantic_validator__rx   r)   r)   r*   rd   ´   re   rg   rh   c                 S  r`   r'   ©Ú__pydantic_serializer__rx   r)   r)   r*   rd   º   re   N)rO   rs   r%   rQ   )r=   r   rw   rB   r{   r}   ©rn   rp   rk   r]   r)   ru   r*   Úset_model_mocks—   s,   ÿÿ
ý
ü
ür   útype[PydanticDataclass]c                   sˆ   ddl m‰ dˆ j› d|› dˆ j› d�}d‡ ‡fdd„}t|d|dd„ ƒd�ˆ _t|dd|dd„ ƒd�ˆ _t|dd|dd„ ƒd�ˆ _dS )zèSet `__pydantic_validator__` and `__pydantic_serializer__` to `MockValSer`s on a dataclass.

    Args:
        cls: The model class to set the mocks on
        undefined_name: Name of the undefined thing, used in error messages
    r   )Úrebuild_dataclassrq   rr   z4, then call `pydantic.dataclasses.rebuild_dataclass(z)`.rO   ú&Callable[[type[PydanticDataclass]], T]r%   rQ   c                   s   d‡ ‡‡fdd„}|S )Nr%   rR   c                     s   ˆˆddd�durˆ ˆƒS d S rS   r)   r)   )rO   rn   r�   r)   r*   rW   Í   rX   z@set_dataclass_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerrY   r)   rZ   ©rn   r�   r\   r*   r]   Ì   s   z/set_dataclass_mocks.<locals>.attempt_rebuild_fnr_   c                 S  r`   r'   rv   rx   r)   r)   r*   rd   ×   re   z%set_dataclass_mocks.<locals>.<lambda>rf   rG   c                 S  r`   r'   rz   rx   r)   r)   r*   rd   Ý   re   rg   rh   c                 S  r`   r'   r|   rx   r)   r)   r*   rd   ã   re   N)rO   r‚   r%   rQ   )Údataclassesr�   r=   r   rw   rB   r{   r}   r~   r)   rƒ   r*   Úset_dataclass_mocks¾   s.   ÿÿ
ý
ü
ür…   N)rN   r   r%   r&   )rm   )rn   ro   rp   r"   r%   r&   )rn   r€   rp   r"   r%   r&   )$Ú
__future__r   Úcollections.abcr   r   Útypingr   r   r   r   r	   r
   r   Úpydantic_corer   r   r   Úerrorsr   r   Úplugin._schema_validatorr   r„   r   Úmainr   Útype_adapterr   r   r   r"   r   rB   rl   r   r…   r)   r)   r)   r*   Ú<module>   s"    $2
)''