o
    h#                     @  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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)TYPE_CHECKINGAnyCallableGenericIteratorMappingTypeVarUnion)
CoreSchemaSchemaSerializerSchemaValidator)Literal   )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 )%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error_messagestrcoder   r    &Callable[[], CoreSchema | None] | NonereturnNonec                C  s   || _ || _|| _d | _d S Nr   )selfr!   r#   r     r)   ]/var/www/Befach/backend/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 )
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"   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   	type_reprr"   r%   r&   c                   sp   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 )zSet `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
        type_repr: Name of the type used in the adapter, used in error messages
    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   rP   r)   r*   handler}      zCset_type_adapter_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerr%   rS   r)   rP   rX   rN   rP   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  ra   r'   )rG   rc   r)   r)   r*   re      rf   r#   rD   r    
serializerc                 S  ra   r'   )ri   rc   r)   r)   r*   re      rf   N)rP   rQ   r%   rR   )r   rb   rB   rG   ri   )rN   rO   undefined_type_error_messager^   r)   r\   r*   set_type_adapter_mocksp   s(   	


rk   all referenced typesclstype[BaseModel]cls_nameundefined_namec                   sv   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 )aD  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
        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()`.rP   Callable[[type[BaseModel]], T]r%   rR   c                   s   d fdd}|S )Nr%   rS   c                     s   j ddddur S d S rT   )model_rebuildr)   )rP   rm   r)   r*   rX      rY   z<set_model_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerrZ   r)   r[   rm   r]   r*   r^      r_   z+set_model_mocks.<locals>.attempt_rebuild_fnr`   c                 S  ra   r'   __pydantic_core_schema__cr)   r)   r*   re      rf   z!set_model_mocks.<locals>.<lambda>rg   rG   c                 S  ra   r'   __pydantic_validator__rx   r)   r)   r*   re      rf   rh   ri   c                 S  ra   r'   __pydantic_serializer__rx   r)   r)   r*   re      rf   N)rP   rs   r%   rR   )r   rw   rB   r{   r}   rm   ro   rp   rj   r^   r)   ru   r*   set_model_mocks   s,   		


r   type[PydanticDataclass]c                   s   ddl m 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_dataclassrq   rr   z4, then call `pydantic.dataclasses.rebuild_dataclass(z)`.rP   &Callable[[type[PydanticDataclass]], T]r%   rR   c                   s   d fdd}|S )Nr%   rS   c                     s   ddddur S d S rT   r)   r)   )rP   rm   r   r)   r*   rX      rY   z@set_dataclass_mocks.<locals>.attempt_rebuild_fn.<locals>.handlerrZ   r)   r[   rm   r   r]   r*   r^      s   z/set_dataclass_mocks.<locals>.attempt_rebuild_fnr`   c                 S  ra   r'   rv   rx   r)   r)   r*   re      rf   z%set_dataclass_mocks.<locals>.<lambda>rg   rG   c                 S  ra   r'   rz   rx   r)   r)   r*   re      rf   rh   ri   c                 S  ra   r'   r|   rx   r)   r)   r*   re      rf   N)rP   r   r%   rR   )dataclassesr   r   rw   rB   r{   r}   r~   r)   r   r*   set_dataclass_mocks   s.   
	


r   N)rN   r   rO   r"   r%   r&   )rl   )rm   rn   ro   r"   rp   r"   r%   r&   )rm   r   ro   r"   rp   r"   r%   r&   )$
__future__r   typingr   r   r   r   r   r   r	   r
   pydantic_corer   r   r   typing_extensionsr   errorsr   r   plugin._schema_validatorr   r   r   mainr   type_adapterr   r   r   r"   r   rB   rk   r   r   r)   r)   r)   r*   <module>   s$    (2
)(*