
    gx                    &   U d Z ddlmZ ddlZddlmZmZmZmZm	Z	 ddl
mZmZmZmZ ddlmZmZ erddlmZmZmZmZ  ed	      Z e	d
      Zed   Z eej6                        Zded<   	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ G d d      ZddZ ddZ!y)z(Pluggable schema validator for pydantic.    )annotationsN)TYPE_CHECKINGAnyCallableIterableTypeVar)
CoreConfig
CoreSchemaSchemaValidatorValidationError)Literal	ParamSpec   )BaseValidateHandlerProtocolPydanticPluginProtocol
SchemaKindSchemaTypePathPR)on_validate_pythonon_validate_jsonon_validate_stringszlist[Event]eventsc           
     |    ddl m} ddlm}  |       }	|	rt	        | | |||      |||	|xs i       S t        | |      S )zCreate a `SchemaValidator` or `PluggableSchemaValidator` if plugins are installed.

    Returns:
        If plugins are installed then return `PluggableSchemaValidator`, otherwise return `SchemaValidator`.
    r   )r   )get_plugins) r   _loaderr   PluggableSchemaValidatorr   )
schemaschema_typeschema_type_moduleschema_type_nameschema_kindconfigplugin_settingsr   r   pluginss
             V/var/www/openai/venv/lib/python3.12/site-packages/pydantic/plugin/_schema_validator.pycreate_schema_validatorr(      sS     !$mG'-/?@!r
 	
 vv..    c                  D    e Zd ZdZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZy)r   zPluggable schema validator.)_schema_validatorvalidate_jsonvalidate_pythonvalidate_stringsc           
     P   t        ||      | _        g }g }	g }
|D ]W  }	 |j                  ||||||      \  }}}||j                  |       ||	j                  |       |G|
j                  |       Y t        | j                  j                  |      | _	        t        | j                  j                  |	      | _
        t        | j                  j                  |
      | _        y # t        $ r8}t        d|j                   d|j
                  j                   d|       |d }~ww xY w)NzError using plugin `:z`: )r   r+   new_schema_validator	TypeError
__module__	__class____name__appendbuild_wrapperr-   r,   r.   )selfr   r    schema_type_pathr#   r$   r&   r%   python_event_handlersjson_event_handlersstrings_event_handlerspluginpjses                   r'   __init__z!PluggableSchemaValidator.__init__:   s8    "1!@CEACDFFu 55K)9;P_1a
 }%,,Q/}#**1-}&--a0   -T-C-C-S-SUjk*4+A+A+O+OQde -d.D.D.U.UWm n  u"6v7H7H6I6K[K[KdKdJeehijhk lmsttus   C$$	D%-3D  D%c                .    t        | j                  |      S N)getattrr+   )r8   names     r'   __getattr__z$PluggableSchemaValidator.__getattr__[   s    t--t44r)   N)r   r
   r    r   r9   r   r#   r   r$   CoreConfig | Noner&   z Iterable[PydanticPluginProtocol]r%   zdict[str, Any]returnNone)rF   strrI   r   )r5   r3   __qualname____doc__	__slots__rB   rG    r)   r'   r   r   5   sl    %[Ioo o )	o
  o "o 2o (o 
oB5r)   r   c                     |s S t        d |D              t        d |D              t        d |D              t        d |D              t        j                         d fd       }|S )Nc              3  N   K   | ]  }t        |d       s|j                    yw)on_enterN)filter_handlersrR   .0hs     r'   	<genexpr>z build_wrapper.<locals>.<genexpr>c         _nPQS]@^!**n   %%c              3  N   K   | ]  }t        |d       s|j                    yw)
on_successN)rS   r[   rT   s     r'   rW   z build_wrapper.<locals>.<genexpr>d   s      f>a_UVXdEeQ\\>rY   c              3  N   K   | ]  }t        |d       s|j                    yw)on_errorN)rS   r]   rT   s     r'   rW   z build_wrapper.<locals>.<genexpr>e   rX   rY   c              3  N   K   | ]  }t        |d       s|j                    yw)on_exceptionN)rS   r_   rT   s     r'   rW   z build_wrapper.<locals>.<genexpr>f   s      knXY[iHjannnrY   c                     
D ]
  } || i |  	  	| i |}D ]
  } ||        |S # t         $ r}D ]
  } ||         d }~wt        $ r}D ]
  } ||         d }~ww xY wrD   )r   	Exception)argskwargson_enter_handlerresulton_success_handlererroron_error_handler	exceptionon_exception_handlerfunc	on_enters	on_errorson_exceptionson_successess            r'   wrapperzbuild_wrapper.<locals>.wrapperh   s    $-  $1&1 %.t.v. +7&&v. +7 # (1$$U+ )2 ,9((3 -:s    + 	A%AA%A  A%)rb   zP.argsrc   zP.kwargsrI   r   )tuple	functoolswraps)rk   event_handlersrp   rl   rm   rn   ro   s   `  @@@@r'   r7   r7   _   sr    _n__	f>ff_n__	knkk			 	 
	& r)   c                D    t        | |d      }|y|j                  dk(  ryy)zFilter out handler methods which are not implemented by the plugin directly - e.g. are missing
    or are inherited from the protocol.
    NFzpydantic.pluginT)rE   r3   )handler_clsmethod_namehandlers      r'   rS   rS      s1     k;5G			0	0 r)   )NN)r   r
   r    r   r!   rK   r"   rK   r#   r   r$   rH   r%   zdict[str, Any] | NonerI   z*SchemaValidator | PluggableSchemaValidator)rk   Callable[P, R]rt   z!list[BaseValidateHandlerProtocol]rI   ry   )rv   r   rw   rK   rI   bool)"rM   
__future__r   rr   typingr   r   r   r   r   pydantic_corer	   r
   r   r   typing_extensionsr   r   r   r   r   r   r   r   r   Eventlist__args__r   __annotations__r(   r   r7   rS   rO   r)   r'   <module>r      s    . "  B B R R 0aa cNCLOP5>>* * !%-1/// / 	/
 / / +/ 0/@'5 '5T@r)   