Ë
    õ�Dj.f  ã                   óÆ  — d dl Z 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mZmZ d dlmZmZmZmZ d dlmZ d dlmZ d d	lmZ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$rd dl#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l0Z0d dl0m1Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZCmDZD 	 d dlFmGZG 	 	 d dlIZJdZKdZL G d„ de«      ZMd„ ZN eeM«      d+d„«       ZOd„ ZP eeM«      d„ «       ZQd „ ZRd!„ ZSd"„ ZTd#„ ZUd$„ ZVd%„ ZW G d&„ d'«      ZXd(„ ZYd)„ ZZd*„ Z[y# eE$ r	  ed«      ‚w xY w# eE$ r	 d dlHmGZG Y Œ|w xY w# eE$ r d dlJZJY Œ…w xY w# eE$ r dZJY Œ’w xY w),é    N)ÚSet)Údeepcopy)ÚOP)ÚDidNotEnableÚIntegrationÚ$_DEFAULT_FAILED_REQUEST_STATUS_CODES)ÚDEFAULT_HTTP_METHODS_TO_CAPTUREÚHttpCodeRangeContainerÚ_is_json_content_typeÚrequest_body_within_bounds)ÚSentryAsgiMiddleware)Úshould_send_default_pii)ÚSOURCE_FOR_STYLEÚTRANSACTION_SOURCE_COMPONENTÚTRANSACTION_SOURCE_ROUTE)ÚAnnotatedValueÚcapture_internal_exceptionsÚensure_integration_enabledÚevent_from_exceptionÚloggerÚparse_versionÚtransaction_from_function)ÚTYPE_CHECKING)ÚAnyÚ	AwaitableÚCallableÚ	ContainerÚDictÚOptionalÚTupleÚUnion)ÚEventÚHttpStatusCodeRange)Ú__version__)Ú	Starlette)Ú
UploadFile)Ú
Middleware)ÚAuthenticationMiddleware)ÚRequest)ÚMatch)ÚASGIAppÚReceiveÚScopeÚSendzStarlette is not installed)ÚExceptionMiddlewarezgeneric Starlette request)ÚendpointÚurlc                   ó>   — e Zd ZdZde› �ZdZdedefd„Ze	d„ «       Z
y)	ÚStarletteIntegrationÚ	starlettez
auto.http.Ú r1   Tc                 óP  — |t         vrt        d|›dt         ›d�«      ‚|| _        || _        t	        t        t        j                  |«      «      | _        t        |t        «      r|| _        y t        j                  dt        d¬«       |€t        | _        y t!        |«      | _        y )Nz%Invalid value for transaction_style: z (must be in ú)zgPassing a list or None for failed_request_status_codes is deprecated. Please pass a set of int instead.é   )Ú
stacklevel)ÚTRANSACTION_STYLE_VALUESÚ
ValueErrorÚtransaction_styleÚmiddleware_spansÚtupleÚmapÚstrÚupperÚhttp_methods_to_captureÚ
isinstancer   Úfailed_request_status_codesÚwarningsÚwarnÚDeprecationWarningr   r
   )Úselfr<   rD   r=   rB   s        úeC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\sentry_sdk/integrations/starlette.pyÚ__init__zStarletteIntegration.__init__Y   s    € ð Ô$<Ñ<Ýâ$Ö&>ð@óð ð "3ˆÔØ 0ˆÔÜ',¬S´·±Ð<SÓ-TÓ'UˆÔ$äÐ1´3Ô7à+ð Õ,ô �M‰Mð4ä"Øõ	ð +Ð2Ü3W�Õ0ä3IØ/ó4�Õ0ó    c                  ó¾   — t        t        «      } | €t        dj                  t        «      «      ‚t	        «        t        «        t        «        | dk\  rt        «        y y )Nz Unparsable Starlette version: {})r   é   )r   ÚSTARLETTE_VERSIONr   ÚformatÚpatch_middlewaresÚpatch_asgi_appÚpatch_request_responseÚpatch_templates)Úversions    rI   Ú
