Ë
    çÞËj[  ã                   óÆ  — d dl Z d dlZd dlmZ d dlZd dl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mZmZmZ d dlmZmZ d d	l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% d dl'm(Z( e(r&d dl'm)Z) d dl'm*Z* d dl'm+Z+ d dl'm,Z, d dl'm-Z- d dl.m/Z/m0Z0  G d„ de«      Z1ejd                  d„ «       Z3 ee1«      d„ «       Z4d„ Z5 G d„ de«      Z6y# e&$ r	  ed«      ‚w xY w)é    N)Úiscoroutinefunction)Úcontinue_trace)ÚOP)Úshould_send_default_pii)ÚTRANSACTION_SOURCE_COMPONENTÚTRANSACTION_SOURCE_ROUTE)ÚHAS_REAL_CONTEXTVARSÚCONTEXTVARS_ERROR_MESSAGEÚensure_integration_enabledÚevent_from_exceptionÚcapture_internal_exceptionsÚtransaction_from_function)ÚIntegrationÚDidNotEnable)ÚRequestExtractorÚ_filter_headersÚ_is_json_content_type)Úignore_logger)Úversion_info)ÚRequestHandlerÚ	HTTPError)Ú	coroutinezTornado not installed)ÚTYPE_CHECKING)ÚAny)ÚOptional)ÚDict)ÚCallable)Ú	Generator)ÚEventÚEventProcessorc                   ó*   — e Zd ZdZde› �Zed„ «       Zy)ÚTornadoIntegrationÚtornadoz
auto.http.c                  ó.  ‡‡— t         dk  rt        d«      ‚t        st        dt        z   «      ‚t	        d«       t
        j                  Št        ‰«      } | rˆfd„}nt        ˆfd„«       }|t
        _        t
        j                  Šˆfd„}|t
        _	        y )N)é   r   zTornado 6.0+ requiredzUThe tornado integration for Sentry requires Python 3.7+ or the aiocontextvars packageztornado.accessc              Ÿ   óz   •K  — t        | «      5   ‰| g|¢­i |¤Žƒ d {  –—† cd d d «       S 7 Œ# 1 sw Y   y xY w­w©N©Ú_handle_request_impl)ÚselfÚargsÚkwargsÚold_executes      €ú\/var/www/photos/backend/venv/lib/python3.12/site-packages/sentry_sdk/integrations/tornado.pyÚsentry_execute_request_handlerzETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerK   sF   øè ø€ ä)¨$Ó/ñ DÙ!,¨TÐ!C°DÒ!C¸FÑ!C×C÷Dñ DØCø÷Dð Düs    ƒ;�/Ÿ- /£
;­/¯8´;c              ?   ó~   •K  — t        | «      5   ‰| g|¢­i |¤ŽE d {  –—† }|cd d d «       S 7 Œ# 1 sw Y   y xY w­wr'   r(   )r*   r+   r,   Úresultr-   s       €r.   r/   zETornadoIntegration.setup_once.<locals>.sentry_execute_request_handlerR   sH   øè ø€ ô *¨$Ó/ñ "Ù(3°DÐ(J¸4Ò(JÀ6Ñ(J×J�FØ!÷"ñ "ØJø÷"ð "üs    ƒ=�1Ÿ/ 1¥
=¯1±:¶=c                 ó<   •— t        |||«        ‰| |||g|¢­i |¤ŽS r'   )Ú_capture_exception)r*   ÚtyÚvalueÚtbr+   r,   Úold_log_exceptions         €r.   Úsentry_log_exceptionz;TornadoIntegration.setup_once.<locals>.sentry_log_exception]   s*   ø€ ä˜r 5¨"Ô-Ù$ T¨2¨u°bÐJ¸4ÒJÀ6ÑJÐJó    )
ÚTORNADO_VERSIONr   r	   r
   r   r   Ú_executer   r   Úlog_exception)Ú	awaitabler/   r8   r-   r7   s      @@r.   Ú
