Ë
    õ�Dj-3  ã                   óš  — d dl Z d dlZd dlm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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mZmZmZmZmZmZ d dlmZ erDd 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% d dl&m'Z'm(Z( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 	 d dl2m3Z3m4Z5 d dl6m7Z7 d dl0m8Z8 d dl9m:Z: e:jx                  Z=e3j|                  Z?e8j€                  ZA	 e3j„                  ZC G d„ de«      ZE G d„ de«      ZFd„ ZGd „ ZHd!„ ZBd"„ ZId*d#„ZJd$„ ZKd%„ ZLd&„ ZMd'„ ZN eeE«      d(„ «       ZOd)„ ZPy# e;$ r	  ed«      ‚w xY w# eD$ r Y Œ\w xY w)+é    N)Úisawaitable)Úurlsplit)Úcontinue_trace)ÚOP)ÚIntegrationÚDidNotEnable)ÚRequestExtractorÚ_filter_headers)Úignore_logger)ÚTRANSACTION_SOURCE_COMPONENTÚTRANSACTION_SOURCE_URL)Úcapture_internal_exceptionsÚensure_integration_enabledÚevent_from_exceptionÚHAS_REAL_CONTEXTVARSÚCONTEXTVARS_ERROR_MESSAGEÚparse_versionÚreraise)ÚTYPE_CHECKING)Ú	Container)ÚAny)ÚCallable)ÚOptional)ÚUnion)ÚDict)ÚRequestÚRequestParameters)ÚBaseHTTPResponse)ÚEventÚEventProcessorÚExcInfoÚHint)ÚRoute)ÚSanicÚ__version__)ÚSanicException)ÚRouter)ÚErrorHandlerzSanic not installedc                   óF   — e Zd ZdZde› �ZdZ edh«      fd„Zed„ «       Z	y)ÚSanicIntegrationÚsanicz
auto.http.Ni”  c                 ó*   — |xs
 t        «       | _        y)aG  
        The unsampled_statuses parameter can be used to specify for which HTTP statuses the
        transactions should not be sent to Sentry. By default, transactions are sent for all
        HTTP statuses, except 404. Set unsampled_statuses to None to send transactions for all
        HTTP statuses, including 404.
        N)ÚsetÚ_unsampled_statuses)ÚselfÚunsampled_statusess     úaC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/sanic.pyÚ__init__zSanicIntegration.__init__?   s   € ð $6Ò#>¼»ˆÕ ó    c                  óŒ  — t        t        «      t        _        t        j                  €t	        dj                  t        «      «      ‚t        j                  dk  rt	        d«      ‚t        st	        dt        z   «      ‚t        j                  d«      rt        d«       t        j                  dk  rt        «        y t        «        y )NzUnparsable Sanic version: {})r   é   zSanic 0.8 or newer required.zUThe sanic integration for Sentry requires Python 3.7+  or the aiocontextvars package.z0.8.Úroot©é   é	   )r   ÚSANIC_VERSIONr*   Úversionr   Úformatr   r   Ú
