ó
    Ð]jŒL  ã                  óš  • % S r SSKJr  SSKrSSKJs  Jr  SSK	r	SSK
r
SSKrSSKrSSKJr  SSK	Jr  SSKJrJrJrJrJrJr  SSKrSSKJr  SSKrSSKJr  S	S
KJrJr  S	SKJ r   \(       a  SSKJ!r!  SSK"J#r#J$r$  SSK%J&r&J'r'  \RP                  RS                  S5      r*\*RW                  S5      r, " S S\SS9r- " S S\SS9r. " S S5      r/S.S jr0\ " S S5      5       r1\1" 5       r2Sr3S\4S'   \5" S \3 5       5      r6S\4S '   Sq7S!\4S"'   S/S# jr8S0S$ jr9S1S% jr:\S& 5       r;\S' 5       r<\" S(5      r=\" S)5      r>S2S* jr?S3S+ jr@S4S, jrAS5S- jrBg)6z.Integration for instrumenting Pydantic models.é    )ÚannotationsN)Ú	dataclass)Ú	lru_cache)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚ	TypedDictÚTypeVar)Ú	ParamSpec)ÚLogfireSpané   )ÚGLOBAL_CONFIGÚPydanticPlugin)Úget_version©ÚValidationError)Ú
SchemaKindÚSchemaTypePath)Ú
CoreConfigÚ
CoreSchemazlogfire.pydanticzpydantic.validationsc                  ó$   • \ rS rSr% SrS\S'   Srg)ÚPluginSettingsé   ah  A typed dict for the Pydantic plugin settings.

This is how you can use the [`PluginSettings`][logfire.integrations.pydantic.PluginSettings]
with a Pydantic model:

```py
from pydantic import BaseModel

from logfire.integrations.pydantic import PluginSettings


class Model(BaseModel, plugin_settings=PluginSettings(logfire={'record': 'all'})):
    a: int
```
ÚLogfireSettingsÚlogfire© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r   ó    ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/logfire/integrations/pydantic.pyr   r      s   ‡ ñð  ÓÚ/r&   r   F)Útotalc                  ó<   • \ rS rSr% SrS\S'    S\S'    S\S'   S	rg
)r   é4   z%Settings for the logfire integration.ÚfloatÚtrace_sample_ratez	list[str]Útagsú$Literal['all', 'failure', 'metrics']Úrecordr   Nr   r   r&   r'   r   r   4   s!   ‡ Ù/àÓØ-Ø
ƒOØ#Ø0Ó0òr&   r   c                  óœ   • \ rS rSrSrSr              SS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSrg)Ú_ValidateWrapperéF   z2Decorator factory for one schema validator method.)Úvalidation_methodÚschema_nameÚ_recordÚ_logfirec                ó$  • Xl         [        U5      U l        X`l        [        R
                  U l        UR                  S0 5      R                  S5      nU(       a7  [        U[        5      (       a  U/nU R                  R                  " U6 U l        g g )Nr   r-   )r3   Úget_schema_namer4   r5   r   ÚDEFAULT_LOGFIRE_INSTANCEr6   ÚgetÚ
isinstanceÚstrÚ	with_tags)Úselfr3   ÚschemaÚ_configÚ_plugin_settingsÚschema_type_pathr/   r-   s           r'   Ú__init__Ú_ValidateWrapper.__init__P   s|   € ð "3Ôô +¨6Ó2ˆÔØŒä×8Ñ8ˆŒð
  ×#Ñ# I¨rÓ2×6Ñ6°vÓ>ˆÞÜ˜$¤×$Ñ$Ø�v�Ø ŸM™M×3Ò3°TÐ:ˆD�Mð r&   c                óÞ  ^ ^^• SSK Jm  T R                  S:X  a%  [        R                  " T5      SUU U4S jj5       nU$ T R                  S:X  a%  [        R                  " T5      SUU U4S jj5       nU$ T R                  nSoCU:H  oU(       dº  [
        R                  " SU4S	X445      S
[        R                  " 5       ;   d  [
        R                  " T 5      (       a  [
        R                  " T 5      OS
[
        R                  " U5      [
        R                  " U5      S.-  nSSU0-  n[        [
        R                  " U5      5      eS=n=pT[        R                  " T5      SU U4S jj5       nU$ )zEDecorator which wraps a schema validator method with instrumentation.r   r   Úallc                ó€  >• [         R                  (       d  T	" U /UQ70 UD6$ TR                  U 5      n T	" U /UQ70 UD6nTR                  X45        TR	                  SS9  U$ ! T a&  nTR                  X55        TR	                  SS9  e S nAf[         a&  nTR                  X65        TR	                  SS9  e S nAff = f©NT)ÚsuccessF)r   Ú_initializedÚ	_on_enterÚ_on_successÚ_count_validationÚ_on_error_spanÚ	ExceptionÚ_on_exception_span)
Ú
input_dataÚargsÚkwargsÚspanÚresultÚerrorÚ	exceptionr   r>   Ú	validators
          €€€r'   Úwrapped_validatorÚ4_ValidateWrapper.__call__.<locals>.wrapped_validatorr   sÑ   ø€ ä$×1×1ñ % ZÐA°$ÒA¸&ÑAÐAð
 —~‘~ jÓ1�ð"Ù& zÐC°DÒC¸FÑC�Fð ×$Ñ$ TÔ2Ø×*Ñ*°4Ð*Ñ8Ø!�Møð 'ó Ø×'Ñ'¨Ô4Ø×*Ñ*°5Ð*Ñ9ØûÜ ó Ø×+Ñ+¨DÔ<Ø×*Ñ*°5Ð*Ñ9Øûðús#   µA# Á#B=Á)!B
Â
B=Â!B8Â8B=Úfailurec                ó<  >• [         R                  (       d  T" U /UQ70 UD6$  T" U /UQ70 UD6nTR                  SS9  U$ ! T a&  nTR                  SS9  TR                  U5        e S nAf[         a&  nTR                  SS9  TR                  U5        e S nAff = frH   )r   rJ   rM   Ú_on_error_logrO   Ú_on_exception_log)	rQ   rR   rS   rU   rV   rW   r   r>   rX   s	         €€€r'   rY   rZ   ’   s±   ø€ ä$×1×1á$ ZÐA°$ÒA¸&ÑAÐAð"Ù& zÐC°DÒC¸FÑC�Fð ×*Ñ*°4Ð*Ñ8Ø!�Møð 'ó Ø×*Ñ*°5Ð*Ñ9Ø×&Ñ& uÔ-ØûÜ ó Ø×*Ñ*°5Ð*Ñ9Ø×*Ñ*¨9Ô5Øûðús#   ¤A ÁBÁ!A(Á(BÁ5!BÂBÚmetrics)ú==)z/%(py2)s
{%(py2)s = %(py0)s._record
} == %(py5)sr>   )Úpy0Úpy2Úpy5zassert %(py7)sÚpy7Nc                ó¾   >• [         R                  (       d  T" U /UQ70 UD6$  T" U /UQ70 UD6nTR                  SS9  U$ ! [         a    TR                  SS9  e f = frH   )r   rJ   rM   rO   )rQ   rR   rS   rU   r>   rX   s       €€r'   rY   rZ   ¨   sw   ø€ ä$×1×1á$ ZÐA°$ÒA¸&ÑAÐAð"Ù& zÐC°DÒC¸FÑC�Fð
 ×*Ñ*°4Ð*Ñ8Ø!�Møô !ó Ø×*Ñ*°5Ð*Ñ9Øðús   ¤A ÁA)rQ   r   rR   r   rS   r   Úreturnr   )Úpydanticr   r5   Ú	functoolsÚwrapsÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)	r>   rX   rY   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8r   s	   ``      @r'   Ú__call__Ú_ValidateWrapper.__call__k   s  ú€ å,ð �<‰<˜5Ó ä�_Š_˜YÓ'÷"ð "ó (ð"ðH !Ð ðQ �\‰\˜YÓ&ô �_Š_˜YÓ'÷"ð "ó (ð"ðH !Ð ð# —<‘<Ð, 9Ð, 9Ñ,×,×,×,Ò,�<×,×,×,×,×,Õ,�4×,×,×,Ñ,�4×,×,Õ,�<×,×,Ó, 9×,×,×,×,×,×,Ó,ä�_Š_˜YÓ'÷"ó (ð"ð !Ð r&   c           	     óœ   • U R                   R                  SU R                  U R                  USSU R                   3S9R	                  5       $ )Nz*Pydantic {schema_name} {validation_method}Úinfoz	pydantic.)r4   r3   rQ   Ú_levelÚ
_span_name)r6   rT   r4   r3   Ú	__enter__)r>   rQ   s     r'   rK   Ú_ValidateWrapper._on_enter¹   sS   € Ø�}‰}×!Ñ!Ø8Ø×(Ñ(Ø"×4Ñ4Ø!ØØ" 4×#9Ñ#9Ð":Ð;ð "ð 
÷ ‰)‹+ð	r&   c                óN   • U R                  USSUS9  UR                  S S S 5        g )NTÚ	succeeded)rI   ÚstatusrU   )Ú_set_span_attributesÚ__exit__)r>   rT   rU   s      r'   rL   Ú_ValidateWrapper._on_successÃ   s3   € Ø×!Ñ!ØØØØð	 	"ñ 	
ð 	�‰�d˜D $Õ'r&   c           
     óŒ   • U R                   R                  SSU R                  UR                  5       UR	                  SS9S.S9  g )NÚwarnz"Validation on {schema_name} failedF©Úinclude_url)r4   Úerror_countÚerrors)ÚlevelÚmsg_templateÚ