setup_oncezStarletteIntegration.setup_once}   sW   € ô  Ô 1Ó2ˆàˆ?ÜØ2×9Ñ9Ô:KÓLóð ô 	ÔÜÔÜÔ à�gÒÜÕð rK   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginr<   r   r	   rJ   ÚstaticmethodrU   © rK   rI   r3   r3   S   sA   „ Ø€JØ˜*˜Ð&€FàÐð  Ø$HØØ ?ó"ðH ñó ñrK   r3   c                 óX   ‡— | j                   Šˆfd„}‰j                  dv}|r|| _         | S )Nc              ›   óÄ  •‡‡‡K  — t        j                  «       j                  t        «      }|�|j                  s ‰| |‰‰fi |¤Žƒ d {  –—† S | j
                  j                  Št        | ||«      \  }}|�%t        j                  «       j                  ||¬«       t        j                  t        j                  ‰t        j                  ¬«      5 }|j                  d‰«       ˆˆfd„}	t        ‰dt!        ‰«      «      }
|
dk(  }|s|	n‰}ˆˆfd„}t        ‰dt!        ‰«      «      }|dk(  }|s|n‰} ‰| |||fi |¤Žƒ d {  –—† cd d d «       S 7 �Œ7 Œ# 1 sw Y   y xY w­w)	N©Úsource©ÚopÚnamerZ   ústarlette.middleware_namec            
   Ÿ   ó  •K  — t        j                  t        j                  t	        ‰dt        ‰«      «      t        j                  ¬«      5 }|j                  d‰«        ‰| i |¤Žƒ d {  –—† cd d d «       S 7 Œ# 1 sw Y   y xY w­w©NrX   ra   rd   )	Ú
sentry_sdkÚ
start_spanr   ÚMIDDLEWARE_STARLETTE_RECEIVEÚgetattrr@   r3   rZ   Úset_tag)ÚargsÚkwargsÚspanÚmiddleware_nameÚreceives      €€rI   Ú_sentry_receivezO_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receive«   sz   øè ø€ ä×*Ñ*Ü×6Ñ6Ü  ¨.¼#¸g»,ÓGÜ/×6Ñ6ôð :ð Ø—L‘LÐ!<¸oÔNÙ!(¨$Ð!9°&Ñ!9×9÷:ñ :ð :ø÷:ð :üó0   ƒA	BÁA:Á*A8Á+A:Á.
BÁ8A:Á:BÁ?BrV   rq   c            
   Ÿ   ó  •K  — t        j                  t        j                  t	        ‰dt        ‰«      «      t        j                  ¬«      5 }|j                  d‰«        ‰| i |¤Žƒ d {  –—† cd d d «       S 7 Œ# 1 sw Y   y xY w­wrf   )	rg   rh   r   ÚMIDDLEWARE_STARLETTE_SENDrj   r@   r3   rZ   rk   )rl   rm   rn   ro   Úsends      €€rI   Ú_sentry_sendzL_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_sendº   sz   øè ø€ ä×*Ñ*Ü×3Ñ3Ü   ~´s¸4³yÓAÜ/×6Ñ6ôð 7ð Ø—L‘LÐ!<¸oÔNÙ!% tÐ!6¨vÑ!6×6÷7ñ 7ð 7ø÷7ð 7ürr   rv   )rg   Ú
get_clientÚget_integrationr3   r=   Ú	__class__rV   Ú _get_transaction_from_middlewareÚget_current_scopeÚset_transaction_namerh   r   ÚMIDDLEWARE_STARLETTErZ   rk   rj   r@   )ÚappÚscoperp   ru   rm   Úintegrationrc   r`   Úmiddleware_spanrq   Úreceive_nameÚreceive_patchedÚnew_receiverv   Ú	send_nameÚsend_patchedÚnew_sendro   Úold_calls     ``             @€rI   Ú_create_span_callz6_enable_span_for_middleware.<locals>._create_span_call“   sm  ûè ø€ ä ×+Ñ+Ó-×=Ñ=Ô>RÓSˆØÐ k×&BÒ&BÙ! # u¨g°tÑF¸vÑF×FÐFàŸ-™-×0Ñ0ˆô 8¸¸UÀKÓP‰ˆˆfØÐÜ×(Ñ(Ó*×?Ñ?ØØð @ô ô
 ×"Ñ"Ü×&Ñ&Ø Ü'×.Ñ.ô
ð %	Oð Ø×#Ñ#Ð$?ÀÔQõ:ô # 7¨J¼¸G»ÓEˆLØ*Ð.?Ñ?ˆOÙ1@™/ÀgˆKõ7ô    j´#°d³)Ó<ˆIØ$¨Ñ6ˆLÙ+7‘|¸TˆHá! # u¨k¸8ÑNÀvÑN×N÷K%	Oñ %	Oð Gùðb Oø÷K%	Oð %	Oüs>   †AE ÁEÁBE ÃA0EÅEÅEÅE ÅEÅEÅE )r‰   Ú%_sentry_authenticationmiddleware_callÚ _sentry_exceptionmiddleware_call)Ú__call__rV   )Úmiddleware_classr‰   Únot_yet_patchedrˆ   s      @rI   Ú_enable_span_for_middlewarer�   �   s@   ø€ à×(Ñ(€Hô5Oðn ×'Ñ'ð 0ð €Oñ Ø$5ÐÔ!àÐrK   c                 ó®   — t        | t        j                  «       j                  t        j
                  |dœ¬«      \  }}t        j                  ||¬«       y )N)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)r   rg   rw   Úoptionsr3   rY   Úcapture_event)Ú	exceptionr’   Úeventr•   s       rI   Ú_capture_exceptionrš   Ö   sG   € ô 'ØÜ!×,Ñ,Ó.×6Ñ6Ü/×:Ñ:ÀwÑOô�K€Eˆ4ô ×Ñ˜U¨Ö.rK   c                 óˆ   ‡‡— | j                   Šdt        ‰«      v}|r%ˆfd„}|| _         | j                  Šˆfd„}|| _        yy)zX
    Capture all exceptions in Starlette app and
    also extract user information.
    Ú_sentry_middleware_initc                 óº   •‡—  ‰| g|¢­i |¤Ž | j                   j                  «       Šˆfd„}| j                   j                  «       D ]  }|| j                   |<   Œ y )Nc              Ÿ   ó¸  •K  — t        j                  «       j                  t        «      }|d   }|�Qt	        |d«      xr4 t        |j                  t        «      xr |j                  |j                  v }|rt        |d¬«       d }t        |«      j                  D ]  }|‰v sŒ‰|   } n |€y t        |«      r || g|¢­i |¤Žƒ d {  –—† S  || g|¢­i |¤ŽS 7 Œ­w)Nr   Ústatus_codeT)r’   )rg   rw   rx   r3   ÚhasattrrC   rŸ   ÚintrD   rš   r‘   Ú__mro__Ú_is_async_callable)	rH   rl   rm   r€   ÚexpÚis_http_server_errorÚold_handlerÚclsÚold_handlerss	           €rI   Ú!_sentry_patched_exception_handlerzfpatch_exception_middleware.<locals>._sentry_middleware_init.<locals>._sentry_patched_exception_handlerõ   sù   øè ø€ ä(×3Ñ3Ó5×EÑEÜ(ó�ð ˜1‘g�àÐ*ä  ]Ó3ò WÜ& s§¡¼Ó<òWàŸO™O¨{×/VÑ/VÐVð )ñ
 ,Ü*¨3¸Õ=ð #�Ü ›9×,Ñ,ò �CØ˜lÒ*Ø&2°3Ñ&7˜Ùðð
 Ð&Øä% kÔ2Ù!,¨TÐ!C°DÒ!C¸FÑ!C×CÐCá& tÐ=¨dÒ=°fÑ=Ð=ð Dús   ƒBCÂ"%CÃCÃC)Ú_exception_handlersÚcopyÚkeys)rH   rl   rm   r©   Úkeyr¨   Úold_middleware_inits        @€rI   rœ   z;patch_exception_middleware.<locals>._sentry_middleware_initî   sc   ù€ á Ð6 tÒ6¨vÒ6ð  ×3Ñ3×8Ñ8Ó:ˆLô>ð@ ×/Ñ/×4Ñ4Ó6ò R�Ø0Q�×(Ñ(¨Ò-ñRrK   c              “   óN   •K  — t        |«        ‰| |||«      ƒ d {  –—†  y 7 Œ­w©N©Ú_add_user_to_sentry_scope©rH   r   rp   ru   rˆ   s       €rI   r‹   zDpatch_exception_middleware.<locals>._sentry_exceptionmiddleware_call  s%   øè ø€ ô & eÔ,Ù˜4 ¨°Ó6×6Ò6ús   ƒ%�#ž%N)rJ   r@   rŒ   )r�   rŽ   rœ   r‹   rˆ   r®   s       @@rI   Úpatch_exception_middlewarer´   â   sX   ù€ ð +×3Ñ3Ðà/´sÐ;NÓ7OÐO€Oáô(	RðT %<ÐÔ!à#×,Ñ,ˆô	7ð  %EÐÕ!ðA rK   c                 ój  — d| vryt        «       syi }| d   }t        |dd«      }|r|j                  d|j                  «       t        |dd«      }|r|j                  d|j                  «       t        |dd«      }|r|j                  d|j
                  «       t        j                  «       }||_        y)zZ
    Extracts user information from the ASGI scope and
    adds it to Sentry's scope.
    ÚuserNÚusernameÚidÚemail)	r   rj   Ú
setdefaultr·   r¸   r¹   rg   Úget_isolation_scoper¶   )r   Ú	user_infoÚstarlette_userr·   Úuser_idr¹   Úsentry_scopes          rI   r²   r²   /  s±   € ð �UÑØä"Ô$Øà€IØ˜6‘]€Nä�~ z°4Ó8€HÙØ×Ñ˜Z¨×)@Ñ)@ÔAä�n d¨DÓ1€GÙØ×Ñ˜T >×#4Ñ#4Ô5ä�N G¨TÓ2€EÙØ×Ñ˜W n×&:Ñ&:Ô;ä×1Ñ1Ó3€LØ!€LÕrK   c                 óV   ‡— | j                   Šdt        ‰«      v}|rˆfd„}|| _         yy)z/
    Add user information to Sentry scope.
    rŠ   c              “   óN   •K  —  ‰| |||«      ƒ d {  –—†  t        |«       y 7 Œ­wr°   r±   r³   s       €rI   rŠ   zNpatch_authentication_middleware.<locals>._sentry_authenticationmiddleware_callZ  s(   øè ø€ á˜4 ¨°Ó6×6Ð6Ü% eÕ,ð 7ús   ƒ%’#“%N)rŒ   r@   )r�   rŽ   rŠ   rˆ   s      @rI   Úpatch_authentication_middlewarerÂ   O  s7   ø€ ð
  ×(Ñ(€Hà=ÄSÈÃ]ÐR€Oáô	-ð
 %JÐÕ!ð rK   c                  óf   ‡— t         j                  Šdt        ‰«      v} | rˆfd„}|t         _        yy)za
    Patches Starlettes `Middleware` class to record
    spans for every middleware invoked.
    rœ   c                 ó¨   •— |t         k(  r
 ‰| |fi |¤ŽS t        |«      } ‰| |fi |¤Ž |t        k(  rt        |«       |t        k(  rt        |«       y y r°   )r   r�   r(   rÂ   r/   r´   )rH   r§   r–   Úspan_enabled_clsr®   s       €rI   rœ   z2patch_middlewares.<locals>._sentry_middleware_initn  s`   ø€ àÔ*Ò*Ù*¨4°Ñ@¸Ñ@Ð@ä:¸3Ó?ÐÙ Ð&6ÑB¸'ÒBàÔ.Ò.Ü/°Ô4àÔ)Ò)Ü*¨3Õ/ð *rK   N)r'   rJ   r@   )rŽ   rœ   r®   s     @rI   rP   rP   b  s8   ø€ ô %×-Ñ-Ðà/´sÐ;NÓ7OÐO€Oáô	0ð 6Œ