startswithr   Ú_setup_legacy_sanicÚ_setup_sanic© r3   r1   Ú
setup_oncezSanicIntegration.setup_onceI   s¥   € ô $1´Ó#?ÔÔ ä×#Ñ#Ð+ÜÐ=×DÑDÄ]ÓSÓTÐTä×#Ñ# fÒ,ÜÐ=Ó>Ð>å#ô ð2Ü4MñNóð ô
 ×#Ñ# FÔ+ô ˜&Ô!ä×#Ñ# gÒ-ÜÔ!Øä�r3   )
Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginr;   Ú	frozensetr2   ÚstaticmethodrA   r@   r3   r1   r*   r*   :   s;   „ Ø€JØ˜*˜Ð&€FØ€Gá*3°S°EÓ*:ó ?ð ñ#ó ñ#r3   r*   c                   ó<   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)
ÚSanicRequestExtractorc                 ón   — | j                   j                  €yt        | j                   j                  «      S )Nr   )ÚrequestÚbodyÚlen©r/   s    r1   Úcontent_lengthz$SanicRequestExtractor.content_lengthq   s*   € à�<‰<×ÑÐ$ØÜ�4—<‘<×$Ñ$Ó%Ð%r3   c                 ó@   — t        | j                  j                  «      S ©N)ÚdictrL   ÚcookiesrO   s    r1   rT   zSanicRequestExtractor.cookiesw   s   € ä�D—L‘L×(Ñ(Ó)Ð)r3   c                 ó.   — | j                   j                  S rR   )rL   rM   rO   s    r1   Úraw_datazSanicRequestExtractor.raw_data{   ó   € à�|‰|× Ñ Ð r3   c                 ó.   — | j                   j                  S rR   )rL   ÚformrO   s    r1   rY   zSanicRequestExtractor.form   rW   r3   c                 ó   — t        «       ‚rR   )ÚNotImplementedErrorrO   s    r1   Úis_jsonzSanicRequestExtractor.is_jsonƒ   s   € ä!Ó#Ð#r3   c                 ó.   — | j                   j                  S rR   )rL   ÚjsonrO   s    r1   r^   zSanicRequestExtractor.json‡   rW   r3   c                 ó.   — | j                   j                  S rR   )rL   ÚfilesrO   s    r1   r`   zSanicRequestExtractor.files‹   s   € à�|‰|×!Ñ!Ð!r3   c                 ó4   — t        |j                  xs d«      S )Nr@   )rN   rM   )r/   Úfiles     r1   Úsize_of_filez"SanicRequestExtractor.size_of_file�   s   € ä�4—9‘9’? Ó#Ð#r3   N)rB   rC   rD   rP   rT   rV   rY   r\   r^   r`   rc   r@   r3   r1   rJ   rJ   p   s*   „ ò&ò*ò!ò!ò$ò!ò"ó$r3   rJ   c                  ó@   — t         t        _         t        t        _        y rR   )Ú_startupr$   Ú_sentry_error_handler_lookupr(   Úlookupr@   r3   r1   r?   r?   ”   s   € ä„E„NÜ6„LÕr3   c                  ó^   — t         t        _        t        t        _        t        t        _        y rR   )	Ú_legacy_handle_requestr$   Úhandle_requestÚ_legacy_router_getr'   Úgetrf   r(   rg   r@   r3   r1   r>   r>   š   s   € ä1„EÔÜ#„F„JÜ6„LÕr3   c              ƒ   óØ   K  —  | j                  d«      t        «        | j                  d«      t        «        | j                  d«      t        «       t	        | «      ƒ d {  –—†  y 7 Œ­w)Nzhttp.lifecycle.requestzhttp.lifecycle.responsezhttp.routing.after)ÚsignalÚ_context_enterÚ_context_exitÚ_set_transactionÚold_startuprO   s    r1   re   re   ¡   sY   è ø€ ð *€D‡K�KÐ(Ó)¬.Ô9ð +€D‡K�KÐ)Ó*¬=Ô9ð &€D‡K�KÐ$Ó%Ô&6Ô7ô �dÓ
×Òús   ‚A A*Á"A(Á#A*c              ƒ   ó´  K  — t        j                  «       j                  t        «      d u| j                  _        | j                  j
                  sy t        j                  | «      }t        j                  «       | j                  _	        | j                  j                  j                  «       }|j                  «        |j                  t        |«      «       t        t        | j                   «      t"        j$                  | j&                  t(        t        j*                  ¬«      }t        j,                  |«      j                  «       | j                  _        y ­w)N)ÚopÚnameÚsourcerF   )Ú
