a
    Of                     @  s  d dl mZ d dl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 d dlmZ ddlmZmZ ddlmZ erd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dddddZddddddddZ dS )    )annotations)TYPE_CHECKINGAnyCallableGenericIteratorMappingTypeVarUnion)
CoreSchemaSchemaSerializerSchemaValidator)Literal   )PydanticErrorCodesPydanticUserError)PluggableSchemaValidator)PydanticDataclass)	BaseModelValSer)boundTc                   @  sv   e Zd ZdZdZddddddd	d
dZdddddZddddZddddZddddZ	ddddZ
dS )MockCoreSchemazMocker 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strr   z&Callable[[], CoreSchema | None] | NoneNone)error_messagecoder   returnc                C  s   || _ || _|| _d | _d S Nr   )selfr"   r#   r    r'   Y/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pydantic/_internal/_mock_val_ser.py__init__   s    zMockCoreSchema.__init__r   )keyr$   c                 C  s   |   |S r%   )
_get_built__getitem__)r&   r*   r'   r'   r(   r,   '   s    zMockCoreSchema.__getitem__intr$   c                 C  s   |    S r%   )r+   __len__r&   r'   r'   r(   r/   *   s    zMockCoreSchema.__len__zIterator[str]c                 C  s   |    S r%   )r+   __iter__r0   r'   r'   r(   r1   -   s    zMockCoreSchema.__iter__r   c                 C  sD   | j d ur| j S | jr0|  }|d ur0|| _ |S t| j| jdd S Nr#   r   r   r   r   r   )r&   Zschemar'   r'   r(   r+   0   s    
zMockCoreSchema._get_builtzCoreSchema | Nonec                 C  s4   d | _ | jr0|  }|d ur |S t| j| jdd S r2   r4   r&   val_serr'   r'   r(   rebuild;   s    zMockCoreSchema.rebuild)__name__
__module____qualname____doc__	__slots__r)   r,   r/   r1   r+   r7   r'   r'   r'   r(   r      s   r   c                   @  sN   e Zd ZdZdZddddddd	d
ddZdd	dddZddddZdS )
MockValSerzMocker 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   z"Literal['validator', 'serializer']z"Callable[[], ValSer | None] | Noner!   )r"   r#   
val_or_serr   r$   c                C  s(   || _ |dkrtnt| _|| _|| _d S )N	validator)r   r   r   r>   r   r   )r&   r"   r#   r?   r   r'   r'   r(   r)   M   s    zMockValSer.__init__)itemr$   c                 C  sD   d}| j r$|   }|d ur$t||S t| j| t| j| jdd S )NTr3   )r   getattrr>   r   r   r   )r&   rA   Z__tracebackhide__r6   r'   r'   r(   __getattr__Z   s    
zMockValSer.__getattr__zValSer | Noner.   c                 C  s.   | j r*|   }|d ur|S t| j| jdd S r2   )r   r   r   r   r5   r'   r'   r(   r7   e   s    zMockValSer.rebuild)r8   r9   r:   r;   r<   r)   rC   r7   r'   r'   r'   r(   r=   F   s   r=   all referenced typesztype[BaseModel]r    r!   )clscls_nameundefined_namer$   c                   s|   d| d| d| 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 )a&  Set `__pydantic_validator__` and `__pydantic_serializer__` to `MockValSer`s on a model.

    Args:
        cls: The model class to set the mocks on
        cls_name: Name of the model class, used in error messages
        undefined_name: Name of the undefined thing, used in error messages
    `*` is not fully defined; you should define z, then call `z.model_rebuild()`.zCallable[[type[BaseModel]], T]Callable[[], T | None]attr_fnr$   c                   s   dd fdd}|S )NT | Noner.   c                     s"   j ddddur S d S d S NF   )raise_errorsZ_parent_namespace_depth)Zmodel_rebuildr'   )rL   rE   r'   r(   handler}   s    z<set_model_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerr'   rL   rQ   rE   rL   r(   attempt_rebuild_fn|   s    z+set_model_mocks.<locals>.attempt_rebuild_fnclass-not-fully-definedc                 S  s   | j S r%   __pydantic_core_schema__cr'   r'   r(   <lambda>       z!set_model_mocks.<locals>.<lambda>r#   r   r@   c                 S  s   | j S r%   __pydantic_validator__rY   r'   r'   r(   r[      r\   r#   r?   r   
serializerc                 S  s   | j S r%   __pydantic_serializer__rY   r'   r'   r(   r[      r\   N)r   rX   r=   r_   rc   rE   rF   rG   Zundefined_type_error_messagerU   r'   rS   r(   set_model_mockso   s,    		


re   ztype[PydanticDataclass]c                   s   ddl m d| d| d| 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 )a*  Set `__pydantic_validator__` and `__pydantic_serializer__` to `MockValSer`s on a dataclass.

    Args:
        cls: The model class to set the mocks on
        cls_name: Name of the model class, used in error messages
        undefined_name: Name of the undefined thing, used in error messages
    r   )rebuild_dataclassrH   rI   z4, then call `pydantic.dataclasses.rebuild_dataclass(z)`.z&Callable[[type[PydanticDataclass]], T]rJ   rK   c                   s   dd fdd}|S )NrM   r.   c                     s"   ddddur S d S d S rN   r'   r'   )rL   rE   rf   r'   r(   rQ      s    z@set_dataclass_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerr'   rR   rE   rf   rT   r(   rU      s    z/set_dataclass_mocks.<locals>.attempt_rebuild_fnrV   c                 S  s   | j S r%   rW   rY   r'   r'   r(   r[      r\   z%set_dataclass_mocks.<locals>.<lambda>r]   r@   c                 S  s   | j S r%   r^   rY   r'   r'   r(   r[      r\   r`   c                 S  s   | j S r%   rb   rY   r'   r'   r(   r[      r\   N)dataclassesrf   r   rX   r=   r_   rc   rd   r'   rg   r(   set_dataclass_mocks   s.    
	


ri   N)rD   )rD   )!
__future__r   typingr   r   r   r   r   r   r	   r
   Zpydantic_corer   r   r   typing_extensionsr   errorsr   r   Zplugin._schema_validatorr   rh   r   mainr   r   r   r    r   r=   re   ri   r'   r'   r'   r(   <module>   s   (2)* 