attributes)r6   Úlogr4   r‰   rŠ   )r>   rV   s     r'   r]   Ú_ValidateWrapper._on_error_logÌ   sG   € Ø�‰×ÑØØ=à#×/Ñ/Ø$×0Ñ0Ó2ØŸ,™,°5˜,Ð9ñð 	ò 	
r&   c           
     ó¨   • U R                  USSUR                  5       UR                  SS9S9  UR                  S5        UR	                  S S S 5        g )NFÚfailedr‡   )rI   r�   r‰   rŠ   r†   )r‚   r‰   rŠ   Ú	set_levelrƒ   )r>   rT   rV   s      r'   rN   Ú_ValidateWrapper._on_error_span×   sV   € Ø×!Ñ!ØØØØ×)Ñ)Ó+Ø—<‘<¨E�<Ð2ð 	"ñ 	
ð 	�‰�vÔØ�‰�d˜D $Õ'r&   c                ó|   • U R                   R                  SSU R                  [        U5      R                  S.US9  g )NrV   z3Validation on {schema_name} raised {exception_type})r4   Úexception_type)r‹   rŒ   r�   Úexc_info)r6   rŽ   r4   Útyper   )r>   rW   s     r'   r^   Ú"_ValidateWrapper._on_exception_logâ   s?   € Ø�‰×ÑØØNà#×/Ñ/Ü"& y£/×":Ñ":ñð ð 	ò 	
r&   c                óœ   • U R                  USS[        U5      R                   3S9  UR                  [        U5      X"R                  5        g )NFzraised )rI   r�   )r‚   r—   r   rƒ   Ú__traceback__)r>   rT   rW   s      r'   rP   Ú#_ValidateWrapper._on_exception_spaní   sJ   € Ø×!Ñ!ØØØœT )›_×5Ñ5Ð6Ð7ð 	"ñ 	
ð
 	�‰”d˜9“o y×2IÑ2IÕJr&   c               óŠ   • UR                  5       (       a.  UR                  SU0UE5        U=R                  SU-   -  sl        g g )NrI   Ú )Úis_recordingÚset_attributesÚmessage)r>   rT   r�   rI   r�   s        r'   r‚   Ú%_ValidateWrapper._set_span_attributesõ   s@   € Ø×Ñ×ÑØ×Ñ ¨GÐ B°zÐ BÔCØ�LŠL˜C &™LÑ(ŽLð r&   c               ó^   • [         R                  SXR                  U R                  S.5        g )Né   )rI   r4   r3   )Úvalidation_counterÚaddr4   r3   )r>   rI   s     r'   rM   Ú"_ValidateWrapper._count_validationú   s'   € Ü×ÑØ˜7×3CÑ3CÐZ^×ZpÑZpÑqõ	