sentry_sdkÚ
get_clientÚget_integrationr*   ÚctxÚ_sentry_do_integrationÚweakrefÚrefÚisolation_scopeÚ_sentry_scopeÚ	__enter__Úclear_breadcrumbsÚadd_event_processorÚ_make_request_processorr   rS   Úheadersr   ÚHTTP_SERVERÚpathr   rF   Ústart_transactionÚ_sentry_transaction)rL   Úweak_requestÚscopeÚtransactions       r1   ro   ro   µ   sô   è ø€ ô 	×ÑÓ×/Ñ/Ô0@ÓAÈÐMð ‡K�KÔ&ð �;‰;×-Ò-Øä—;‘;˜wÓ'€LÜ *× :Ñ :Ó <€G‡K�KÔØ�K‰K×%Ñ%×/Ñ/Ó1€EØ	×ÑÔØ	×ÑÔ5°lÓCÔDä ÜˆW�_‰_ÓÜ�>‰>à�\‰\Ü%Ü×&Ñ&ô€Kô '1×&BÑ&BØó'ç�iƒkð ‡K�KÕ#ùs   ‚EEc              ƒ   óª  K  — t        «       5  | j                  j                  s
	 d d d «       y t        j                  «       j                  t        «      }|€d n|j                  }t        «       5  | j                  j                  j                  |«       | j                  j                  xj                  t        |t        «      xr ||j                  vz  c_
        | j                  j                  j                  d d d «       d d d «       | j                  j                  j                  d d d «       d d d «       y # 1 sw Y   Œ9xY w# 1 sw Y   y xY w­wrR   )r   rz   r{   rw   rx   ry   r*   Ústatusrˆ   Úset_http_statusÚsampledÚ
isinstancer.   Ú__exit__r   )rL   ÚresponseÚintegrationÚresponse_statuss       r1   rp   rp   Ñ   s  è ø€ ä	$Ó	&ñ =Ø�{‰{×1Ò1Ø÷=ð =ô !×+Ñ+Ó-×=Ñ=Ô>NÓOˆà"*Ð"2™$¸¿¹ˆô )Ó*ñ 	GØ�K‰K×+Ñ+×;Ñ;¸OÔLØ�K‰K×+Ñ+×3Ò3Ü˜;Ô(8Ó9ò KØ#¨;×+JÑ+JÐJñÕ3ð �K‰K×+Ñ+×4Ñ4°T¸4ÀÔF÷	Gð 	�‰×!Ñ!×*Ñ*¨4°°tÔ<÷%=ð =÷	Gð 	Gú÷=ð =üs@   ‚E�E¥	E®AEÁ/BD;Ä/EÄ2	EÄ;E	Å EÅEÅEc              ‹   óL  K  — | j                   j                  r~t        «       5  t        j                  «       }|j
                  j                  | j                  j
                  d«      j                  d«      }|j                  |t        ¬«       d d d «       y y # 1 sw Y   y xY w­w)NÚ ú.©rv   )rz   r{   r   rw   Úget_current_scoperu   ÚreplaceÚappÚstripÚset_transaction_namer   )rL   ÚrouteÚ_rŠ   Ú
route_names        r1   rq   rq   è   s‰   è ø€ à‡{�{×)Ò)Ü(Ó*ñ 	XÜ×0Ñ0Ó2ˆEØŸ™×+Ñ+¨G¯K©K×,<Ñ,<¸bÓA×GÑGÈÓLˆJØ×&Ñ& zÔ:VÐ&ÔW÷	Xð 	Xð *÷	Xð 	Xüs   ‚!B$£A+BÂ
B$ÂB!ÂB$c                 ó    ‡— t        |«       t        | |g|¢­i |¤ŽŠ‰€y t        j                  «       j	                  t
        «      €‰S ˆfd„}|S )Nc              “   ó$  •K  — 	  ‰| |«      }t        |«      r
