Ë
    S>{i_  ã                   ó^  — d dl mZ d dl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 d dlmZ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mZ d dlmZmZmZmZm Z m!Z! e	rd dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z+ 	 d dl,Z,d dl,m-Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z<m=Z=m*Z>m?Z? 	 d dlAmBZB 	 d dlDZDdZEdZF G d„ de«      ZGd„ ZHd,d„ZId„ ZJd „ ZKd!„ ZLd"„ ZMd#„ ZNd$„ ZOd%„ ZPd&„ ZQ G d'„ d(«      ZRd)„ ZSd*„ ZTd+„ ZUy# e@$ r	  ed«      ‚w xY w# e@$ r	 d dlCmBZB Y Œew xY w# e@$ r dZDY Œmw xY w)-é    )Úabsolute_importN)Údeepcopy)Ú	iteritems)ÚTYPE_CHECKING)ÚOP)ÚHubÚ_should_send_default_pii)ÚDidNotEnableÚIntegration)Ú_is_json_content_typeÚrequest_body_within_bounds)ÚSentryAsgiMiddleware)ÚSOURCE_FOR_STYLEÚTRANSACTION_SOURCE_COMPONENTÚTRANSACTION_SOURCE_ROUTE)ÚAnnotatedValueÚcapture_internal_exceptionsÚevent_from_exceptionÚloggerÚparse_versionÚtransaction_from_function)ÚAnyÚ	AwaitableÚCallableÚDictÚOptionalÚTuple)ÚScope)Ú__version__)Ú	Starlette)Ú
UploadFile)Ú
Middleware)ÚAuthenticationMiddleware)ÚRequest)ÚMatch)ÚASGIAppÚReceiver   ÚSendzStarlette is not installed)ÚExceptionMiddlewarezgeneric Starlette request)ÚendpointÚurlc                   ó,   — e Zd ZdZdZdd„Zed„ «       Zy)ÚStarletteIntegrationÚ	starletteÚ c                 óN   — |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)Úselfr4   s     ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentry_sdk/integrations/starlette.pyÚ__init__zStarletteIntegration.__init__K   s.   € àÔ$<Ñ<Ýâ$Ö&>ð@óð ð "3ˆÕó    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    r6   Ú
setup_oncezStarletteIntegration.setup_onceT   sW   € ô  Ô 1Ó2ˆàˆ?ÜØ2×9Ñ9Ô:KÓLóð ô 	ÔÜÔÜÔ à�gÒÜÕð r8   N)r+   )Ú__name__Ú
__module__Ú__qualname__Ú
identifierr4   r7   ÚstaticmethodrB   © r8   r6   r-   r-   F   s&   „ Ø€JàÐó3ð ñó ñr8   r-   c                 óX   ‡— | j                   Šˆfd„}‰j                  dv}|r|| _         | S )Nc              ›   ó¦  •‡‡‡K  — t         j                  }|j                  t        «      }|�ó| j                  j
                  Š|j                  «       5 }t        | ||«      \  }}	|�|j                  ||	¬«       d d d «       |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  ‰| |‰‰fi |¤Žƒ d {  –—† S # 1 sw Y   Œ¼xY w7 Œ-# 1 sw Y   y xY w7 Œ­w)	N©Úsource©ÚopÚdescriptionústarlette.middleware_namec            
   Ÿ   ó
  •K  — t         j                  }|j                  t        j                  t        ‰dt        ‰«      «      ¬«      5 }|j                  d‰«        ‰| i |¤Žƒ d {  –—† cd d d «       S 7 Œ# 1 sw Y   y xY w­w©NrE   rM   rP   )r   ÚcurrentÚ
start_spanr   ÚMIDDLEWARE_STARLETTE_RECEIVEÚgetattrÚstrÚset_tag)ÚargsÚkwargsÚhubÚspanÚmiddleware_nameÚreceives       €€r6   Ú_sentry_receivezO_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receive€   s}   øè ø€ äŸ+™+�CØŸ™Ü×:Ñ:Ü$+¨G°^ÄSÈÃ\Ó$Rð (ó ð >ð ØŸ™Ð%@À/ÔRÙ%,¨dÐ%=°fÑ%=×=÷>ñ >ð
  >ø÷>ð >üó0   ƒABÁ	A7Á'A5Á(A7Á+
BÁ5A7Á7B Á<BrC   r_   c            
   Ÿ   ó
  •K  — t         j                  }|j                  t        j                  t        ‰dt        ‰«      «      ¬«      5 }|j                  d‰«        ‰| i |¤Žƒ d {  –—† cd d d «       S 7 Œ# 1 sw Y   y xY w­wrR   )r   rS   rT   r   ÚMIDDLEWARE_STARLETTE_SENDrV   rW   rX   )rY   rZ   r[   r\   r]   Úsends       €€r6   Ú_sentry_sendzL_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_send�   s}   øè ø€ äŸ+™+�CØŸ™Ü×7Ñ7Ü$+¨D°.Ä#ÀdÃ)Ó$Lð (ó ð ;ð ØŸ™Ð%@À/ÔRÙ%)¨4Ð%:°6Ñ%:×:÷;ñ ;ð
  ;ø÷;ð ;ür`   rd   )r   rS   Úget_integrationr-   Ú	__class__rC   Úconfigure_scopeÚ _get_transaction_from_middlewareÚset_transaction_namerT   r   ÚMIDDLEWARE_STARLETTErX   rV   rW   )ÚappÚscoper^   rc   rZ   r[   ÚintegrationÚsentry_scopeÚnamerL   Úmiddleware_spanr_   Úreceive_nameÚreceive_patchedÚnew_receiverd   Ú	send_nameÚsend_patchedÚnew_sendr]   Úold_calls     ``               @€r6   Ú_create_span_callz6_enable_span_for_middleware.<locals>._create_span_callj   sz  ûè ø€ ä�k‰kˆØ×)Ñ)Ô*>Ó?ˆØÐ"Ø!Ÿm™m×4Ñ4ˆOð ×$Ñ$Ó&ð ¨,Ü?ÀÀUÈKÓX‘��fØÐ#Ø ×5Ñ5ØØ%ð 6ô ÷ð —‘Ü×*Ñ*¸ð  ó ð #Sà Ø×'Ñ'Ð(CÀ_ÔUõ>ô  ' w°
¼CÀ»LÓI�Ø".Ð2CÑ"C�Ù5D™oÈ'�õ;ô $ D¨*´c¸$³iÓ@�	Ø(¨NÑ:�Ù/;™<À�á% c¨5°+¸xÑRÈ6ÑR×R÷G#Sñ #SñL " # u¨g°tÑF¸vÑF×FÐF÷]ð úðV Sø÷G#Sð #SúðL GúsU   †AEÁ&D5Á:)EÂ#A0EÄEÄEÄEÄ0EÄ1EÄ5D>Ä:EÅEÅEÅE)rx   Ú%_sentry_authenticationmiddleware_callÚ _sentry_exceptionmiddleware_call)Ú__call__rC   )Úmiddleware_classrx   Únot_yet_patchedrw   s      @r6   Ú_enable_span_for_middlewarer~   f   s@   ø€ à×(Ñ(€Hô6Gðp ×'Ñ'ð 0ð €Oñ Ø$5ÐÔ!àÐr8   c                 óþ   — t         j                  }|j                  t        «      €y t	        | |j
                  r|j
                  j                  nd t        j                  |dœ¬«      \  }}|j                  ||¬«       y )N)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)	r   rS   re   r-   r   ÚclientÚoptionsrF   Úcapture_event)Ú	exceptionr�   r[   Úeventr„   s        r6   Ú_capture_exceptionrŠ   ®   si   € ä
�+‰+€CØ
×ÑÔ/Ó0Ð8Øä&ØØ-0¯ZªZ�s—z‘z×)Ò)¸TÜ/×:Ñ:ÀwÑOô�K€Eˆ4ð ×Ñ�e $ÐÕ'r8   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              Ÿ   óT  •K  — |d   }t        |d«      xr+ t        |j                  t        «      xr |j                  dk\  }|rt	        |d¬«       d }t        |«      j                  D ]  }|‰v sŒ‰|   } n |€y t        |«      r || g|¢­i |¤Žƒ d {  –—† S  || g|¢­i |¤ŽS 7 Œ­w)Nr   Ústatus_codeiô  T)r�   )ÚhasattrÚ
isinstancer�   ÚintrŠ   r€   Ú__mro__Ú_is_async_callable)r5   rY   rZ   ÚexpÚis_http_server_errorÚold_handlerÚclsÚold_handlerss          €r6   Ú!_sentry_patched_exception_handlerzfpatch_exception_middleware.<locals>._sentry_middleware_init.<locals>._sentry_patched_exception_handlerÐ   sÏ   øè ø€ à˜1‘g�ô ˜C Ó/ò /Ü" 3§?¡?´CÓ8ò/àŸ™¨3Ñ.ð %ñ
 (Ü& s°DÕ9ð #�Ü ›9×,Ñ,ò �CØ˜lÒ*Ø&2°3Ñ&7˜Ùðð
 Ð&Øä% kÔ2Ù!,¨TÐ!C°DÒ!C¸FÑ!C×CÐCá& tÐ=¨dÒ=°fÑ=Ð=ð Dús   ƒA,B(Á0%B(ÂB&ÂB()Ú_exception_handlersÚcopyÚkeys)r5   rY   rZ   rš   Úkeyr™   Úold_middleware_inits        @€r6   rŒ   z;patch_exception_middleware.<locals>._sentry_middleware_initÉ   sb   ù€ á Ð6 tÒ6¨vÒ6ð  ×3Ñ3×8Ñ8Ó:ˆLô>ð6 ×/Ñ/×4Ñ4Ó6ò R�Ø0Q�×(Ñ(¨Ò-ñRr8   c              “   óN   •K  — t        |«        ‰| |||«      ƒ d {  –—†  y 7 Œ­w©N©Ú_add_user_to_sentry_scope©r5   rl   r^   rc   rw   s       €r6   rz   zDpatch_exception_middleware.<locals>._sentry_exceptionmiddleware_callò   s%   øè ø€ ô & eÔ,Ù˜4 ¨°Ó6×6Ò6ús   ƒ%�#ž%N)r7   rW   r{   )r|   r}   rŒ   rz   rw   rŸ   s       @@r6   Úpatch_exception_middlewarer¥   ½   sX   ù€ ð +×3Ñ3Ðà/´sÐ;NÓ7OÐO€Oáô#	RðJ %<ÐÔ!à#×,Ñ,ˆô	7ð  %EÐÕ!ðw r8   c                 óØ  — d| vryt        «       syt        j                  }|j                  t        «      €y|j                  «       5 }i }| d   }t        |dd«      }|r|j                  d|j                  «       t        |dd«      }|r|j                  d|j                  «       t        |dd«      }|r|j                  d|j                  «       ||_        ddd«       y# 1 sw Y   yxY w)zZ
    Extracts user information from the ASGI scope and
    adds it to Sentry's scope.
    ÚuserNÚusernameÚidÚemail)r	   r   rS   re   r-   rg   rV   Ú
setdefaultr¨   r©   rª   r§   )rl   r[   rn   Ú	user_infoÚstarlette_userr¨   Úuser_idrª   s           r6   r£   r£     sä   € ð �UÑØä#Ô%Øä
�+‰+€CØ
×ÑÔ/Ó0Ð8Øà	×	Ñ	Ó	ð & ,Øˆ	Ø˜v™ˆä˜>¨:°tÓ<ˆÙØ× Ñ  ¨^×-DÑ-DÔEä˜.¨$°Ó5ˆÙØ× Ñ   ~×'8Ñ'8Ô9ä˜¨°Ó6ˆÙØ× Ñ  ¨.×*>Ñ*>Ô?à%ˆÔ÷!&÷ &ñ &ús   ÁBC Ã C)c                 óV   ‡— | j                   Šdt        ‰«      v}|rˆfd„}|| _         yy)z/
    Add user information to Sentry scope.
    ry   c              “   óN   •K  —  ‰| |||«      ƒ d {  –—†  t        |«       y 7 Œ­wr¡   r¢   r¤   s       €r6   ry   zNpatch_authentication_middleware.<locals>._sentry_authenticationmiddleware_call3  s(   øè ø€ á˜4 ¨°Ó6×6Ð6Ü% eÕ,ð 7ús   ƒ%’#“%N)r{   rW   )r|   r}   ry   rw   s      @r6   Úpatch_authentication_middlewarer±   (  s7   ø€ ð
  ×(Ñ(€Hà=ÄSÈÃ]ÐR€Oáô	-ð
 %JÐÕ!ð r8   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¥   )r5   r˜   r†   Úspan_enabled_clsrŸ   s       €r6   rŒ   z2patch_middlewares.<locals>._sentry_middleware_initG  s`   ø€ àÔ*Ò*Ù*¨4°Ñ@¸Ñ@Ð@ä:¸3Ó?ÐÙ Ð&6ÑB¸'ÒBàÔ.Ò.Ü/°Ô4àÔ)Ò)Ü*¨3Õ/ð *r8   N)r"   r7   rW   )r}   rŒ   rŸ   s     @r6   r=   r=   ;  s8   ø€ ô %×-Ñ-Ðà/´sÐ;NÓ7OÐO€Oáô	0ð 6Œ
Õð! r8   c                  óF   ‡— t         j                  Šˆfd„} | t         _        y)zG
    Instrument Starlette ASGI app using the SentryAsgiMiddleware.
    c              “   ó   •‡ K  — t         j                  j                  t        «      }|€ ‰‰ |||«      ƒ d {  –—† S t	        ˆˆ fd„t        j
                  |j                  ¬«      }|j                  |_         ||||«      ƒ d {  –—† S 7 ŒQ7 Œ­w)Nc                  ó   •—  ‰‰g| ¢­i |¤ŽS r¡   rH   )ÚaÚkwÚold_appr5   s     €€r6   ú<lambda>zBpatch_asgi_app.<locals>._sentry_patched_asgi_app.<locals>.<lambda>f  s   ø€ ™W TÐ4¨AÒ4°Ñ4€ r8   )Úmechanism_typer4   )	r   rS   re   r-   r   rF   r4   Ú
