Ë
    S>{igX  ã                   ó   — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dl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mZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ 	 d dl0m1Z2 d dl3m4Z5 d dl6m7Z7 d dl3m4Z4 	 d dl8m9Z9 	 d dl8m<Z< d dl=m>Z> d dl?m@Z@mAZA d dlBmCZC d dlDmEZE d dlFmGZG e2dd dkD  rd dlHmIZI ndZIerZd d lJmKZK d d!lJmLZL d d"lJmMZM d d#lJmNZN d d$lJmOZO d d%lJmPZP d d&lQmRZR d d'lSmTZT d d(lUmVZV d d)lWmXZX d d*lmYZY d d+lmZZZ d d,l,m[Z[ d d-l
m\Z\m]Z]m^Z^m_Z_ e2d.k  rd/„ Z`nd0„ Z`d1Za G d2„ d3e(«      Zbd4ac ejÈ                  «       Zed5„ Zfd6„ Zgd7„ Zhd8„ Zid9„ Zjd:„ Zkd;„ Zld<„ Zmd=„ ZndDd>„Zo G d?„ d@e/«      ZpdA„ ZqdB„ ZrdC„ Zsy# e:$ r
 d dl;m9Z9 Y �Œw xY w# e:$ r
 d dl;m<Z< Y �Œw xY w# e:$ r	  e)d«      ‚w xY w)Eé    )Úabsolute_importN)Úimport_module)Ústring_typesÚ	text_type)ÚTYPE_CHECKING)ÚOPÚSPANDATA)Úattach_explain_plan_to_span)ÚHubÚ_should_send_default_pii)Úadd_global_event_processor)Úadd_global_repr_processor)ÚSOURCE_FOR_STYLEÚTRANSACTION_SOURCE_URL)Úrecord_sql_queries)	ÚAnnotatedValueÚHAS_REAL_CONTEXTVARSÚCONTEXTVARS_ERROR_MESSAGEÚSENSITIVE_DATA_SUBSTITUTEÚloggerÚcapture_internal_exceptionsÚevent_from_exceptionÚtransaction_from_functionÚwalk_exception_chain)ÚIntegrationÚDidNotEnable)Úignore_logger)ÚSentryWsgiMiddleware)ÚRequestExtractor)ÚVERSION©Úsettings)Úsignals)Úresolve)ÚResolver404zDjango not installed)ÚLEGACY_RESOLVER)Ú!get_template_frame_from_exceptionÚpatch_templates)Úpatch_django_middlewares)Úpatch_signals)Úpatch_viewsé   ©é   é   )Úpatch_caching)ÚAny)ÚCallable)ÚDict)ÚOptional)ÚUnion)ÚList)ÚWSGIRequest)ÚHttpResponse)Ú	QueryDict)ÚMultiValueDict)ÚSpan)ÚScope)Ú_ScopedResponse)ÚEventÚHintÚEventProcessorÚNotImplementedType)r.   é
   c                 ó"   — | j                  «       S ©N©Úis_authenticated©Úrequest_users    úe/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentry_sdk/integrations/django/__init__.pyrF   rF   X   s   € à×,Ñ,Ó.Ð.ó    c                 ó   — | j                   S rD   rE   rG   s    rI   rF   rF   ^   s   € à×,Ñ,Ð,rJ   )Úfunction_nameÚurlc                   ó@   — e Zd ZdZdZdZdZdZ	 	 	 	 dd„Ze	d„ «       Z
y)ÚDjangoIntegrationÚdjangoÚ Nc                 óx   — |t         vrt        d|›dt         ›d�«      ‚|| _        || _        || _        || _        y )Nz%Invalid value for transaction_style: z (must be in ú))ÚTRANSACTION_STYLE_VALUESÚ
ValueErrorÚtransaction_styleÚmiddleware_spansÚsignals_spansÚcache_spans)ÚselfrV   rW   rX   rY   s        rI   Ú__init__zDjangoIntegration.__init__n   sH   € ð Ô$<Ñ<Ýâ$Ö&>ð@óð ð "3ˆÔØ 0ˆÔØ*ˆÔØ&ˆÕrJ   c                  óÒ  ‡‡— t         dk  rt        d«      ‚t        «        t        d«       t        d«       ddlmŠ ‰j                  Šˆˆfd„} | ‰_        t        «        t        «        t        j                  j                  t        «       t        d„ «       }t        d	„ «       }t        «        t!        «        t#        «        t%        «        t'        «        t(        �t)        «        y y )
Nr-   z Django 1.8 or newer is required.zdjango.serverzdjango.requestr   )ÚWSGIHandlerc                 óÌ   •— t         j                  j                  t        «      €
 ‰| ||«      S ‰j	                  | ‰«      }ddlm} |j                  } t        ||«      ||«      S )Nr   r!   )	r   ÚcurrentÚget_integrationrO   Ú__get__Údjango.confr"   ÚUSE_X_FORWARDED_HOSTr   )rZ   ÚenvironÚstart_responseÚbound_old_appr"   Úuse_x_forwarded_forr]   Úold_apps         €€rI   Úsentry_patched_wsgi_handlerzADjangoIntegration.setup_once.<locals>.sentry_patched_wsgi_handler’   sd   ø€ ä�{‰{×*Ñ*Ô+<Ó=ÐEÙ˜t W¨nÓ=Ð=à#ŸO™O¨D°+Ó>ˆMå,à"*×"?Ñ"?ÐàKÔ'¨Ð7JÓKØ˜óð rJ   c                 ó,  — |€| S |j                  dd «      }|€| S | j                  dd «      }|€| S |j                  dd «      }|€| S t        t        |«      t        |«      «      D ]¬  \  }\  }}}t	        |«      }|€Œ|j                  di «      j                  dg «      }t        t        t        |«      «      «      D ]6  }	||	   }
|
j                  d«      dv sŒ|
j                  d«      d	k(  sŒ1|	d
z  }	 n t        |«      }	|j                  |	|«       Œ® | S )NÚexc_infoÚ	exceptionÚvaluesÚ
stacktraceÚframesÚfunction)zParser.parseÚparseÚrenderÚmodulezdjango.template.baser.   )ÚgetÚzipÚreversedr   r'   ÚrangeÚlenÚinsert)ÚeventÚhintrk   rl   rm   Ú_Ú	exc_valueÚframero   ÚiÚfs              rI   Úprocess_django_templatesz>DjangoIntegration.setup_once.<locals>.process_django_templates©   s2  € ð ˆ|Ø�à—x‘x 
¨DÓ1ˆHàÐØ�àŸ	™	 +¨tÓ4ˆIàÐ Ø�à—]‘] 8¨TÓ2ˆFàˆ~Ø�ä03Ü˜Ó Ô"6°xÓ"@ó1ò ,Ñ,�	Ñ,˜A˜y¨!ô :¸)ÓD�ØÑ$Ø&Ÿ]™]¨<¸Ó<×@Ñ@ÀÈ2ÓN�Fä%¤e¬C°«KÓ&8Ó9ò 	(˜Ø" 1™I˜àŸE™E *Ó-Ð1TÒTØ !§¡ h£Ð3IÓ Ià ™F˜AÙ!ð	(ô   ›K˜à—M‘M ! UÕ+ð%,ð( ˆLrJ   c                 óÔ   — 	 ddl m} t	        | |«      r| j
                  rt        S d| j                  j                  | j                  t        | «      fz  S # t        $ r	 t        cY S w xY w)Nr   )ÚQuerySetz<%s from %s at 0x%x>)
Údjango.db.models.queryrƒ   Ú	ExceptionÚNotImplementedÚ
isinstanceÚ_result_cacheÚ	__class__Ú__name__Ú
__module__Úid)Úvaluer{   rƒ   s      rI   Ú_django_queryset_reprz;DjangoIntegration.setup_once.<locals>._django_queryset_reprÔ   sn   € ð	&õ <ô ˜e XÔ.°%×2EÒ2EÜ%Ð%ð *Ø—‘×(Ñ(Ø× Ñ Ü�5“	ð-ñ ð øô ò &Ü%Ò%ð&ús   ‚A ÁA'Á&A')ÚDJANGO_VERSIONr   Úinstall_sql_hookr   Údjango.core.handlers.wsgir]   Ú__call__Ú_patch_get_responseÚ_patch_django_asgi_handlerr#   Úgot_request_exceptionÚconnectÚ_got_request_exceptionr   r   Ú_patch_channelsr)   r+   r(   r*   r0   )ri   r�   rŽ   r]   rh   s      @@rI   Ú
setup_oncezDjangoIntegration.setup_once€   sÅ   ù€ ô ˜FÒ"ÜÐAÓBÐBäÔô 	�oÔ&ÜÐ&Ô'å9à×&Ñ&ˆõ	ð  ;ˆÔäÔä"Ô$ä×%Ñ%×-Ñ-Ô.DÔEä	#ñ(	ó 
$ð(	ôT 
#ñ	ó 
#ð	ô6 	ÔÜ Ô"ÜŒÜÔÜŒäÐ$Ü�Oð %rJ   )rM   TTF)rŠ   r‹   Ú__qualname__Ú
identifierrV   rW   rX   rY   r[   Ústaticmethodr™   © rJ   rI   rO   rO   f   sF   „ Ø€JàÐØÐØ€MØ€Kð  ØØØó'ð$ ñvó ñvrJ   rO   Fc                  ó  ‡— t         ryt        5  t         r
	 ddd«       yda t        «       5  	 ddlm}  | j
                  Šˆfd„}|| _        ddd«       ddd«       y# t        $ r Y Œw xY w# 1 sw Y   Œ!xY w# 1 sw Y   yxY w)a±  
    Patch Django Rest Framework for more/better request data. DRF's request
    type is a wrapper around Django's request type. The attribute we're
    interested in is `request.data`, which is a cached property containing a
    parsed request body. Reading a request body from that property is more
    reliable than reading from any of Django's own properties, as those don't
    hold payloads in memory and therefore can only be accessed once.

    We patch the Django request object to include a weak backreference to the
    DRF request object, such that we can later use either in
    `DjangoRequestExtractor`.

    This function is not called directly on SDK setup, because importing almost
    any part of Django Rest Framework will try to access Django settings (where
    `sentry_sdk.init()` might be called from in the first place). Instead we
    run this function on every request and do the patching on the first
    request.
    NTr   )ÚAPIViewc                 ó¦   •— t        «       5  t        j                  |«      |j                  _        	 d d d «        ‰| |g|¢­i |¤ŽS # 1 sw Y   ŒxY wrD   )r   ÚweakrefÚrefÚ_requestÚ_sentry_drf_request_backref)rZ   ÚrequestÚargsÚkwargsÚold_drf_initials       €rI   Úsentry_patched_drf_initialz._patch_drf.<locals>.sentry_patched_drf_initial)  sW   ø€ ä4Ó6ñ ÜGNÇ{Á{Ø#óH˜×(Ñ(ÔDð ÷	ñ
 +¨4°ÐJ¸4ÒJÀ6ÑJÐJ÷ð ús   Œ%AÁA)Ú_DRF_PATCHEDÚ_DRF_PATCH_LOCKr   Úrest_framework.viewsrŸ   ÚinitialÚImportError)rŸ   r©   r¨   s     @rI   Ú