setup_oncezTornadoIntegration.setup_once4   sš   ù€ ô ˜VÒ#ÜÐ6Ó7Ð7å#ô ØgÜ+ñ,óð ô
 	Ð&Ô'ä$×-Ñ-ˆä'¨Ó4ˆ	áõDô ó"ó ð"ð #AŒÔä*×8Ñ8Ðô	Kð
 (<ŒÕ$r9   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginÚstaticmethodr>   © r9   r.   r"   r"   0   s%   „ Ø€JØ˜*˜Ð&€Fàñ-<ó ñ-<r9   r"   c              #   ó>  K  — t        j                  «       j                  t        «      }|€d –— t	        j
                  | «      }t        j                  «       5 }| j                  j                  }|j                  «        t        |«      }|j                  |«       t        |t        j                  dt        t        j                   ¬«      }t        j"                  |d| j                  i¬«      5  d –— d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w­w)Nzgeneric Tornado request)ÚopÚnameÚsourcerC   Útornado_request)Úcustom_sampling_context)Ú
sentry_sdkÚ
get_clientÚget_integrationr"   ÚweakrefÚrefÚisolation_scopeÚrequestÚheadersÚclear_breadcrumbsÚ_make_event_processorÚadd_event_processorr   r   ÚHTTP_SERVERr   rC   Ústart_transaction)r*   ÚintegrationÚweak_handlerÚscoperS   Ú	processorÚtransactions          r.   r)   r)   e   sñ   è ø€ ô ×'Ñ'Ó)×9Ñ9Ô:LÓM€KàÐÛä—;‘;˜tÓ$€Lä	×	#Ñ	#Ó	%ð ¨Ø—,‘,×&Ñ&ˆà×ÑÔ!Ü)¨,Ó7ˆ	Ø×!Ñ! )Ô,ä$ØÜ�~‰~ð
 +Ü+Ü%×,Ñ,ô

ˆô ×)Ñ)ØÐ2CÀTÇ\Á\Ð1Rô
ñ 	ó ÷	÷'ð ÷&	ð 	ú÷'ð üs7   ‚ADÁBDÃ/DÃ4DÃ<	DÄD	Ä
DÄDÄDc                 óº   — t        |t        «      ry t        | ||ft        j                  «       j
                  dddœ¬«      \  }}t        j                  ||¬«       y )Nr#   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)Ú
isinstancer   r   rL   rM   ÚoptionsÚcapture_event)r4   r5   r6   Úeventrc   s        r.   r3   r3   ˆ   sT   € ô �%œÔ#Øä&Ø	ˆU�BˆÜ!×,Ñ,Ó.×6Ñ6Ø$°Ñ7ô�K€Eˆ4ô ×Ñ˜U¨Ö.r9   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó0  •—  ‰«       }|€| S |j                   }t        «       5  t        ||j                   j                  j	                  «       «      }t        |«      xs d| d<   dt        i| d<   d d d «       t        «       5  t        |«      }|j                  | «       | d   }|j                  ›d|j                  ›|j                  ›�|d<   |j                  |d<   |j                  |d	<   d
|j                  i|d<   t        t        |j                   «      «      |d<   d d d «       t        «       5  |j"                  r,t%        «       r"| j'                  di «      j'                  dd«       d d d «       | S # 1 sw Y   �ŒxY w# 1 sw Y   ŒcxY w# 1 sw Y   | S xY w)NÚ r]   rI   Útransaction_inforR   z://ÚurlÚquery_stringÚmethodÚREMOTE_ADDRÚenvrS   ÚuserÚis_authenticatedT)rR   r   Úgetattrrn   Úlowerr   r   ÚTornadoRequestExtractorÚextract_into_eventÚprotocolÚhostÚpathÚqueryÚ	remote_ipr   ÚdictrS   Úcurrent_userr   Ú
setdefault)rg   rc   ÚhandlerrR   rn   Ú	extractorÚrequest_inforZ   s          €r.   Útornado_processorz0_make_event_processor.<locals>.tornado_processor™   s‰  ø€ á“.ˆØˆ?ØˆLà—/‘/ˆä(Ó*ñ 	QÜ˜W g§o¡o×&<Ñ&<×&BÑ&BÓ&DÓEˆFÜ#<¸VÓ#DÒ#JÈˆE�-Ñ Ø)1Ô3OÐ(PˆEÐ$Ñ%÷	Qô
 )Ó*ñ 	MÜ/°Ó8ˆIØ×(Ñ(¨Ô/à  Ñ+ˆLð × Ó Ø—’Ø—’ð#ˆL˜Ñð ,3¯=©=ˆL˜Ñ(Ø%,§^¡^ˆL˜Ñ"Ø#0°'×2CÑ2CÐ"DˆL˜ÑÜ&5´d¸7¿?¹?Ó6KÓ&LˆL˜Ñ#÷	Mô" )Ó*ñ 	RØ×#Ò#Ô(?Ô(AØ× Ñ  ¨Ó,×7Ñ7Ð8JÈDÔQ÷	Rð ˆ÷5	Qñ 	Qú÷
	Mð 	Mú÷"	Rð ˆús%   £AE2ÂBE?Ä/9FÅ2E<Å?FÆFrE   )rZ   r‚   s   ` r.   rU   rU   —   s   ø€ ô"ðH Ðr9   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ru   c                 ón   — | j                   j                  €yt        | j                   j                  «      S ©Nr   )rR   ÚbodyÚlen©r*   s    r.   Úcontent_lengthz&TornadoRequestExtractor.content_lengthÁ   s*   € à�<‰<×ÑÐ$ØÜ�4—<‘<×$Ñ$Ó%Ð%r9   c                 ó’   — | j                   j                  j                  «       D ��ci c]  \  }}||j                  “Œ c}}S c c}}w r'   )rR   ÚcookiesÚitemsr5   ©r*   ÚkÚvs      r.   r‹   zTornadoRequestExtractor.cookiesÇ   s5   € à'+§|¡|×';Ñ';×'AÑ'AÓ'C×D™t˜q !��1—7‘7‘