_run_asgi3r{   )r5   rl   r^   rc   rm   Ú
middlewarerº   s   `     €r6   Ú_sentry_patched_asgi_appz0patch_asgi_app.<locals>._sentry_patched_asgi_app_  s‚   ùè ø€ ä—k‘k×1Ñ1Ô2FÓGˆØÐÙ   u¨g°tÓ<×<Ð<ä)Ü4Ü/×:Ñ:Ø)×;Ñ;ô
ˆ
ð )×3Ñ3ˆ
ÔÙ  w°Ó5×5Ð5ð =øð 6ús"   „4B¸B
¹ABÂBÂBÂBN)r    r{   )r¿   rº   s    @r6   r>   r>   X  s   ø€ ô
 × Ñ €Gô6ð 2„IÕr8   c                 ó
  — t        | t        j                  «      r'| j                  } t        | t        j                  «      rŒ't	        j
                  | «      xs, t        | «      xr t	        j
                  | j                  «      S r¡   )r‘   Ú	functoolsÚpartialÚfuncÚasyncioÚiscoroutinefunctionÚcallabler{   )Úobjs    r6   r”   r”   s  sb   € ä
�Sœ)×+Ñ+Ô
,Ø�h‰hˆô �Sœ)×+Ñ+Õ
,ô ×&Ñ& sÓ+ò Ü�‹ÒCœ'×5Ñ5°c·l±lÓCðr8   c                  ón   ‡— t         j                  j                  Šˆfd„} | t         j                  _        y )Nc                 óR   •‡— | Št        ‰«      }|rˆfd„}|} nˆfd„}|}  ‰| «      S )Nc               Ÿ   óÔ  •‡K  — t         j                  }|j                  t        «      }|€ ‰	| i |¤Žƒ d {  –—† S |j	                  «       5 }| d   }t        ||j                  |«       t        |«      }|j                  «       ƒ d {  –—† Šˆfd„}d d d «       t        j                  _
        |j                   |«      «        ‰	| i |¤Žƒ d {  –—† S 7 Œž7 ŒP# 1 sw Y   ŒJxY w7 Œ­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      €r6   Úevent_processorz”patch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor.<locals>.event_processor›  sW   ø€ ð ,1¯9©9°YÀÓ+C˜LÙ#Ø#,°Ñ#4Ø>BÀ9¹o L°Ñ$;Ø#)¨T¡>Ø;?À¹< L°Ñ$8Ü/7¸Ó/E˜E )Ñ,à#(˜Lr8   rH   )Úreqrm   rÔ   rÓ   s      €r6   Ú_make_request_event_processorz{patch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor™  s   ø€ ô)ð  /Ð.r8   )r   rS   re   r-   rg   Ú _set_transaction_name_and_sourcer4   ÚStarletteRequestExtractorÚextract_request_inforF   Ú_nameÚadd_event_processor)
rY   rZ   r[   rm   rn   rÍ   Ú	extractorrÖ   rÓ   Úold_funcs
           @€r6   Ú_sentry_async_funczTpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_funcˆ  sî   ùè ø€ ä—k‘k�Ø!×1Ñ1Ô2FÓG�ØÐ&Ù!)¨4Ð!:°6Ñ!:×:Ð:à×(Ñ(Ó*ð /¨lØ" 1™g�Gä4Ø$ k×&CÑ&CÀWôô !:¸'Ó B�IØ!*×!?Ñ!?Ó!A×A�Dô/÷/ô8 &:×%DÑ%D�Ô"Ø×0Ñ0Ù1°'¸;ÓGôñ & tÐ6¨vÑ6×6Ð6ðG ;øð Bø÷/ð /úðB 7úsF   „3C(·C¸C(Á;CÂCÂ	CÂA C(ÃC&ÃC(ÃCÃC#ÃC(c                  óÜ  •‡— t         j                  }|j                  t        «      }|€ ‰	| i |¤ŽS |j	                  «       5 }|j
                  �|j
                  j                  «        | d   }t        ||j                  |«       t        |«      }|j                  «       Šˆfd„}d d d «       t        j                  _        |j                   |«      «        ‰	| i |¤ŽS # 1 sw Y   Œ>xY w)Nr   c                 ó   •— ˆfd„}|S )Nc                 óV   •— | j                  di «      }‰r‰|d<   t        |«      | d<   | S )NrÍ   rÎ   rÐ   )r‰   r„   rÒ   rÎ   s      €r6   rÔ   z“patch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor.<locals>.event_processorË  s6   ø€ ð ,1¯9©9°YÀÓ+C˜LÙ&Ø:A ¨YÑ 7ä/7¸Ó/E˜E )Ñ,à#(˜Lr8   rH   )rÕ   rm   rÔ   rÎ   s      €r6   rÖ   zzpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processorÉ  s   ø€ ô
)ð  /Ð.r8   )r   rS   re   r-   rg   ÚprofileÚupdate_active_thread_idr×   r4   rØ   Úextract_cookies_from_requestrF   rÚ   rÛ   )
rY   rZ   r[   rm   rn   rÍ   rÜ   rÖ   rÎ   rÝ   s
           @€r6   Ú_sentry_sync_funczSpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_funcµ  sì   ù€ ä—k‘k�Ø!×1Ñ1Ô2FÓG�ØÐ&Ù# TÐ4¨VÑ4Ð4à×(Ñ(Ó*ð /¨lØ#×+Ñ+Ð7Ø$×,Ñ,×DÑDÔFà" 1™g�Gä4Ø$ k×&CÑ&CÀWôô !:¸'Ó B�IØ'×DÑDÓF�Gô/÷/ô: &:×%DÑ%D�Ô"Ø×0Ñ0Ù1°'¸;ÓGôñ   Ð0¨Ñ0Ð0÷E/ð /ús   ÁA#C"Ã"C+)r”   )rÃ   Úis_coroutinerÞ   rå   rÝ   Úold_request_responses       @€r6   Ú_sentry_request_responsez8patch_request_response.<locals>._sentry_request_response�  s:   ù€ àˆä)¨(Ó3ˆÙô(7ðT &‰Dô)1ðV %ˆDá# DÓ)Ð)r8   )r.   ÚroutingÚrequest_response)rè   rç   s    @r6   r?   r?   }  s-   ø€ ä$×,Ñ,×=Ñ=Ðôa*ðF *B„I×ÑÕ&r8   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                 óX   •— t         j                  } ‰|j                  «       «      }d|iS )NÚsentry_trace_meta)r   rS   Útrace_propagation_meta)rÍ   r[   Ú
trace_metarì   s      €r6   Úadd_sentry_trace_metazTpatch_templates.<locals>._sentry_jinja2templates_init.<locals>.add_sentry_trace_metaþ  s.   ø€ ä—k‘k�Ù# C×$>Ñ$>Ó$@ÓA�
à'¨ðð r8   Úcontext_processors)r«   Úappend)r5   rY   rZ   rô   rì   Úold_jinja2templates_inits       €€r6   rî   z5patch_templates.<locals>._sentry_jinja2templates_initü  sS   ø€ ôð ×ÑÐ2°BÔ7à$¨FÐ3GÑ,HÑHØÐ+Ñ,×3Ñ3Ð4IÔJá+¨DÐB°4ÒB¸6ÑBÐBr8   )Ú
markupsaferì   ÚImportErrorÚstarlette.templatingrí   r7   rW   )rí   r}   rî   rì   r÷   s      @@r6   r@   r@   ç  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Í   )r5   rÍ   s     r6   r7   z"StarletteRequestExtractor.__init__  s	   € àˆ�r8   c                 óx   — t         j                  j                  }|€y d }t        «       r| j	                  «       }|S r¡   )r   rS   r…   r	   rÎ   )r5   r…   rÎ   s      r6   rä   z6StarletteRequestExtractor.extract_cookies_from_request  s4   € ä—‘×#Ñ#ˆØˆ>ØàˆÜ#Ô%Ø—l‘l“nˆGàˆr8   c              ƒ   óÒ  K  — t         j                  j                  }|€y 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 {  –—† }|rPi }t        |«      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Ï   )r   rS   r…   r   r	   rÎ   Úcontent_lengthr   r   Úremoved_because_over_size_limitÚjsonÚformr   r‘   r!   Úremoved_because_raw_data)
r5   r…   rÒ   rÿ   r  r  Ú	form_datarž   ÚvalÚis_files
             r6   rÙ   z.StarletteRequestExtractor.extract_request_info(  sx  è ø€ ä—‘×#Ñ#ˆØˆ>Øàˆä(Ó*ñ (	 ä'Ô)Ø*.¯,©,«.�˜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Â2EÂ3EÂ?
E'Ã	EÃEÃAEÄ)
E'Ä3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’   ©r5   s    r6   rÿ   z(StarletteRequestExtractor.content_lengthZ  s6   è ø€ à˜tŸ|™|×3Ñ3Ñ3Ü�t—|‘|×+Ñ+Ð,<Ñ=Ó>Ð>àùs   ‚<>c                 ó.   — | j                   j                  S r¡   )rÍ   rÎ   r	  s    r6   rÎ   z!StarletteRequestExtractor.cookiesa  s   € à�|‰|×#Ñ#Ð#r8   c              ƒ   ó¨   K  — t         €y | j                  j                  «       ƒ d {  –—†  | j                  j                  «       ƒ d {  –—† S 7 Œ&7 Œ­wr¡   )Ú	multipartrÍ   Úbodyr  r	  s    r6   r  zStarletteRequestExtractor.forme  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    r6   Úis_jsonz!StarletteRequestExtractor.is_jsonr  s"   € ä$ T§\¡\×%9Ñ%9×%=Ñ%=¸nÓ%MÓNÐNr8   c              ƒ   ót   K  — | j                  «       sy | j                  j                  «       ƒ d {  –—† S 7 Œ­wr¡   )r  rÍ   r  r	  s    r6   r  zStarletteRequestExtractor.jsonv  s+   è ø€ à�|‰|Œ~Øà—\‘\×&Ñ&Ó(×(Ð(Ð(ús   ‚/8±6²8)rC   rD   rE   Ú__doc__rÍ   r7   rä   rÙ   rÿ   rÎ   r  r  r  rH   r8   r6   rØ   rØ     s8   „ ñð
 €Gòò
ò0 òdò$ò)òOó)r8   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)rl   r  ÚrouteÚmatchs       r6   Ú_transaction_name_from_routerr  ~  sV   € à�Y‰Y�xÓ €FÙØà—‘ò ˆØ—‘˜eÓ$ˆØ�‰8”u—z‘zÓ!Ø—:‘:Òðð
 r8   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 )Nr*   r+   rK   z=[Starlette] Set transaction name and source on scope: %s / %s)
r   rl   rÑ   r   r  Ú_DEFAULT_TRANSACTION_NAMEr   ri   r   Údebug)rl   r4   rÍ   ro   rL   r*   s         r6   r×   r×   Œ  s‹   € à€DÜÐ/Ñ0€Fà˜JÒ&Ø—=‘=×$Ñ$ ZÓ0ˆÙÜ,¨XÓ6Ò>¸$‰Dà	˜eÒ	#Ü,¨W¯]©]Ó;ˆà€|Ü(ˆÜ)ˆà	×Ñ˜t¨FÐÔ3Ü
‡L�LØGÈÈvõr8   c                 ó®   — d }d }|j                   dk(  rt        | j                  «      }t        }||fS |j                   dk(  rt	        |«      }t
        }||fS )Nr*   r+   )r4   r   rf   r   r  r   )rk   Ú
asgi_scoperm   ro   rL   s        r6   rh   rh   £  sb   € à€DØ€Fà×$Ñ$¨
Ò2Ü(¨¯©Ó7ˆÜ-ˆð
 �ˆ<Ðð	 
×	&Ñ	&¨%Ò	/Ü,¨ZÓ8ˆÜ)ˆà�ˆ<Ðr8   )F)VÚ
__future__r   rÄ   rÁ   rœ   r   Úsentry_sdk._compatr   Úsentry_sdk._typesr   Úsentry_sdk.constsr   Úsentry_sdk.hubr   r	   Úsentry_sdk.integrationsr
   r   Ú$sentry_sdk.integrations._wsgi_commonr   r   Úsentry_sdk.integrations.asgir   Úsentry_sdk.tracingr   r   r   Úsentry_sdk.utilsr   r   r   r   r   r   Útypingr   r   r   r   r   r   Úsentry_sdk.scoper   ÚSentryScoper.   r   r;   Ústarlette.applicationsr    Ústarlette.datastructuresr!   Ústarlette.middlewarer"   Ú#starlette.middleware.authenticationr#   Ústarlette.requestsr$   Ústarlette.routingr%   Ústarlette.typesr&   r'   ÚStarletteScoper(   rù   Ústarlette.middleware.exceptionsr)   Ústarlette.exceptionsr  r  r2   r-   r~   rŠ   r¥   r£   r±   r=   r>   r”   r?   r@   rØ   r  r×   rh   rH   r8   r6   ú<module>r7     s>  ðÝ &ã Û Ý å (Ý +Ý  ß 8ß =÷õ >÷ñ ÷
÷ ñ ßF×Få5ð5ÛÝ:Ý0Ý3Ý/õõ +Ý'ßOÓOð9åCð
ãð
 8Ð à.Ð ô˜;ô ò@EóP(òEEòP &òFJò&6ò:2ò6ògBòT&@÷Rk)ñ k)ò\òó.øðg ò 5Ù
Ð3Ó
4Ð4ð5ûð ò 9ç8ð9ûð ò Ø‚Iðús0   Á8:D  Â3D Â:D" Ä DÄDÄDÄ"D,Ä+D,