_patch_drfr¯   þ   s�   ø€ õ. àä	ñ =ÝØ÷=ð =ð ˆä(Ó*ñ 	=ð=Ý8ð #*§/¡/�ôKð #=�”÷#	=÷=ð =øô ò Ùðú÷	=ð 	=ú÷=ð =úsI   �A8 A8¬A,®A´A,ÁA8Á	A)Á&A,Á(A)Á)A,Á,A5	Á1A8Á8Bc                  ó�   — 	 ddl m}  t        st	        j
                  dt        z   «       ddlm}  || «       y # t        $ r Y y w xY w)Nr   )ÚAsgiHandlerz3We detected that you are using Django channels 2.0.)Ú patch_channels_asgi_handler_impl)	Úchannels.httpr±   r®   r   r   Úwarningr   Ú#sentry_sdk.integrations.django.asgir²   )r±   r²   s     rI   r˜   r˜   5  sJ   € ðÝ-õ  ô 	�‰ØAÜ'ñ(ô	
õ
 Uá$ [Õ1øô% ò Ùðúó   ‚9 ¹	AÁAc                  ó�   — 	 ddl m}  t        st	        j
                  dt        z   «       ddlm}  || «       y # t        $ r Y y w xY w)Nr   )ÚASGIHandlerz(We detected that you are using Django 3.)Úpatch_django_asgi_handler_impl)	Údjango.core.handlers.asgir¸   r®   r   r   r´   r   rµ   r¹   )r¸   r¹   s     rI   r”   r”   N  sH   € ðÝ9õ  ô 	�‰Ø6Ô9RÑRô	