Õð! rK   c                  óF   ‡— t         j                  Šˆfd„} | t         _        y)zG
    Instrument Starlette ASGI app using the SentryAsgiMiddleware.
    c              “   ól  •‡ K  — t        j                  «       j                  t        «      }|€ ‰‰ |||«      ƒ d {  –—† S t	        ˆˆ fd„t        j
                  |j                  t        j                  |r|j                  nt        ¬«      }|j                  |_         ||||«      ƒ d {  –—† S 7 Œs7 Œ­w)Nc                  ó   •—  ‰‰g| ¢­i |¤ŽS r°   r\   )ÚaÚkwÚold_apprH   s     €€rI   ú<lambda>zBpatch_asgi_app.<locals>._sentry_patched_asgi_app.<locals>.<lambda>�  s   ø€ ™W TÐ4¨AÒ4°Ñ4€ rK   )Úmechanism_typer<   Úspan_originrB   )rg   rw   rx   r3   r   rY   r<   rZ   rB   r	   Ú
_run_asgi3rŒ   )rH   r   rp   ru   r€   Ú
middlewarerË   s   `     €rI   Ú_sentry_patched_asgi_appz0patch_asgi_app.<locals>._sentry_patched_asgi_app†  s£   ùè ø€ ä ×+Ñ+Ó-×=Ñ=Ô>RÓSˆØÐÙ   u¨g°tÓ<×<Ð<ä)Ü4Ü/×:Ñ:Ø)×;Ñ;Ü,×3Ñ3ñ ð ×3Ò3ä4ô

ˆ
ð )×3Ñ3ˆ
ÔÙ  w°Ó5×5Ð5ð =øð 6ús"   „8B4¼B0½A.B4Â+B2Â,B4Â2B4N)r%   rŒ   )rÑ   rË   s    @rI   rQ   rQ     s   ø€ ô
 × Ñ €Gô6ð* 2„IÕrK   c                 ó
  — t        | t        j                  «      r'| j                  } t        | t        j                  «      rŒ't	        j
                  | «      xs, t        | «      xr t	        j
                  | j                  «      S r°   )rC   Ú	functoolsÚpartialÚfuncÚasyncioÚiscoroutinefunctionÚcallablerŒ   )Úobjs    rI   r£   r£      sb   € ä
�Sœ)×+Ñ+Ô
,Ø�h‰hˆô �Sœ)×+Ñ+Õ
,ô ×&Ñ& sÓ+ò Ü�‹ÒCœ'×5Ñ5°c·l±lÓCðrK   c                  ón   ‡— t         j                  j                  Šˆfd„} | t         j                  _        y )Nc                 ó‚   •‡— | Št        ‰«      }|rˆfd„}|} nt        j                  ‰«      ˆfd„«       }|}  ‰| «      S )Nc               Ÿ   óÚ  •‡K  — t        j                  «       j                  t        «      }|€ ‰| i |¤Žƒ d {  –—† S | d   }t	        t        j
                  «       |j                  |«       t        j                  «       }t        |«      }|j                  «       ƒ d {  –—† Šˆfd„}t        j                  |_        |j                   |||«      «        ‰| i |¤Žƒ d {  –—† S 7 Œ«7 ŒH7 Œ­w)Nr   c                 ó   •— ˆfd„}|S )Nc                 ó|   •— | j                  di «      }‰rd‰v r‰d   |d<   d‰v r‰d   |d<   t        |«      | d<   | S )NÚrequestÚcookiesÚdata©Úgetr   )r™   r•   Úrequest_infoÚinfos      €rI   Úevent_processorz”patch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor.<locals>.event_processorË  sW   ø€ ð (-§y¡y°¸BÓ'?˜ÙØ(¨DÑ0Ø:>¸y¹/ ¨YÑ 7Ø%¨™~Ø7;¸F±| ¨VÑ 4Ü+3°LÓ+A˜˜iÑ(à$˜rK   r\   )Úreqr€   ræ   rå   s      €rI   Ú_make_request_event_processorz{patch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processorÉ  s   ø€ ô%ð +Ð*rK   )rg   rw   rx   r3   Ú _set_transaction_name_and_sourcer{   r<   r»   ÚStarletteRequestExtractorÚextract_request_inforY   Ú_nameÚadd_event_processor)	rl   rm   r€   rß   r¿   Ú	extractorrè   rå   Úold_funcs	          @€rI   Ú_sentry_async_funczTpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_funcµ  sæ   ùè ø€ ä(×3Ñ3Ó5×EÑEÜ(ó�ð Ð&Ù!)¨4Ð!:°6Ñ!:×:Ð:à˜q™'�ä0Ü×0Ñ0Ó2Ø×1Ñ1Øôô  *×=Ñ=Ó?�Ü5°gÓ>�	Ø&×;Ñ;Ó=×=�ô+ô$ &:×%DÑ%D�Ô"Ø×0Ñ0Ù1°'¸;ÓGôñ & tÐ6¨vÑ6×6Ð6ðK ;øð >øð2 7ús5   „5C+¹C%ºA$C+ÂC'ÂAC+Ã C)Ã!C+Ã'C+Ã)C+c                  ó2  •‡— t        j                  «       j                  t        «      }|€ ‰	| i |¤ŽS t        j                  «       }|j
                  �|j
                  j                  «        t        j                  «       }|j                  �|j                  j                  «        | d   }t        ||j                  |«       t        |«      }|j                  «       Šˆfd„}t        j                  |_        |j!                   |||«      «        ‰	| i |¤ŽS )Nr   c                 ó   •— ˆfd„}|S )Nc                 óV   •— | j                  di «      }‰r‰|d<   t        |«      | d<   | S )Nrß   rà   râ   )r™   r•   rä   rà   s      €rI   ræ   z“patch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor.<locals>.event_processor  s6   ø€ ð (-§y¡y°¸BÓ'?˜Ù"Ø6=˜L¨Ñ3ä+3°LÓ+A˜˜iÑ(à$˜rK   r\   )rç   r€   ræ   rà   s      €rI   rè   zzpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor   s   ø€ ô
%ð +Ð*rK   )rg   rw   rx   r3   r{   ÚtransactionÚupdate_active_threadr»   ÚprofileÚupdate_active_thread_idré   r<   rê   Úextract_cookies_from_requestrY   rì   rí   )
rl   rm   r€   Úcurrent_scoper¿   rß   rî   rè   rà   rï   s
           @€rI   Ú_sentry_sync_funczSpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_funcæ  s  ù€ ô )×3Ñ3Ó5×EÑEÜ(ó�ð Ð&Ù# TÐ4¨VÑ4Ð4ä *× <Ñ <Ó >�Ø ×,Ñ,Ð8Ø!×-Ñ-×BÑBÔDä)×=Ñ=Ó?�Ø×'Ñ'Ð3Ø ×(Ñ(×@Ñ@ÔBà˜q™'�ä0Ø  +×"?Ñ"?Àôô 6°gÓ>�	Ø#×@Ñ@ÓB�ô+ô  &:×%DÑ%D�Ô"Ø×0Ñ0Ù1°'¸;ÓGôñ   Ð0¨Ñ0Ð0rK   )r£   rÓ   Úwraps)rÕ   Úis_coroutinerð   rú   rï   Úold_request_responses       @€rI   Ú_sentry_request_responsez8patch_request_response.<locals>._sentry_request_response®  sR   ù€ àˆä)¨(Ó3ˆÙô+7ðZ &‰Dô �_‰_˜XÓ&ó.1ó 'ð.1ð` %ˆDá# DÓ)Ð)rK   )r4   ÚroutingÚrequest_response)rþ   rý   s    @rI   rR   rR   ª  s-   ø€ ä$×,Ñ,×=Ñ=Ðôk*ðZ *B„I×ÑÕ&rK   c                  ó’   ‡‡— 	 ddl mŠ ddlm}  | j
                  Šdt        ‰«      v}|rˆˆfd„}|| _        y y # t        $ r Y y w xY w)Nr   )ÚMarkup)ÚJinja2TemplatesÚ_sentry_jinja2templates_initc                 ó€   •— ˆfd„}|j                  dg «       ||d   vr|d   j                  |«        ‰| g|¢­i |¤ŽS )Nc                 ó\   •—  ‰t        j                  «       j                  «       «      }d|iS )NÚsentry_trace_meta)rg   r{   Útrace_propagation_meta)rß   Ú