r&   )r6   r5   r4   r3   N)r3   z?Literal['validate_python', 'validate_json', 'validate_strings']r?   r   r@   úCoreConfig | NonerA   zPluginSettings | dict[str, Any]rB   r   r/   r.   rf   ÚNone)rX   r   rf   r   )rQ   r   )rT   r   rU   r   )rV   r   )rT   r   rV   r   )rW   rO   )rT   r   rW   rO   )
rT   r   r�   r<   rI   Úboolr�   r   rf   r¨   )rI   r©   rf   r¨   )r   r    r!   r"   r#   Ú	__slots__rC   rw   rK   rL   r]   rN   r^   rP   r‚   rM   r%   r   r&   r'   r1   r1   F   s…   † Ù<ð€Ið;àZð;ð ð;ð #ð	;ð
 :ð;ð )ð;ð 5ð;ð 
ô;ô6L!ô\ô(ô	
ô	(ô	
ôKô)÷

r&   r1   c                óØ  • U S   S;   aÃ  SoU ;   o"(       d¥  [         R                  " SU4SX45      [         R                  " U5      S[        R                  " 5       ;   d  [         R
                  " U 5      (       a  [         R                  " U 5      OSS.-  nSS	U0-  n[        [         R                  " U5      5      eS
=pU S   R                  $ U S   S;   aÂ  SoU ;   o"(       d¥  [         R                  " SU4SX45      [         R                  " U5      S[        R                  " 5       ;   d  [         R
                  " U 5      (       a  [         R                  " U 5      OSS.-  nSS	U0-  n[        [         R                  " U5      5      eS
=p[        U S   5      $ U S   S:X  GaÀ  U S   nUS   S:X  Ga¦  SoU;   o"(       d¥  [         R                  " SU4SX45      [         R                  " U5      S[        R                  " 5       ;   d  [         R
                  " U5      (       a  [         R                  " U5      OSS.-  nSS	U0-  n[        [         R                  " U5      5      eS
=pUS   nSoU ;   o"(       d¥  [         R                  " SU4SX45      [         R                  " U5      S[        R                  " 5       ;   d  [         R
                  " U 5      (       a  [         R                  " U 5      OSS.-  nSS	U0-  n[        [         R                  " U5      5      eS
=pU S    Vs/ s H  owR                  S5      U:X  d  M  UPM     snu  n[        U5      $ [        U5      $ U S   $ s  snf )am  Find the best name to use for a schema.

The follow rules are used:
* If the schema represents a model or dataclass, use the name of the class.
* If the root schema is a wrap/before/after validator, look at its `schema` property.
* Otherwise use the schema's `type` property.

Args:
    schema: The schema to get the name for.

Returns:
    The name of the schema.
r—   >   Úmodelr   Úcls)Úin)z%(py1)s in %(py3)sr?   )Úpy1Úpy3zassert %(py5)src   N>   úfunction-wrapúfunction-afterúfunction-beforeÚdefinitionszdefinition-refÚ
schema_refÚinner_schemaÚref)rj   rk   ro   rl   rm   rn   rp   rq   r   r8   r:   )	r?   Ú@py_assert0Ú@py_assert2Ú@py_format4ru   r¶   rµ   Ú
definitionÚschema_definitions	            r'   r8   r8      s2  € ð ˆf�~Ð/Ó/ØÐ˜‰×××Òˆu××Ôˆu×××××Ô˜×××Ñ˜××××××ÓØ�e‰}×%Ñ%Ð%Ø	�‰ÐQÓ	QØÐ!˜6Ñ!×!×!×!Ò!ˆx×!×!Ô!ˆx×!×!×!×!×!Ô!˜6×!×!×!Ñ!˜6×!×!×!×!×!×!Ó!Ü˜v hÑ/Ó0Ð0Ø	�‰˜=Ô	(Ø˜hÑ'ˆØ˜ÑÐ#3Ô3ØÐ/ <Ñ/×/×/×/Ò/�<×/×/Ô/�<×/×/×/×/×/Ô/ <×/×/×/Ñ/ <×/×/×/×/×/×/Ó/Ø*¨<Ñ8ˆJØ Ð* FÑ*×*×*×*Ò*�=×*×*Ô*�=×*×*×*×*×*Ô* F×*×*×*Ñ* F×*×*×*×*×*×*Ó*à-3°MÒ-Bó#Ú-B˜zÇnÁnÐUZÓF[Ð_iÑFi—
Ñ-Bñ#ÑÐô #Ð#4Ó5Ð5ä" <Ó0Ð0à�f‰~Ðùò#s   Ì%M'ÍM'c                  óÐ   • \ rS rSrSr\" \R                  5      \" S5      :  d  \R                  R                  S5      S:X  a        S
S jrSrg	              SS jrSrg	)ÚLogfirePydanticPlugini$  zþImplements a new API for pydantic plugins.

Patches Pydantic to accept this new API shape.

Set the `LOGFIRE_PYDANTIC_RECORD` environment variable to `"off"` to disable the plugin, or
`PYDANTIC_DISABLE_PLUGINS` to `true` to disable all Pydantic plugins.
z2.5.0ÚLOGFIRE_PYDANTIC_RECORDÚoffc                ó   • g)z™Backwards compatibility for Pydantic < 2.5.0.

This method is called every time a new `SchemaValidator` is created, and is a NO-OP for Pydantic < 2.5.0.
©NNNr   )r>   Ú_Ú__s      r'   Únew_schema_validatorÚ*LogfirePydanticPlugin.new_schema_validator0  s   € ð $r&   c           
     ó  • [        5         UR                  S5      nU(       a  SU;   a  US   nO[        5       R                  nUS:X  a  g[	        U5      (       a3  [        5         [        SXXcU5      [        SXXcU5      [        SXXcU5      4$ g)až  This method is called every time a new `SchemaValidator` is created.

Args:
    schema: The schema to validate against.
    schema_type: The original type which the schema was created from, e.g. the model class.
    schema_type_path: Path defining where `schema_type` was defined, or where `TypeAdapter` was called.
    schema_kind: The kind of schema to validate against.
    config: The config to use for validation.
    plugin_settings: The plugin settings.

Returns:
    A tuple of decorator factories for each of the three validation methods -
        `validate_python`, `validate_json`, `validate_strings` or a tuple of
        three `None` if recording is `off`.
r   r/   rÀ   rÂ   Úvalidate_pythonÚvalidate_jsonÚvalidate_strings)Ú_patch_PluggableSchemaValidatorr:   Úget_pydantic_plugin_configr/   Ú_include_modelÚ_patch_build_wrapperr1   )	r>   r?   Úschema_typerB   Úschema_kindÚconfigÚplugin_settingsÚlogfire_settingsr/   s	            r'   rÅ   rÆ   :  s˜   € ô2 ,Ô-à.×2Ñ2°9Ó=ÐÞ HÐ0@Ó$@Ø)¨(Ñ3‘ä3Ó5×<Ñ<�à˜‹Ø'äÐ.×/Ñ/Ü$Ô&ä$Ð%6¸ÈÐkqÓrÜ$ _°fÀoÐioÓpÜ$Ð%7¸ÈÐlrÓsðð ð $r&   r   N)rÃ   r   rÄ   r   rf   ú/tuple[_ValidateWrapper, ...] | tuple[None, ...])r?   r   rÏ   r   rB   r   rÐ   r   rÑ   r§   rÒ   zdict[str, Any]rf   rÔ   )r   r    r!   r"   r#   r   rg   Ú__version__ÚosÚenvironr:   rÅ   r%   r   r&   r'   r¾   r¾   $  s�   † ññ �8×'Ñ'Ó(©;°wÓ+?Ó?À2Ç:Á:Ç>Á>ÐRkÓClÐpuÓCuð	$Øð	$Ø!$ð	$à<÷	$ð,	$àð,	$ð ð,	$ð -ð	,	$ð
 $ð,	$ð &ð,	$ð ,ð,	$ð =÷,	$r&   r¾   )ÚfastapiÚlogfire_backendÚfastuiztuple[str, ...]ÚIGNORED_MODULESc              #  ó*   #   • U  H	  o S 3v •  M     g7f)Ú.Nr   )Ú.0Úmodules     r'   Ú	<genexpr>rà   m  s   é € Ð0\ÊOÀ&°8¸1µÊOùs   ‚ÚIGNORED_MODULE_PREFIXESúPydanticPlugin | NoneÚ_pydantic_plugin_config_valuec                 óP   • [         b  [         $ [        R                  R                  $ )zGet the Pydantic plugin config.)rã   r   Úparam_managerÚpydantic_pluginr   r&   r'   rÌ   rÌ   r  s    € ä$Ñ0Ü,Ð,ä×*Ñ*×:Ñ:Ð:r&   c                ó   • U q g)zSet the pydantic plugin config.N)rã   )Úplugin_configs    r'   Úset_pydantic_plugin_configré   z  s
   € ð %2Ñ!r&   c                ó.  ^ ^• [        5       nUR                  nUR                  nT R                  mTR	                  [
        5      (       d
  T[        ;   a  gU(       a  [        UU 4S jU 5       5      (       a  gU(       a  [        UU 4S jU 5       5      $ g)z-Check whether a model should be instrumented.Fc              3  óv   >#   • U  H.  n[         R                  " U S 3T STR                   35      v •  M0     g7f©Ú$z::N©ÚreÚsearchÚname©rÞ   Úpatternrß   rB   s     €€r'   rà   Ú!_include_model.<locals>.<genexpr>Œ  s;   øé € ÐmÒelÐZa”r—y’y G 9¨A °6°(¸"Ð=M×=RÑ=RÐ<SÐ0T×UÐUÒelùó   ƒ69c              3  óv   >#   • U  H.  n[         R                  " U S 3T STR                   35      v •  M0     g7frì   rî   rò   s     €€r'   rà   rô   ‘  s;   øé € ÐiÒahÐV]”2—9’9 ˜y¨˜]¨v¨h°bÐ9I×9NÑ9NÐ8OÐ,P×QÐQÒahùrõ   T)rÌ   ÚincludeÚexcluderß   Ú
startswithrá   rÛ   Úany)rB   rÑ   r÷   rø   rß   s   `   @r'   rÍ   rÍ   €  sy   ù€ ä'Ó)€FØ�n‰n€GØ�n‰n€Gð ×$Ñ$€FØ×ÑÔ0×1Ñ1°V¼Ó5NØö ”3ÕmÑelÓm×mÑmØö ÜÕiÑahÓiÓiÐiØr&   c                 ó&   • SSK Jn   [        U l        g)a  The old pydantic plugin API required managing state between event handler methods.

This was messy, especially in a way that handles concurrency and nested validation:
see https://pydantic.slack.com/archives/C05AF4A4WRM/p1710503400257589.
The 'new API' simply requires decorating the validation methods, returning a new wrapper function.
At the time of writing, this API doesn't actually exist yet in pydantic.
We patch it here so that this will also work for older versions of pydantic without needing to support both APIs.
r   ©Ú_schema_validatorN)Úpydantic.pluginrý   Ú_build_wrapperÚbuild_wrapperrü   s    r'   rÎ   rÎ   •  s   € õ 2ä&4ÐÕ#r&   c                 ó¨   • SSK Jn   [        R                  " U R                  5      R                  5       SR                  5       :X  a  SS jnXl        gg)z·Patch a 'bug' in PluggableSchemaValidator.

Getting an attribute before proper initializing (e.g. when using cloudpickle)
leads to infinite recursion trying to get _schema_validator.
r   )ÚPluggableSchemaValidatorzg
    def __getattr__(self, name: str) -> Any:
        return getattr(self._schema_validator, name)
    c                óP   • US:X  a  [        U5      e[        U R                  U5      $ )Nrý   )ÚAttributeErrorÚgetattrrý   )r>   rñ   s     r'   Ú__getattr__Ú4_patch_PluggableSchemaValidator.<locals>.__getattr__¶  s+   € ð Ð*Ó*Ü$ TÓ*Ð*ä˜4×1Ñ1°4Ó8Ð8r&   N)r>   r   rñ   r<   rf   r   )Ú!pydantic.plugin._schema_validatorr  ÚinspectÚ	getsourcer  Ústrip)r  r  s     r'   rË   rË   ¤  sM   € õ Kô 	×ÒÐ2×>Ñ>Ó?×EÑEÓGð÷ 	‰‹ó	ô	9ð 0;Õ,ð#	r&   ÚPÚRc                óx   • U H3  n[        X5      nU(       a  Un M  [        U5      (       d  M+  U" U 5      n M5     U $ ©N)Ú_wrap_with_old_handlerÚcallable)ÚfuncÚevent_handlersÚhandlerÚold_wrappeds       r'   rÿ   rÿ   Æ  s;   € Û!ˆô -¨TÓ;ˆÞØŠDÜ�g×Óá˜4“=ŠDñ "ð €Kr&   c                 ó   • g r  r   )rÃ   rÄ   s     r'   Ú_noopr  Õ  s   € Ør&   c                ó  ^ ^^^^^• SSK Jm  [        US5      m[        US5      m[        US5      m[        US5      mTTs=L a  Ts=L a  Ts=L a
  [        L a   g   [        R
                  " T 5      SUU UUUU4S jj5       nU$ )	Nr   r   Úon_enterÚ
on_successÚon_errorÚon_exceptionc                 ó”   >• T" U 0 UD6   T" U 0 UD6nT
" U5        U$ ! T a  nT" U5        e S nAf[          a  nT	" U5        e S nAff = fr  )rO   )rR   rS   rU   rV   rW   r   r  r  r  r  r  s        €€€€€€r'   ÚwrapperÚ'_wrap_with_old_handler.<locals>.wrapperå  sc   ø€ á�$Ð!˜&Ò!ð
	Ù˜4Ð* 6Ñ*ˆFñ �vÔØˆMøð ó 	Ù�UŒOØûÜó 	Ù˜Ô#Øûð	ús   ‹ �A£	,¬A¹	AÁA)rR   zP.argsrS   zP.kwargsrf   r  )rg   r   Ú_get_handler_methodr  rh   ri   )r  r  r  r   r  r  r  r  s   `  @@@@@r'   r  r  Ù  s   ý€ Ý(ä" 7¨JÓ7€HÜ$ W¨lÓ;€JÜ" 7¨JÓ7€HÜ& w°Ó?€Là�:ÔB ÔB¨\ÔB¼UÓBàð Cô ‡_‚_�TÓ÷ó ó ðð €Nr&   c                ó\   • [        XS 5      n U c  [        $ U R                  S:X  a  [        $ U $ )Nzpydantic.plugin)r  r  r    )r  Úmethod_names     r'   r   r   ÷  s1   € Ü�g¨DÓ1€GØ�ÜˆØ	×	Ñ	Ð0Ó	0äˆàˆr&   )r?   r   rf   r<   )rf   r   )rè   râ   rf   r¨   )rB   r   rf   r©   )r  úCallable[P, R]r  z	list[Any]rf   r#  )rÃ   r   rÄ   r   )r  r#  r  r   rf   zCallable[P, R] | None)r  r   r"  r<   rf   zCallable[..., None])Cr#   Ú
__future__r   Úbuiltinsrl   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterj   rh   r	  rÖ   rï   Údataclassesr   r   Útypingr   r   r   r	   r
   r   rg   Útyping_extensionsr   r   r   Ú_internal.configr   r   Ú_internal.utilsr   r   rþ   r   r   Úpydantic_corer   r   Ú_meter_providerÚ	get_meterÚMETERÚcreate_counterr¤   r   r   r1   r8   r¾   ÚpluginrÛ   r$   Útuplerá   rã   rÌ   ré   rÍ   rÎ   rË   r  r  rÿ   r  r  r   r   r&   r'   Ú<module>r5     sS  ðÚ 4å "ç  „ Ó Û Û 	Û 	Ý !Ý ß L× Lã Ý 'ã Ý ç <Ý )æÝ(ß:ß4à×%Ñ%×/Ñ/Ð0BÓC€Ø×)Ñ)Ð*@ÓAÐ ô0�Y eò 0ô*�i uò ÷$w
ñ w
ôt!ðH ÷A$ð A$ó ðA$ñH 
Ó	 €ð $J€�Ó IÙ+0Ñ0\ÉOÓ0\Ó+\Ð ˜Ó \à7;Ð Ð4Ó ;ô;ô2ôð* ñ5ó ð5ð ñ;ó ð;ñ: ˆcƒN€ÙˆCƒL€ôôôõ<r&   