|ƒ d {  –—† }|t        j                  r(t        j                  dk(  rt        | «      ƒ d {  –—†  S S S 7 Œ>7 Œ	# t        $ r* t        j                  «       }t        |«       t        |Ž  Y nw xY w	 t        j                  r)t        j                  dk(  rt        | «      ƒ d {  –—†7   y y y # t        j                  r)t        j                  dk(  rt        | «      ƒ d {  –—†7   w w w xY w­w)Nr7   )	r   r*   r;   rp   Ú	ExceptionÚsysÚexc_infoÚ_capture_exceptionr   )rL   Ú	exceptionr’   r¥   Úold_error_handlers       €r1   Úsentry_wrapped_error_handlerzB_sentry_error_handler_lookup.<locals>.sentry_wrapped_error_handlerü   s÷   øè ø€ ð	-Ù(¨°)Ó<ˆHÜ˜8Ô$Ø!)Ÿ>�Øô  ×'Ò'Ô,<×,DÑ,DÈÒ,OÜ# GÓ,×,Ñ,ð -PÐ'ð *øð -ùô ò 	ô —|‘|“~ˆHÜ˜xÔ(Ü�XÓð	úð ô  ×'Ò'Ô,<×,DÑ,DÈÒ,OÜ# GÓ,×,Ò,ð -PÐ'øÔ×'Ò'Ô,<×,DÑ,DÈÒ,OÜ# GÓ,×,Ò,ð -PÐ'üss   ƒD…A! žAŸA! ¤1DÁAÁDÁA! ÁDÁ!0BÂC ÂBÂC Â1DÃ	CÃ
DÃ2DÄDÄDÄD)r¦   Úold_error_handler_lookuprw   rx   ry   r*   )r/   r§   ÚargsÚkwargsr©   r¨   s        @r1   rf   rf   ñ   sY   ø€ ä�yÔ!Ü0°°yÐRÀ4ÒRÈ6ÑRÐàÐ Øä×ÑÓ×.Ñ.Ô/?Ó@ÐHØ Ð ô-ð( (Ð'r3   c              �   ó°  K  — t        j                  «       j                  t        «      €t	        | |g|¢­i |¤Žƒ d {  –—† S t        j                  |«      }t        j                  «       5 }|j                  «        |j                  t        |«      «       t	        | |g|¢­i |¤Ž}t        |«      r
|ƒ d {  –—† }|cd d d «       S 7 Œˆ7 Œ# 1 sw Y   y xY w­wrR   )rw   rx   ry   r*   Úold_handle_requestr|   r}   r~   r�   r‚   rƒ   r   )r/   rL   r«   r¬   r‰   rŠ   r’   s          r1   ri   ri     sÅ   è ø€ ä×ÑÓ×.Ñ.Ô/?Ó@ÐHÜ'¨¨gÐG¸ÒGÀÑG×GÐGä—;‘;˜wÓ'€Lä	×	#Ñ	#Ó	%ð ¨Ø×ÑÔ!Ø×!Ñ!Ô"9¸,Ó"GÔHä% d¨GÐE°dÒE¸fÑEˆÜ�xÔ Ø%—~ˆHà÷ñ ð	 Høð &ø÷ð üs:   ‚;C½C¾-CÁ+AC
Â6CÂ7C
Â<CÃC
Ã
CÃCc                 ó>  — t        | g|¢­Ž }t        j                  «       j                  t        «      �Üt        «       5  t        j                  «       }t        j                  rt        j                  dk\  rl| j                  j                  j                  }|d   j                  }|j                  d|z  «      r|t        |«      dz   d  }|j                  |t        ¬«       n$|j                  |d   j                  t        ¬«       d d d «       |S |S # 1 sw Y   |S xY w)N)r8   é   r   z%s.é   r˜   )Úold_router_getrw   rx   ry   r*   r   Úget_isolation_scoper;   rz   r›   ru   r=   rN   r�   r   rB   )r/   r«   ÚrvrŠ   Úsanic_app_nameÚsanic_routes         r1   rk   rk   %  s  € ä	˜Ð	$˜tÒ	$€BÜ×ÑÓ×.Ñ.Ô/?Ó@ÐLÜ(Ó*ñ 	Ü×2Ñ2Ó4ˆEÜ×'Ò'Ô,<×,DÑ,DÈÒ,Oð "&§¡§¡×!2Ñ!2�Ø  ™eŸj™j�à×)Ñ)¨%°.Ñ*@ÔAð #.¬c°.Ó.AÀAÑ.EÐ.GÐ"H�Kà×*Ñ*ØÔ(Dð +õ ð ×*Ñ*Ø�q‘E—N‘NÔ+Gð +ô ÷'	ð. €Iˆ2€I÷/	ð. €Iús   ¾CDÄDc                 ó0  — t        «       5  t        | t        j                  «       j                  dddœ¬«      \  }}|r.t        |d   d   d«      r|d   d   j                  r
	 d d d «       y t        j                  ||¬«       d d d «       y # 1 sw Y   y xY w)	Nr+   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanismr¥   r   Úquiet)Úhint)r   r   rw   rx   ÚoptionsÚhasattrr¼   Úcapture_event)r§   Úeventr½   s      r1   r¦   r¦   C  s“   € ô 