õ Sá" ;Õ/øô ò Ùðúr¶   c                 óš  — 	 d }|dk(  r6t        |j                  «      j                  }t        t	        |d|«      «      }n\|dk(  rWt        |d«      r,t        j                   |j                  |j                  ¬«      }nt        j                   |j                  «      }|€|j                  }t        }n	t        |   }| j                  ||¬«       y # t        $ rj t        t        j                  «      }t        |d«      rB|j                   }t#        |t$        «      r	|| _        Y y t        t	        |d|«      «      | _        Y y Y y t(        $ r Y y w xY w)NrL   Ú
view_classrM   Úurlconf)r½   )ÚsourceÚ
handler404)r$   ÚpathÚfuncr   ÚgetattrÚhasattrr&   Ú	path_infor½   r   r   Úset_transaction_namer%   r   r"   ÚROOT_URLCONFr¿   r‡   r   Útransactionr…   )ÚscoperV   r¥   Útransaction_nameÚfnr¾   r½   Úhandlers           rI   Ú _set_transaction_name_and_sourcerÌ   d  s9  € ð%ØÐØ Ò/Ü˜Ÿ™Ó&×+Ñ+ˆBÜ8¼ÀÀ\ÐSUÓ9VÓWÑà %Ò'Ü�w 	Ô*Ü#2×#:Ñ#:Ø×%Ñ%¨w¯©ô$Ñ ô $3×#:Ñ#:¸7×;LÑ;LÓ#MÐ àÐ#Ø&×0Ñ0ÐÜ+‰Fä%Ð&7Ñ8ˆFà×"Ñ"ØØð 	#õ 	
øô ò Ü¤× 5Ñ 5Ó6ˆô �7˜LÔ)Ø×(Ñ(ˆGÜ˜'¤<Ô0Ø$+�Ö!ä$=Ü˜G \°7Ó;ó%�Ö!ñ *ô ò Ùðús   ‚C
C ÃAE
Ä E
Ä?E
Å	E
c                 ó<  — t         j                  }|j                  t        «      }|€y t	        «        |j                  «       5 }t        ||j                  | «       |j                  t        t        j                  | «      |«      «       d d d «       y # 1 sw Y   y xY wrD   )r   r_   r`   rO   r¯   Úconfigure_scoperÌ   rV   Úadd_event_processorÚ_make_event_processorr¡   r¢   ©r¥   ÚhubÚintegrationrÈ   s       rI   Ú_before_get_responserÔ   Ž  s€   € ä
�+‰+€CØ×%Ñ%Ô&7Ó8€KØÐØä„Là	×	Ñ	Ó	ð 
 %ä(¨°×0MÑ0MÈwÔWà×!Ñ!Ü!¤'§+¡+¨gÓ"6¸ÓDô	
÷	
÷ 
ñ 
ús   ÁABÂBc                 ó8   — t        | d«      syt        ||| «       y)zŒ
    Some django middlewares overwrite request.urlconf
    so we need to respect that contract,
    so we try to resolve the url again.
    r½   N)rÃ   rÌ   )r¥   rÈ   rV   s      rI   Ú_attempt_resolve_againrÖ      s   € ô �7˜IÔ&Øä$ UÐ,=¸wÕGrJ   c                 óê   — t         j                  }|j                  t        «      }|�|j                  dk7  ry |j                  «       5 }t        | ||j                  «       d d d «       y # 1 sw Y   y xY w)NrM   )r   r_   r`   rO   rV   rÎ   rÖ   rÑ   s       rI   Ú_after_get_responserØ   ­  sk   € ä