trace_metar  s     €rI   Úadd_sentry_trace_metazTpatch_templates.<locals>._sentry_jinja2templates_init.<locals>.add_sentry_trace_meta5  s3   ø€ á#Ü×0Ñ0Ó2×IÑIÓKó�
ð (¨ðð rK   Úcontext_processors)rº   Úappend)rH   rl   rm   r
  r  Úold_jinja2templates_inits       €€rI   r  z5patch_templates.<locals>._sentry_jinja2templates_init3  sS   ø€ ôð ×ÑÐ2°BÔ7à$¨FÐ3GÑ,HÑHØÐ+Ñ,×3Ñ3Ð4IÔJá+¨DÐB°4ÒB¸6ÑBÐBrK   )Ú
markupsafer  ÚImportErrorÚstarlette.templatingr  rJ   r@   )r  rŽ   r  r  r  s      @@rI   rS   rS     s_   ù€ ðÝ%õ 5à.×7Ñ7Ðà4¼CØ ó=ð €Oñ õ	Cð$ $@ˆÕ ð) øô ò Ùðús   „: º	AÁAc                   óD   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zy)rê   z�
    Extracts useful information from the Starlette request
    (like form data or cookies) and adds it to the Sentry event.
    Nc                 ó   — || _         y r°   )rß   )rH   rß   s     rI   rJ   z"StarletteRequestExtractor.__init__P  s	   € àˆ�rK   c                 ó>   — d }t        «       r| j                  «       }|S r°   )r   rà   )rH   rà   s     rI   rø   z6StarletteRequestExtractor.extract_cookies_from_requestT  s   € àˆÜ"Ô$Ø—l‘l“nˆGàˆrK   c              ƒ   óÊ  K  — t        j                  «       }i }t        «       5  t        «       r| j	                  «       |d<   | j                  «       ƒ d {  –—† }|s|cd d d «       S |r.t        ||«      s"t        j                  «       |d<   |cd d d «       S | j                  «       ƒ d {  –—† }|r||d<   |cd d d «       S | j                  «       ƒ d {  –—† }|rUi }|j                  «       D ]0  \  }}t        |t        «      }	|	s|nt        j                  «       ||<   Œ2 ||d<   |cd d d «       S t        j                  «       |d<   |cd d d «       S 7 Œü7 Œ©7 Œ�# 1 sw Y   y xY w­w)Nrà   rá   )rg   rw   r   r   rà   Úcontent_lengthr   r   Úremoved_because_over_size_limitÚjsonÚformÚitemsrC   r&   Úremoved_because_raw_data)
