o
    wir                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ ddlmZmZ ddlmZmZmZ d	Zed
ZG dd dZeG dd deZdee defddZe	dddddZdee dedefddZdS )    N)
ModuleType)AnyTypeTypeVarcast)	lru_cache)	BaseModel   )Protocolruntime_checkable)PYDANTIC_V2Extrais_typeddict)validateTc                   @   s   e Zd ZU ejZeed< dS )ConfigextraN)__name__
__module____qualname__r   Zforbidr   __annotations__ r   r   G/home/app/Keep/.python/lib/python3.10/site-packages/prisma/validator.pyr      s   
 r   c                   @   s   e Zd ZU eed< dS )CachedModel__pydantic_model__N)r   r   r   r   r   r   r   r   r   r      s   
 r   typreturnc                 C   s   t j| j S )N)sysmodulesr   )r   r   r   r   _get_module   s   r   )maxsizec                     sL   t r	ddlm}  nddlm}  | j dtdtdtt f fdd}|| _dS )	zPydantic does not resolve forward references for TypedDict types properly yet

    see https://github.com/samuelcolvin/pydantic/pull/2761
    r   )annotated_typestypeddict_clskwargsr   c                    s   | d| j  | fi |S )Nr   )
setdefaultr   )r"   r#   Zcreate_modelr   r   patched_create_model-   s   z,patch_pydantic.<locals>.patched_create_modelN)r   pydantic.v1r!   pydanticcreate_model_from_typeddictr   r   r   )r!   r&   r   r%   r   patch_pydantic   s   
r*   typedatac                 C   s   t r	ddlm} nddlm} t  t| std|  dt| tr'| j	}n|| t
d}|jd	i tt|  || _	||}tt|jddS )
a8  Validate untrusted data matches a given TypedDict

    For example:

    from prisma import validate, types
    from prisma.models import User

    def user_create_handler(data: Any) -> None:
        validated = validate(types.UserCreateInput, data)
        user = await User.prisma().create(data=validated)
    r   )r)   z)Only TypedDict types are supported, got: z	 instead.)Z
__config__T)Zexclude_unsetNr   )r   r'   r)   r(   r*   r   	TypeError
isinstancer   r   r   Zupdate_forward_refsvarsr   Z	parse_objr   r   dict)r+   r,   r)   modelinstancer   r   r   r   8   s    

r   )r   N)r   typesr   typingr   r   r   r   	functoolsr   r(   r   _typesr
   r   _compatr   r   r   __all__r   r   r   r   r*   r   r   r   r   r   <module>   s     