�+‰+€CØ×%Ñ%Ô&7Ó8€KØÐ˜k×;Ñ;¸uÒDØà	×	Ñ	Ó	ð N %Ü˜w¨¨{×/LÑ/LÔM÷N÷ Nñ Nús   ÁA)Á)A2c                  ó‚   ‡— ddl m}  | j                  Šˆfd„}|| _        t        | d«      rddlm}  || t        «       yy)zU
    patch get_response, because at that point we have the Django request object
    r   )ÚBaseHandlerc                 óF   •— t        |«        ‰| |«      }t        |«       |S rD   )rÔ   rØ   )rZ   r¥   ÚrvÚold_get_responses      €rI   Úsentry_patched_get_responsez8_patch_get_response.<locals>.sentry_patched_get_responseÁ  s$   ø€ ä˜WÔ%Ù˜d GÓ,ˆÜ˜GÔ$Øˆ	rJ   Úget_response_async)Úpatch_get_response_asyncN)Údjango.core.handlers.baserÚ   Úget_responserÃ   rµ   rà   rÔ   )rÚ   rÞ   rà   rÝ   s      @rI   r“   r“   ¸  sA   ø€ õ
 6à"×/Ñ/Ðôð  ;€KÔäˆ{Ð0Ô1ÝPá  Ô.BÕCð 2rJ   c                 ó   ‡ — ˆ fd„}|S )Nc                 óH  •—  ‰«       }|€| S 	 |j                  «       }|�|}t        «       5  t        |«      j	                  | «       d d d «       t        «       r!t        «       5  t        || «       d d d «       | S | S # t        $ r Y Œew xY w# 1 sw Y   ŒExY w# 1 sw Y   | S xY wrD   )r¤   ÚAttributeErrorr   ÚDjangoRequestExtractorÚextract_into_eventr   Ú_set_user_info)rz   r{   r¥   Údrf_requestÚweak_requests       €rI   Úevent_processorz._make_event_processor.<locals>.event_processorÒ  s¶   ø€ ñ
 “.ˆØˆ?ØˆLð	Ø!×=Ñ=Ó?ˆKØÐ&Ø%�ô )Ó*ñ 	FÜ" 7Ó+×>Ñ>¸uÔE÷	Fô $Ô%Ü,Ó.ñ /Ü˜w¨Ô.÷/ð ˆˆuˆøô ò 	Ùð	ú÷	Fð 	Fú÷/ð ˆús(   ŽA< ¬BÁ#BÁ<	BÂBÂBÂB!r�   )rê   rÓ   rë   s   `  rI   rÐ   rÐ   Ð  s   ø€ ôð2 ÐrJ   c                 óŒ  — t         j                  }|j                  t        «      }|�‘| �?|j                  dk(  r0|j                  «       5 }t        | ||j                  «       d d d «       |j                  }t        t        j                  «       |j                  dddœ¬«      \  }}|j                  ||¬«       y y # 1 sw Y   ŒZxY w)NrM   rP   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)r{   )r   r_   r`   rO   rV   rÎ   rÖ   Úclientr   Úsysrk   ÚoptionsÚcapture_event)r¥   r§   rÒ   rÓ   rÈ   rñ   rz   r{   s           rI   r—   r—   î  s¹   € ä