rH   Úclienträ   r  r  r  Ú	form_datar­   ÚvalÚis_files
             rI   rë   z.StarletteRequestExtractor.extract_request_info\  sq  è ø€ ä×&Ñ&Ó(ˆàˆä(Ó*ñ (	 ä&Ô(Ø*.¯,©,«.�˜YÑ'ð $(×#6Ñ#6Ó#8×8ˆNÙ!Ø#÷(	 ñ (	 ñ Ô&@Ø˜ô'ô (6×'UÑ'UÓ'W�˜VÑ$Ø#÷(	 ñ (	 ð$ Ÿ™›×$ˆDÙØ'+�˜VÑ$Ø#÷+(	 ñ (	 ð0 Ÿ™›×$ˆDÙØ�	Ø $§
¡
£ò ‘H�C˜Ü(¨¬jÓ9�Gñ  'ñ ä+×DÑDÓFð ˜c’Nðð (1�˜VÑ$Ø#÷I(	 ñ (	 ôN $2×#JÑ#JÓ#LˆL˜Ñ Ø÷Q(	 ñ (	 ð 9øð %øð %ø÷1(	 ð (	 üsƒ   ‚!E#£1EÁEÁEÁ
E#Á&&EÂ
E#ÂEÂ)EÂ*EÂ6
E#Ã EÃEÃAEÄ%
E#Ä/EÅ
E#ÅEÅEÅEÅE ÅE#c              ƒ   ó€   K  — d| j                   j                  v r"t        | j                   j                  d   «      S y ­w)Nzcontent-length)rß   Úheadersr¡   ©rH   s    rI   r  z(StarletteRequestExtractor.content_lengthŒ  s6   è ø€ à˜tŸ|™|×3Ñ3Ñ3Ü�t—|‘|×+Ñ+Ð,<Ñ=Ó>Ð>àùs   ‚<>c                 ó.   — | j                   j                  S r°   )rß   rà   r!  s    rI   rà   z!StarletteRequestExtractor.cookies“  s   € à�|‰|×#Ñ#Ð#rK   c              ƒ   ó¨   K  — t         €y | j                  j                  «       ƒ d {  –—†  | j                  j                  «       ƒ d {  –—† S 7 Œ&7 Œ­wr°   )Ú	multipartrß   Úbodyr  r!  s    rI   r  zStarletteRequestExtractor.form—  sF   è ø€ äÐØð �l‰l×ÑÓ!×!Ð!à—\‘\×&Ñ&Ó(×(Ð(ð 	"øà(ús!   ‚%A§A¨!AÁ	AÁ
AÁAc                 ó^   — t        | j                  j                  j                  d«      «      S )Nzcontent-type)r   rß   r   rã   r!  s    rI   Úis_jsonz!StarletteRequestExtractor.is_json¤  s"   € ä$ T§\¡\×%9Ñ%9×%=Ñ%=¸nÓ%MÓNÐNrK   c              ƒ   ót   K  — | j                  «       sy | j                  j                  «       ƒ d {  –—† S 7 Œ­wr°   )r'  rß   r  r!  s    rI   r  zStarletteRequestExtractor.json¨  s+   è ø€ à�|‰|Œ~Øà—\‘\×&Ñ&Ó(×(Ð(Ð(ús   ‚/8±6²8)rV   rW   rX   Ú__doc__rß   rJ   rø   rë   r  rà   r  r'  r  r\   rK   rI   rê   rê   H  s8   „ ñð
 €Gòòò. ò`ò$ò)òOó)rK   rê   c                 ó¸   — | j                  d«      }|sy |j                  D ]7  }|j                  | «      }|d   t        j                  k(  sŒ+|j
                  c S  y )NÚrouterr   )rã   ÚroutesÚmatchesr*   ÚFULLÚpath)r   r+  ÚrouteÚmatchs       rI   Ú_transaction_name_from_routerr2  °  sV   € à�Y‰Y�xÓ €FÙØà—‘ò ˆØ—‘˜eÓ$ˆØ�‰8”u—z‘zÓ!Ø—:‘:Òðð
 rK   c                 ó"  — d }t         |   }|dk(  r-|j                  j                  d«      }|r*t        |«      xs d }n|dk(  rt	        |j                  «      }|€t
        }t        }| j                  ||¬«       t        j                  d||«       y )Nr0   r1   r_   z=[Starlette] Set transaction name and source on scope: %s / %s)
r   r   rã   r   r2  Ú_DEFAULT_TRANSACTION_NAMEr   r|   r   Údebug)r   r<   rß   rc   r`   r0   s         rI   ré   ré   ¾  s‹   € à€DÜÐ/Ñ0€Fà˜JÒ&Ø—=‘=×$Ñ$ ZÓ0ˆÙÜ,¨XÓ6Ò>¸$‰Dà	˜eÒ	#Ü,¨W¯]©]Ó;ˆà€|Ü(ˆÜ)ˆà	×Ñ˜t¨FÐÔ3Ü
‡L�LØGÈÈvõrK   c                 ó®   — d }d }|j                   dk(  rt        | j                  «      }t        }||fS |j                   dk(  rt	        |«      }t
        }||fS )Nr0   r1   )r<   r   ry   r   r2  r   )r~   Ú