%Ó	&ñ 
3Ü*ØÜ%×0Ñ0Ó2×:Ñ:Ø&°5Ñ9ô
‰ˆˆtñ ”G˜D Ñ,¨QÑ/°Ô9¸dÀ:Ñ>NÈqÑ>Q×>WÒ>WØ÷
3ð 
3ô 	× Ñ  ¨TÕ2÷
3÷ 
3ñ 
3ús   ‹ABÁ,BÂBc                 ó   ‡ — ˆ fd„}|S )Nc                 ó  •— 	 |rt        |d   d   t        «      ry  ‰«       }|€| S t        «       5  t	        |«      }|j                  | «       | d   }t        |j                  «      }|j                  ›d|j                  ›|j                  ›�|d<   |j                  |d<   |j                  |d<   d|j                  i|d	<   t        t        |j                   «      «      |d
<   d d d «       | S # t        $ r Y ŒÛw xY w# 1 sw Y   | S xY w)Nr¥   r   rL   z://ÚurlÚquery_stringÚmethodÚREMOTE_ADDRÚenvr„   )Ú
issubclassr&   ÚKeyErrorr   rJ   Úextract_into_eventr   rÄ   ÚschemeÚnetlocr†   ÚqueryrÆ   Úremote_addrr
   rS   r„   )rÁ   r½   rL   Ú	extractorÚrequest_infoÚurlpartsr‰   s         €r1   Úsanic_processorz0_make_request_processor.<locals>.sanic_processorU  s  ø€ ð	Ùœ
 4¨
Ñ#3°AÑ#6¼ÔGØñ “.ˆØˆ?ØˆLä(Ó*ñ 	MÜ-¨gÓ6ˆIØ×(Ñ(¨Ô/à  Ñ+ˆLÜ §¡Ó,ˆHð —“Ø—’Ø—’ð#ˆL˜Ñð ,4¯>©>ˆL˜Ñ(Ø%,§^¡^ˆL˜Ñ"Ø#0°'×2EÑ2EÐ"FˆL˜ÑÜ&5´d¸7¿?¹?Ó6KÓ&LˆL˜Ñ#÷!	Mð$ ˆøô3 ò 	Ùð	ú÷	Mð$ ˆús   ƒC, ±B1C;Ã,	C8Ã7C8Ã;Dr@   )r‰   rÓ   s   ` r1   rƒ   rƒ   S  s   ø€ ôðB Ðr3   rR   )Qr¤   r|   Úinspectr   Úurllib.parser   rw   r   Úsentry_sdk.constsr   Úsentry_sdk.integrationsr   r   Ú$sentry_sdk.integrations._wsgi_commonr	   r
   Úsentry_sdk.integrations.loggingr   Úsentry_sdk.tracingr   r   Úsentry_sdk.utilsr   r   r   r   r   r   r   Útypingr   Úcollections.abcr   r   r   r   r   r   Úsanic.requestr   r   Úsanic.responser   Úsentry_sdk._typesr   r    r!   r"   Úsanic.routerr#   r+   r$   r%   r:   Úsanic.exceptionsr&   r'   Úsanic.handlersr(   ÚImportErrorrg   rª   rj   r®   rl   r²   re   rr   ÚAttributeErrorr*   rJ   r?   r>   ro   rp   rq   rf   ri   rk   r¦   rƒ   r@   r3   r1   ú<module>ræ      s:  ðÛ 
Û Ý Ý !ã Ý %Ý  ß =ß RÝ 9ß S÷÷ ñ õ !áÝ)ÝÝÝÝÝç8Ý/çFÓFÝ"ð.ß9Ý/Ý#Ý+ð (×.Ñ.Ð Ø×)Ñ)Ð Ø—‘€ð	à—.‘.€Kô
3�{ô 3ôl!$Ð,ô !$òH7ò7òò(ó8=ò.Xò(òDò$ñ< Ð,Ó-ñ3ó .ð3ó#øðO	 ò .Ù
Ð,Ó
-Ð-ð.ûð ò 	Ùð	ús   Â"D1 Ã!E Ä1D?ÅE
Å	E