�+‰+€CØ×%Ñ%Ô&7Ó8€KØÐØÐ ;×#@Ñ#@ÀEÒ#IØ×$Ñ$Ó&ð V¨%Ü& w°°{×7TÑ7TÔU÷Vð —‘ˆä*Ü�L‰L‹NØ!Ÿ>™>Ø'°EÑ:ô
‰ˆˆtð
 	×Ñ˜% dÐÕ+ð ÷Vð Vús   Á	B:Â:Cc                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ræ   c                 ó.   — | j                   j                  S rD   )r¥   ÚMETA©rZ   s    rI   ÚenvzDjangoRequestExtractor.env  ó   € à�|‰|× Ñ Ð rJ   c                 óÈ   — t         j                  t         j                  g}i }| j                  j                  j                  «       D ]  \  }}||v r
t        ||<   Œ|||<   Œ |S rD   )Údjango_settingsÚCSRF_COOKIE_NAMEÚSESSION_COOKIE_NAMEr¥   ÚCOOKIESÚitemsr   )rZ   Úprivacy_cookiesÚclean_cookiesÚkeyÚvals        rI   ÚcookieszDjangoRequestExtractor.cookies  sn   € ô ×,Ñ,Ü×/Ñ/ð
ˆð
 ˆØŸ™×,Ñ,×2Ñ2Ó4ò 	)‰HˆC�Ø�oÑ%Ü%>�˜cÒ"à%(�˜cÒ"ð		)ð ÐrJ   c                 ó.   — | j                   j                  S rD   )r¥   Úbodyrø   s    rI   Úraw_datazDjangoRequestExtractor.raw_data  rú   rJ   c                 ó.   — | j                   j                  S rD   )r¥   ÚPOSTrø   s    rI   ÚformzDjangoRequestExtractor.form  rú   rJ   c                 ó.   — | j                   j                  S rD   )r¥   ÚFILESrø   s    rI   ÚfileszDjangoRequestExtractor.files  s   € à�|‰|×!Ñ!Ð!rJ   c                 ó   — |j                   S rD   )Úsize)rZ   Úfiles     rI   Úsize_of_filez#DjangoRequestExtractor.size_of_file#  s   € à�y‰yÐrJ   c                 óx   — 	 | j                   j                  S # t        $ r t        j                  | «      cY S w xY wrD   )r¥   Údatarå   r   Úparsed_bodyrø   s    rI   r  z"DjangoRequestExtractor.parsed_body'  s7   € ð	6Ø—<‘<×$Ñ$Ð$øÜò 	6Ü#×/Ñ/°Ó5Ò5ð	6ús   ‚ ˜9¸9N)