asgi_scoper€   rc   r`   s        rI   rz   rz   Õ  sb   € à€DØ€Fà×$Ñ$¨
Ò2Ü(¨¯©Ó7ˆÜ-ˆð
 �ˆ<Ðð	 
×	&Ñ	&¨%Ò	/Ü,¨ZÓ8ˆÜ)ˆà�ˆ<ÐrK   )F)\rÖ   rÓ   rE   Úcollections.abcr   r«   r   rg   Úsentry_sdk.constsr   Úsentry_sdk.integrationsr   r   r   Ú$sentry_sdk.integrations._wsgi_commonr	   r
   r   r   Úsentry_sdk.integrations.asgir   Úsentry_sdk.scoper   Úsentry_sdk.tracingr   r   r   Úsentry_sdk.utilsr   r   r   r   r   r   r   Útypingr   r   r   r   r   r   r   r    r!   Úsentry_sdk._typesr"   r#   r4   r$   rN   Ústarlette.applicationsr%   Ústarlette.datastructuresr&   Ústarlette.middlewarer'   Ú#starlette.middleware.authenticationr(   Ústarlette.requestsr)   Ústarlette.routingr*   Ústarlette.typesr+   r,   r-   ÚStarletteScoper.   r  Ústarlette.middleware.exceptionsr/   Ústarlette.exceptionsÚpython_multipartr$  r4  r:   r3   r�   rš   r´   r²   rÂ   rP   rQ   r£   rR   rS   rê   r2  ré   rz   r\   rK   rI   ú<module>rM     s—  ðÛ Û Û Ý Ý ã Ý  ÷ñ ÷
ó õ >Ý 4÷ñ ÷
÷ ñ õ !áßX×XÓXç<ð5ÛÝ:Ý0Ý3Ý/õõ +Ý'ßOÓOð9åCð
	ðã,ð 8Ð à.Ð ô9˜;ô 9òxDñN Ð0Ó1ò/ó 2ð/òJEñZ Ð0Ó1ñ"ó 2ð"ò>Jò&6ò:2òBòqBòh'@÷Te)ñ e)òPòó.øð{ ò 5Ù
Ð3Ó
4Ð4ð5ûð ò 9ç8ð9ûð ò åðûð ò Ø‚IðúsH   Â:D% ÃD6 Ã	E Ä%D3Ä6EÅEÅ	EÅE ÅEÅE ÅE ÅE 