ÓDÐDùÓDs   ¨Ac                 ó.   — | j                   j                  S r'   )rR   r†   rˆ   s    r.   Úraw_dataz TornadoRequestExtractor.raw_dataË   s   € à�|‰|× Ñ Ð r9   c                 óÊ   — | j                   j                  j                  «       D ���ci c]&  \  }}||D �cg c]  }|j                  dd«      ‘Œ c}“Œ( c}}}S c c}w c c}}}w )NÚlatin1Úreplace)rR   Úbody_argumentsrŒ   Údecode)r*   rŽ   Úvsr�   s       r.   ÚformzTornadoRequestExtractor.formÏ   s^   € ð Ÿ™×4Ñ4×:Ñ:Ó<÷
ð 
á��2ð °rÖ:°!�—‘˜ 9Õ-Ò:Ñ:ô
ð 	
ùÚ:ùô
s   ©A¶AÁAÁAc                 ó^   — t        | j                  j                  j                  d«      «      S )Nzcontent-type)r   rR   rS   Úgetrˆ   s    r.   Úis_jsonzTornadoRequestExtractor.is_jsonÖ   s"   € ä$ T§\¡\×%9Ñ%9×%=Ñ%=¸nÓ%MÓNÐNr9   c                 óŠ   — | j                   j                  j                  «       D ��ci c]  \  }}|sŒ	||d   “Œ c}}S c c}}w r…   )rR   ÚfilesrŒ   r�   s      r.   r�   zTornadoRequestExtractor.filesÚ   s7   € à$(§L¡L×$6Ñ$6×$<Ñ$<Ó$>×D™D˜A˜qÂ!��1�Q‘4‘ÓDÐDùÓDs   ¨
?³?c                 ó4   — t        |j                  xs d«      S )NrE   )r‡   r†   )r*   Úfiles     r.   Úsize_of_filez$TornadoRequestExtractor.size_of_fileÞ   s   € ä�4—9‘9’? Ó#Ð#r9   N)
r?   r@   rA   r‰   r‹   r‘   r˜   r›   r�   r    rE   r9   r.   ru   ru   À   s(   „ ò&òEò!ò
òOòEó$r9   ru   )7rO   Ú
contextlibÚinspectr   rL   Úsentry_sdk.apir   Úsentry_sdk.constsr   Úsentry_sdk.scoper   Úsentry_sdk.tracingr   r   Úsentry_sdk.utilsr	   r
   r   r   r   r   Úsentry_sdk.integrationsr   r   Ú$sentry_sdk.integrations._wsgi_commonr   r   r   Úsentry_sdk.integrations.loggingr   r#   r   r:   Útornado.webr   r   Útornado.genr   ÚImportErrorÚtypingr   r   r   r   r   r   Úsentry_sdk._typesr   r    r"   Úcontextmanagerr)   r3   rU   ru   rE   r9   r.   ú<module>r±      sØ   ðÛ Û Ý 'ã Ý )Ý  Ý 4÷÷÷ ÷ >÷ñ õ
 :ð0Ý7ß5Ý%õ !áÝÝÝÝÝ ç7ô2<˜ô 2<ðj ×Ññó ðñD Ð.Ó/ñ/ó 0ð/ò&ôR $Ð.õ  $øð ò 0Ù
Ð.Ó
/Ð/ð0ús   ÁC ÃC 