rŠ   r‹   rš   rù   r  r  r  r  r  r  r�   rJ   rI   ræ   ræ     s%   „ ò!òò !ò!ò"òó6rJ   ræ   c                 ó€  — |j                  di «      }t        | dd «      }|�t        |«      sy 	 |j                  dt        |j                  «      «       	 |j                  d|j                  «       	 |j                  d|j                  «       «       y # t
        $ r Y ŒJw xY w# t
        $ r Y Œ<w xY w# t
        $ r Y y w xY w)NÚuserrŒ   ÚemailÚusername)Ú
setdefaultrÂ   rF   ÚstrÚpkr…   r  Úget_username)r¥   rz   Ú	user_infor  s       rI   rè   rè   /  sÀ   € à× Ñ  ¨Ó,€Iä�7˜F DÓ)€Dà€|Ô+¨DÔ1ØðØ×Ñ˜T¤3 t§w¡w£<Ô0ðØ×Ñ˜W d§j¡jÔ1ðØ×Ñ˜Z¨×):Ñ):Ó)<Õ=øô ò Ùðûô
 ò Ùðûô
 ò Ùðús5   ¯%B ÁB" Á2 B1 Â	BÂBÂ"	B.Â-B.Â1	B=Â<B=c                  óB  ‡‡‡— 	 ddl m}  	 ddlm} 	 | j                  Š| j                  Š|j                  Šd	ˆfd„	}ˆfd„}ˆfd„}|| _        || _        ||_	        t        d«       y# t        $ r	 ddlm}  Y Œnw xY w# t        $ r	 ddlm} Y Œ|w xY w# t        $ r Y yw xY w)
z9If installed this causes Django's queries to be captured.r   )ÚCursorWrapper)ÚBaseDatabaseWrapperNc           	      ó¸  •— t         j                  }|j                  t        «      €
 ‰| ||«      S t	        || j
                  ||dd¬«      5 }t        || «       |j                  rX|j                  j                  d   j                  d«      }|�.t        || j
                  j                  ||| j                  |«        ‰| ||«      cd d d «       S # 1 sw Y   y xY w)NÚformatF©Ú
paramstyleÚexecutemanyÚ_experimentsÚattach_explain_plans)r   r_   r`   rO   r   ÚcursorÚ_set_db_datarñ   ró   rt   r
   Ú
connectionÚmogrify)rZ   ÚsqlÚparamsrÒ   Úspanró   Úreal_executes         €rI   Úexecutez!install_sql_hook.<locals>.execute_  sË   ø€ ä�k‰kˆØ×ÑÔ0Ó1Ð9Ù  c¨6Ó2Ð2äØ�—‘˜c 6°hÈEô
ð 	3àÜ˜˜tÔ$Ø�zŠzØŸ*™*×,Ñ,¨^Ñ<×@Ñ@ÐAWÓX�ØÐ&Ü/ØØŸ™×.Ñ.ØØØŸ™Øôñ    c¨6Ó2÷	3÷ 	3ò 	3ús   ÁA:CÃCc                 óð   •— t         j                  }|j                  t        «      €
 ‰| ||«      S t	        || j
                  ||dd¬«      5 }t        || «        ‰| ||«      cd d d «       S # 1 sw Y   y xY w)Nr#  Tr$  )r   r_   r`   rO   r   r)  r*  )rZ   r-  Ú
param_listrÒ   r/  Úreal_executemanys        €rI   r&  z%install_sql_hook.<locals>.executemanyv  su   ø€ ä�k‰kˆØ×ÑÔ0Ó1Ð9Ù# D¨#¨zÓ:Ð:äØ�—‘˜c :¸(ÐPTô
ð 	;àÜ˜˜tÔ$Ù# D¨#¨zÓ:÷		;÷ 	;ò 	;ús   ÁA,Á,A5c                 óX  •— t         j                  }|j                  t        «      € ‰| «      S t	        «       5  |j                  dd¬«       d d d «       |j                  t        j                  d¬«      5 }t        || «        ‰| «      cd d d «       S # 1 sw Y   ŒHxY w# 1 sw Y   y xY w)Nr–   Úquery)ÚmessageÚcategory)ÚopÚdescription)
r   r_   r`   rO   r   Úadd_breadcrumbÚ
start_spanr   ÚDBr*  )rZ   rÒ   r/  Úreal_connects      €rI   r–   z!install_sql_hook.<locals>.connect‚  sŸ   ø€ ä�k‰kˆØ×ÑÔ0Ó1Ð9Ù Ó%Ð%ä(Ó*ñ 	DØ×Ñ y¸7ÐÔC÷	Dð �^‰^œrŸu™u°)ˆ^Ó<ð 	&ÀÜ˜˜tÔ$Ù Ó%÷	&ñ 	&÷	Dð 	Dú÷	&ð 	&ús   ¹BÁ6B ÂBÂ B)zdjango.db.backendsrD   )Údjango.db.backends.utilsr   r®   Údjango.db.backends.utilÚdjango.db.backendsr!  Údjango.db.backends.base.baser1  r&  r–   rå   r   )r   r!  r1  r&  r–   r>  r0  r4  s        @@@rI   r�   r�   H  s«   ú€ ð:Ý:ðEå:ð
Ø$×,Ñ,ˆØ(×4Ñ4ÐØ*×2Ñ2ˆõ
3ô.
;ô&ð $€MÔØ +€MÔØ")ÐÔÜÐ&Õ'øôK ò :ß9ð:ûô ò EçDðEûô ò áðús3   …A( ŒA= “$B Á(A:Á9A:Á=BÂBÂ	BÂBc                 óú  — t        |d«      r|j                  n|}|j                  }| j                  t        j
                  |«       t        |d«      r0t        |j                  d«      r|j                  j                  «       n|j                  «       }|j                  d«      xs |j                  d«      }|� | j                  t        j                  |«       |j                  d«      }|� | j                  t        j                  |«       |j                  d«      }|�)| j                  t        j                  t        |«      «       |j                  d«      }|�!| j                  t        j                  |«       y y )	NÚdbr+  Úget_dsn_parametersÚdbnameÚdatabaseÚhostÚportÚunix_socket)rÃ   rD  ÚvendorÚset_datar	   Ú	DB_SYSTEMr+  rE  Úget_connection_paramsrt   ÚDB_NAMEÚSERVER_ADDRESSÚSERVER_PORTr   ÚSERVER_SOCKET_ADDRESS)	r/  Úcursor_or_dbrD  rK  Úconnection_paramsÚdb_nameÚserver_addressÚserver_portÚserver_socket_addresss	            rI   r*  r*  •  s@  € ô $ L°$Ô7ˆ�Š¸\€BØ�Y‰Y€FØ‡M�M”(×$Ñ$ fÔ-ô �< Ô.Ü�L×+Ñ+Ð-AÔBð 	×Ñ×2Ñ2Ô4ð ×%Ñ%Ó'ð	 ð  ×#Ñ# HÓ-ÒRÐ1B×1FÑ1FÀzÓ1R€GØÐØ�‰”h×&Ñ&¨Ô0à&×*Ñ*¨6Ó2€NØÐ!Ø�‰”h×-Ñ-¨~Ô>à#×'Ñ'¨Ó/€KØÐØ�‰”h×*Ñ*¬I°kÓ,BÔCà-×1Ñ1°-Ó@ÐØÐ(Ø�‰”h×4Ñ4Ð6KÕLð )rJ   rD   )tÚ
__future__r   rò   Ú	threadingr¡   Ú	importlibr   Úsentry_sdk._compatr   r   Úsentry_sdk._typesr   Úsentry_sdk.constsr   r	   Ú!sentry_sdk.db.explain_plan.djangor
   Úsentry_sdk.hubr   r   Úsentry_sdk.scoper   Úsentry_sdk.serializerr   Úsentry_sdk.tracingr   r   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   r   r   r   r   Úsentry_sdk.integrationsr   r   Úsentry_sdk.integrations.loggingr   Úsentry_sdk.integrations.wsgir   Ú$sentry_sdk.integrations._wsgi_commonr   rP   r    r�   rb   r"   rü   Údjango.corer#   Údjango.urlsr$   r®   Údjango.core.urlresolversr%   Ú+sentry_sdk.integrations.django.transactionsr&   Ú(sentry_sdk.integrations.django.templatesr'   r(   Ú)sentry_sdk.integrations.django.middlewarer)   Ú/sentry_sdk.integrations.django.signals_handlersr*   Ú$sentry_sdk.integrations.django.viewsr+   Ú&sentry_sdk.integrations.django.cachingr0   Útypingr1   r2   r3   r4   r5   r6   r‘   r7   Údjango.http.responser8   Údjango.http.requestr9   Údjango.utils.datastructuresr:   r;   r<   r=   r>   r?   r@   rA   rF   rT   rO   rª   ÚLockr«   r¯   r˜   r”   rÌ   rÔ   rÖ   rØ   r“   rÐ   r—   ræ   rè   r�   r*  r�   rJ   rI   ú<module>rx     s¬  ðå &ã 
Û Û Ý #ç 6Ý +ß *Ý Iß 8Ý 7Ý ;ß GÝ 7÷
÷ 
õ 
÷ >Ý 9Ý =Ý Að/Ý0Ý7Ý#Ý$ð5Ý'ð9Ý+õ H÷õ OÝ IÝ <à�"�1Ð˜ÒÞDà€Mñ ÝÝÝÝÝÝå5Ý1Ý-Ý:å'Ý&Ý<ßQÓQð �GÒó/ò-ð
 4Ð ôQ˜ô Qðh €Ø �)—.‘.Ó"€ò4=òn2ò20ò,'òT
ò$
HòNòDò0ó<,ô(*6Ð-ô *6òZò2J(óZMøðW ò 5ß4Ð4ð5ûð
 ò 9ß8Ð8ð9ûàò /Ù
Ð-Ó
.Ð.ð/úsH   ÂF? Â!F Â(F- ÆF*Æ&F? Æ)F*Æ*F? Æ-F<Æ8F? Æ;F<Æ<F? Æ?G