§
    xÅjKƒ  ã                   ó0  — d dl Z 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mZ d dl	m
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mZ d d
l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$ 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/m0Z0m1Z1m2Z2 e
rd dl	m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dlm;Z;m<Z< 	 d dl=Z=d dl=m>Z? d dl@mAZA d dlBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZMmNZNmOZO d dlLmPZQ n# eR$ r  ed¦  «        ‚w xY w	 d dlSmTZT n# eR$ r	 d dlUmTZT Y nw xY w	 	 d dlVZWn# eR$ r d dlWZWY nw xY wn# eR$ r dZWY nw xY wejX        dk    rd d lYmZZZ nd d l[mZZZ d!Z\d"Z] G d#„ d$e¦  «        Z^	 	 	 	 dXd(„Z_d)d&d'e`fd*„Za e-e^¦  «        dYd,ebd-d&d'dfd.„¦   «         ZcdZd/„Zd e-e^¦  «        d[d2„¦   «         ZedZd3„Zfd\d4„Zgd]d7„Zhd8d&d'eifd9„Zj	 	 	 	 	 	 d^d?„Zk	 	 	 	 	 	 	 	 d_dD„Zld\dE„Zmd\dF„Zn G dG„ dH¦  «        Zo	 	 	 	 d`dK„Zpd0dLdMe`dNdOdPd>dQdRd'dfdS„Zq	 	 	 	 	 	 	 	 	 	 dadW„ZrdS )bé    N)ÚSet)Údeepcopy)ÚJSONDecodeError)ÚTYPE_CHECKING)ÚOVER_SIZE_LIMIT_SUBSTITUTE)ÚOPÚSPANDATA)Ú%_apply_key_value_collection_filtering)Ú$_DEFAULT_FAILED_REQUEST_STATUS_CODESÚDidNotEnableÚIntegration)Ú_RootPathInPath)ÚDEFAULT_HTTP_METHODS_TO_CAPTUREÚHttpCodeRangeContainerÚ_is_json_content_typeÚrequest_body_within_bounds)ÚSentryAsgiMiddleware)Úshould_send_default_pii)ÚStreamedSpanÚget_current_span)ÚSOURCE_FOR_STYLEÚTransactionSource)Úhas_span_streaming_enabled)ÚAnnotatedValueÚcapture_internal_exceptionsÚensure_integration_enabledÚevent_from_exceptionÚhas_data_collection_enabledÚnullcontextÚparse_versionÚtransaction_from_function)ÚAnyÚ	AwaitableÚCallableÚ	ContainerÚDictÚOptionalÚTupleÚUnion)ÚEventÚHttpStatusCodeRange)Ú__version__)Ú	Starlette)Ú
UploadFile)Ú
Middleware)ÚAuthenticationMiddleware)ÚRequest)ÚMatch)ÚASGIAppÚReceiveÚSend)ÚScopezStarlette is not installed)ÚExceptionMiddleware)é   é   )Úiscoroutinefunctionzgeneric Starlette request)ÚendpointÚurlc            	       óZ   — e Zd ZdZde› �ZdZdedefdeddd	e	d
dfd„Z
edd„¦   «         ZdS )ÚStarletteIntegrationÚ	starlettez
auto.http.Ú r<   FÚtransaction_styleÚfailed_request_status_codesz0Union[Set[int], list[HttpStatusCodeRange], None]Úmiddleware_spansÚhttp_methods_to_captureztuple[str, ...]c                 ó~  — |t           vrt          d|›dt           ›d�¦  «        ‚|| _        || _        t	          t          t          j        |¦  «        ¦  «        | _        t          |t          ¦  «        r	|| _        d S t          j        dt          d¬¦  «         |€t          | _        d S t!          |¦  «        | _        d S )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Ú
ValueErrorrA   rC   ÚtupleÚmapÚstrÚupperrD   Ú
isinstancer   rB   ÚwarningsÚwarnÚDeprecationWarningr   r   )ÚselfrA   rB   rC   rD   s        úRC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/starlette.pyÚ__init__zStarletteIntegration.__init__q   sæ   € ð Õ$<Ð<Ð<Ý�*à$Ð$Ð$Õ&>Ð&>Ð&>ð@ñô ð ð "3ˆÔØ 0ˆÔÝ',­Sµ´Ð<SÑ-TÔ-TÑ'UÔ'UˆÔ$åÐ1µ3Ñ7Ô7ð 	à+ð Ô,Ð,Ð,õ ŒMð4å"Øð	ñ ô ð ð +Ð2Ý3W�Ô0Ð0Ð0å3IØ/ñ4ô 4�Ô0Ð0Ð0ó    ÚreturnNc                  ó@  — t          t          ¦  «        } | €'t          d                     t          ¦  «        ¦  «        ‚t	          ¦   «          | dk    rt
          j        nt
          j        }t          |¬¦  «         t          ¦   «          | dk    rt          ¦   «          d S d S )Nz Unparsable Starlette version: {})r   é!   )Úroot_path_in_path)r   é   )r    ÚSTARLETTE_VERSIONr   ÚformatÚpatch_middlewaresr   ÚEITHERÚEXCLUDEDÚpatch_asgi_appÚpatch_request_responseÚpatch_templates)ÚversionrZ   s     rT   Ú
setup_oncezStarletteIntegration.setup_once”   s«   € åÕ 1Ñ2Ô2ˆàˆ?ÝØ2×9Ò9Õ:KÑLÔLñô ð õ 	ÑÔÐð '.°Ò&8Ð&8�OÔ"Ð"½oÔ>Vð 	õ 	Ð):Ð;Ñ;Ô;Ð;ÝÑ Ô Ð à�gÒÐÝÑÔÐÐÐð ÐrV   ©rW   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginrA   r   r   rM   ÚboolrU   Ústaticmethodre   © rV   rT   r>   r>   k   s›   € € € € € Ø€JØ&˜*Ð&Ð&€FàÐð "'ØZ~Ø!&Ø5Tð!ð !àð!ð &Xð!ð ð	!ð
 "3ð!ð !ð !ð !ðF ðð ð ñ „\ðð ð rV   r>   Úmiddleware_classr"   rW   c                 ó^   ‡— | j         Š	 	 	 	 	 	 	 	 	 	 	 	 dˆfd„}‰j        dv}|r|| _         | S )NÚappr"   ÚscopeúDict[str, Any]Úreceiveú'Callable[[], Awaitable[Dict[str, Any]]]Úsendú+Callable[[Dict[str, Any]], Awaitable[None]]ÚkwargsrW   c              ›   óò  •‡‡‡‡‡K  — t          j        ¦   «         }|                     t          ¦  «        }|€ ‰| |‰‰fi |¤Žƒ d {V —†S t	          |¦  «        \  }}t          j        ¦   «         j        }	|	�2|�0|t          j        k    r |	 	                    t          j        |¦  «         t          | |||¬¦  «        \  }
}|
�(t          j        ¦   «                              |
|¬¦  «         |j        s ‰| |‰‰fi |¤Žƒ d {V —†S | j        j        Št#          |j        ¦  «        Šdt&          dt&          ddfˆˆfd„Š ‰t(          j        ‰¬¦  «        5 }‰s|                     d	‰¦  «         dˆˆˆˆfd„}t/          ‰dt'          ‰¦  «        ¦  «        }|dk    }|s|n‰}dˆˆˆˆfd„}t/          ‰dt'          ‰¦  «        ¦  «        }|dk    }|s|n‰} ‰| |||fi |¤Žƒ d {V —†cd d d ¦  «         S # 1 swxY w Y   d S )N)Ú
route_pathÚname_source©ÚsourceÚopÚnamerW   r"   c                 ó   •— ‰r[t           j                             ¦   «         €t          ¦   «         S t           j                             || t
          j        ‰dœ¬¦  «        S t          j        | |t
          j        ¬¦  «        S )N)z	sentry.opzsentry.originzmiddleware.name)r   Ú
attributes)r~   r   rk   )Ú
sentry_sdkÚtracesr   r   Ú
start_spanr>   rk   )r~   r   Úis_span_streaming_enabledÚmiddleware_names     €€rT   Ú_start_middleware_spanzV_enable_span_for_middleware.<locals>._create_span_call.<locals>._start_middleware_spanÖ   s‹   ø€ Ø(ð 
ÝÔ$×5Ò5Ñ7Ô7Ð?Ý&™=œ=Ð(Ý!Ô(×3Ò3Øà%'Ý)=Ô)DØ+:ð ð  ð 4ñ ô ð õ Ô(ØØÝ+Ô2ðñ ô ð rV   ©r~   r   ústarlette.middleware_nameÚargsrx   c            
   Ÿ   óî   •K  —  ‰t           j        t          ‰dt          ‰¦  «        ¦  «        ¬¦  «        5 }‰s|                     d‰¦  «          ‰| i |¤Žƒ d {V —†cd d d ¦  «         S # 1 swxY w Y   d S ©Nri   rˆ   r‰   )r   ÚMIDDLEWARE_STARLETTE_RECEIVEÚgetattrrM   Úset_tag)rŠ   rx   Úspanr‡   r…   r†   rt   s      €€€€rT   Ú_sentry_receivezO_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receiveï   sà   øè è € Ø+Ð+ÝÔ6Ý  ¨.½#¸g¹,¼,ÑGÔGðñ ô ð :ð Ø4ð SØŸšÐ%@À/ÑRÔRÐRØ!( ¨$Ð!9°&Ð!9Ð!9Ð9Ð9Ð9Ð9Ð9Ð9ð:ð :ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð :ð :ó   ·&A*Á*A.Á1A.rg   r‘   c            
   Ÿ   óî   •K  —  ‰t           j        t          ‰dt          ‰¦  «        ¦  «        ¬¦  «        5 }‰s|                     d‰¦  «          ‰| i |¤Žƒ d {V —†cd d d ¦  «         S # 1 swxY w Y   d S rŒ   )r   ÚMIDDLEWARE_STARLETTE_SENDrŽ   rM   r�   )rŠ   rx   r�   r‡   r…   r†   rv   s      €€€€rT   Ú_sentry_sendzL_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_sendý   sà   øè è € Ø+Ð+ÝÔ3Ý   ~µs¸4±y´yÑAÔAðñ ô ð 7ð Ø4ð SØŸšÐ%@À/ÑRÔRÐRØ!%  tÐ!6¨vÐ!6Ð!6Ð6Ð6Ð6Ð6Ð6Ð6ð7ð 7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð 7ð 7r’   r•   ©rŠ   r"   rx   r"   rW   r"   )r‚   Ú
get_clientÚget_integrationr>   Ú"_http_route_and_source_from_routerÚget_current_scopeÚ_server_segment_spanr   ÚROUTEÚset_attributer	   Ú
HTTP_ROUTEÚ _get_transaction_from_middlewareÚset_transaction_namerC   Ú	__class__rg   r   ÚoptionsrM   r   ÚMIDDLEWARE_STARLETTEr�   rŽ   )rq   rr   rt   rv   rx   ÚclientÚintegrationrz   r{   Úserver_spanr   r}   Úmiddleware_spanr‘   Úreceive_nameÚreceive_patchedÚnew_receiver•   Ú	send_nameÚsend_patchedÚnew_sendr‡   r…   r†   Úold_calls     ``                 @@@€rT   Ú_create_span_callz6_enable_span_for_middleware.<locals>._create_span_call¯   sG  øøøøøøè è € õ Ô&Ñ(Ô(ˆØ×,Ò,Õ-AÑBÔBˆØÐØ!˜ # u¨g°tÐFÐF¸vÐFÐFÐFÐFÐFÐFÐFÐFÐFå"DÀUÑ"KÔ"KÑˆ
�Kå Ô2Ñ4Ô4ÔIˆàÐ#ØÐ&ØÕ0Ô6Ò6Ð6à×%Ò%¥hÔ&9¸:ÑFÔFÐFõ 8Ø�¨Àð
ñ 
ô 
‰ˆˆfð ÐÝÔ(Ñ*Ô*×?Ò?ØØð @ñ ô ð ð
 Ô+ð 	GØ!˜ # u¨g°tÐFÐF¸vÐFÐFÐFÐFÐFÐFÐFÐFÐFàœ-Ô0ˆÝ$>¸v¼~Ñ$NÔ$NÐ!ð	¥sð 	µ#ð 	¸%ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð$ $Ð#ÝÔ&¨_ð
ñ 
ô 
ð "	OàØ,ð VØ×'Ò'Ð(CÀ_ÑUÔUÐUð:ð :ð :ð :ð :ð :ð :ð :ð :õ # 7¨J½¸G¹¼ÑEÔEˆLØ*Ð.?Ò?ˆOØ1@ÐM˜/˜/ÀgˆKð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7õ    jµ#°d±)´)Ñ<Ô<ˆIØ$¨Ò6ˆLØ+7ÐA�|�|¸TˆHà!˜ # u¨k¸8ÐNÐNÀvÐNÐNÐNÐNÐNÐNÐNÐNðE"	Oð "	Oð "	Oð "	Oñ "	Oô "	Oð "	Oð "	Oð "	Oð "	Oð "	Oð "	Oøøøð "	Oð "	Oð "	Oð "	Oð "	Oð "	Os   ÅBG,Ç,G0Ç3G0)r¯   Ú%_sentry_authenticationmiddleware_callÚ _sentry_exceptionmiddleware_call)rq   r"   rr   rs   rt   ru   rv   rw   rx   r"   rW   N)Ú__call__rg   )ro   r¯   Únot_yet_patchedr®   s      @rT   Ú_enable_span_for_middlewarer´   ª   sª   ø€ ð 1AÔ0I€Hð[OØð[Oàð[Oð ;ð[Oð <ð	[Oð
 ð[Oð 
ð[Oð [Oð [Oð [Oð [Oð [Oðz Ô'ð 0ð €Oð ð 6Ø$5ÐÔ!àÐrV   Údatac                 ó6   — dd„}t          j        | |¬¦  «        S )NÚvaluer"   rW   c                 óX   — t          | t          ¦  «        r| j        S t          | ¦  «        S ©N)rO   r   r·   rM   )r·   s    rT   Ú_defaultz._serialize_request_body_data.<locals>._default  s(   € Ý�e�^Ñ,Ô,ð 	Ø”;ÐÝ�5‰zŒzÐrV   )Údefault)r·   r"   rW   r"   )ÚjsonÚdumps)rµ   rº   s     rT   Ú_serialize_request_body_datar¾     s-   € ðð ð ð õ
 Œ:�d HÐ-Ñ-Ô-Ð-rV   FÚ	exceptionÚhandledc                 ó¢   — t          | t          j        ¦   «         j        t          j        |dœ¬¦  «        \  }}t          j        ||¬¦  «         d S )N)ÚtyperÀ   )Úclient_optionsÚ	mechanism)Úhint)r   r‚   r—   r¢   r>   rj   Úcapture_event)r¿   rÀ   ÚeventrÅ   s       rT   Ú_capture_exceptionrÈ   "  sX   € å&ØÝ!Ô,Ñ.Ô.Ô6Ý/Ô:ÀwÐOÐOðñ ô �K€Eˆ4õ Ô˜U¨Ð.Ñ.Ô.Ð.Ð.Ð.rV   c                 ó˜   ‡‡— | j         Šdt          ‰¦  «        v}|r-dˆfd„}|| _         | j        Š	 	 	 	 	 	 	 	 	 	 dˆfd„}|| _        dS dS )zX
    Capture all exceptions in Starlette app and
    also extract user information.
    Ú_sentry_middleware_initrS   r"   rŠ   rx   rW   Nc                 ó¼   •‡—  ‰| g|¢R i |¤Ž | j                              ¦   «         Š	 	 	 	 	 	 	 	 dˆfd„}| j                              ¦   «         D ]}|| j         |<   Œd S )NrS   r"   rŠ   rx   rW   c              Ÿ   ó¸  •K  — t          j        ¦   «                              t          ¦  «        }|d         }|�Kt	          |d¦  «        o't          |j        t          ¦  «        o|j        |j        v }|rt          |d¬¦  «         d }t          |¦  «        j        D ]}|‰v r
‰|         } nŒ|€d S t          |¦  «        r || g|¢R i |¤Žƒ d {V —†S  || g|¢R i |¤ŽS )Nr   Ústatus_codeT)rÀ   )r‚   r—   r˜   r>   ÚhasattrrO   rÍ   ÚintrB   rÈ   rÂ   Ú__mro__Ú_is_async_callable)	rS   rŠ   rx   r¥   ÚexpÚis_http_server_errorÚold_handlerÚclsÚold_handlerss	           €rT   Ú!_sentry_patched_exception_handlerzfpatch_exception_middleware.<locals>._sentry_middleware_init.<locals>._sentry_patched_exception_handler>  s?  øè è € õ )Ô3Ñ5Ô5×EÒEÝ(ñô �ð ˜1”g�àÐ*å  ]Ñ3Ô3ð WÝ& s¤½Ñ<Ô<ðWàœO¨{Ô/VÐVð )ð
 ,ð >Ý*¨3¸Ð=Ñ=Ô=Ð=ð #�Ý ™9œ9Ô,ð ð �CØ˜lÐ*Ð*Ø&2°3Ô&7˜Ø˜ð +ð Ð&Ø�Få% kÑ2Ô2ð >Ø!, ¨TÐ!C°DÐ!CÐ!CÐ!C¸FÐ!CÐ!CÐCÐCÐCÐCÐCÐCÐCà&˜; tÐ=¨dÐ=Ð=Ð=°fÐ=Ð=Ð=rV   ©rS   r"   rŠ   r"   rx   r"   rW   N)Ú_exception_handlersÚcopyÚkeys)rS   rŠ   rx   r×   ÚkeyrÖ   Úold_middleware_inits        @€rT   rÊ   z;patch_exception_middleware.<locals>._sentry_middleware_init8  s¸   øø€ ØÐ Ð6 tÐ6Ð6Ð6¨vÐ6Ð6Ð6ð  Ô3×8Ò8Ñ:Ô:ˆLð>Øð>Ø$)ð>Ø5:ð>àð>ð >ð >ð >ð >ð >ðB Ô/×4Ò4Ñ6Ô6ð Rð R�Ø0Q�Ô(¨Ñ-Ð-ðRð RrV   rs   rr   rt   ru   rv   rw   c              “   óR   •K  — t          |¦  «          ‰| |||¦  «        ƒ d {V —† d S r¹   ©Ú_add_user_to_sentry_scope©rS   rr   rt   rv   r®   s       €rT   r±   zDpatch_exception_middleware.<locals>._sentry_exceptionmiddleware_callf  sE   øè è € õ" & eÑ,Ô,Ð,Ø�(˜4 ¨°Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6rV   rØ   ©
rS   rs   rr   rs   rt   ru   rv   rw   rW   N)rU   rM   r²   )ro   r³   rÊ   r±   r®   rÝ   s       @@rT   Úpatch_exception_middlewarerã   -  sÒ   øø€ ð
 +Ô3Ðà/µsÐ;NÑ7OÔ7OÐO€Oàð DEð(	Rð (	Rð (	Rð (	Rð (	Rð (	RðT %<ÐÔ!à#Ô,ˆð	7Ø"ð	7à#ð	7ð ?ð	7ð @ð		7ð
 ð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð( %EÐÔ!Ð!Ð!ðIDEð DErV   rr   rs   c                 ó  — d| vrdS t          j        ¦   «         j        }t          |¦  «        r|d         d         sdS nt	          ¦   «         sdS i }| d         }t          |dd¦  «        }|r|                     d|j        ¦  «         t          |dd¦  «        }|r|                     d|j        ¦  «         t          |dd¦  «        }|r|                     d|j	        ¦  «         t          j
        ¦   «         }|                     |¦  «         dS )zZ
    Extracts user information from the ASGI scope and
    adds it to Sentry's scope.
    ÚuserNÚdata_collectionÚ	user_infoÚusernameÚidÚemail)r‚   r—   r¢   r   r   rŽ   Ú
setdefaultrè   ré   rê   Úget_isolation_scopeÚset_user)rr   rÃ   rç   Ústarlette_userrè   Úuser_idrê   Úsentry_scopes           rT   rà   rà   }  s2  € ð �UÐÐØˆåÔ*Ñ,Ô,Ô4€NÝ" >Ñ2Ô2ð ØÐ/Ô0°Ô=ð 	ØˆFð	å$Ñ&Ô&ð Øˆà"$€IØ˜6”]€Nå�~ z°4Ñ8Ô8€HØð BØ×Ò˜Z¨Ô)@ÑAÔAÐAå�n d¨DÑ1Ô1€GØð 6Ø×Ò˜T >Ô#4Ñ5Ô5Ð5å�N G¨TÑ2Ô2€EØð <Ø×Ò˜W nÔ&:Ñ;Ô;Ð;åÔ1Ñ3Ô3€LØ×Ò˜)Ñ$Ô$Ð$Ð$Ð$rV   c                 ón   ‡— | j         Šdt          ‰¦  «        v}|r	 	 	 	 	 	 	 	 	 	 dˆfd„}|| _         d
S d
S )z/
    Add user information to Sentry scope.
    r°   rS   rs   rr   rt   ru   rv   rw   rW   Nc              “   óR   •K  — t          |¦  «          ‰| |||¦  «        ƒ d {V —† d S r¹   rß   rá   s       €rT   r°   zNpatch_authentication_middleware.<locals>._sentry_authenticationmiddleware_callª  sE   øè è € õ & eÑ,Ô,Ð,Ø�(˜4 ¨°Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6rV   râ   )r²   rM   )ro   r³   r°   r®   s      @rT   Úpatch_authentication_middlewareró      s‘   ø€ ð  Ô(€Hà=ÅSÈÁ]Ä]ÐR€Oàð Jð	7Ø"ð	7à#ð	7ð ?ð	7ð @ð		7ð
 ð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð %JÐÔ!Ð!Ð!ðJð JrV   c                  ó‚   ‡— t           j        Šdt          ‰¦  «        v} | r	 	 	 	 	 	 	 	 	 	 d
ˆfd	„}|t           _        dS dS )za
    Patches Starlettes `Middleware` class to record
    spans for every middleware invoked.
    rÊ   rS   r"   rÕ   rŠ   rx   rW   Nc                 óÜ   •— |t           k    r ‰| |g|¢R i |¤ŽS t          |¦  «        } ‰| |g|¢R i |¤Ž |t          k    rt          |¦  «         |t          k    rt          |¦  «         d S d S r¹   )r   r´   r0   ró   r7   rã   )rS   rÕ   rŠ   rx   Úspan_enabled_clsrÝ   s        €rT   rÊ   z2patch_middlewares.<locals>._sentry_middleware_initÀ  s¨   ø€ ð Õ*Ò*Ð*Ø*Ð*¨4°ÐF°tÐFÐFÐF¸vÐFÐFÐFå:¸3Ñ?Ô?ÐØÐ Ð&6ÐH¸ÐHÐHÐHÀÐHÐHÐHàÕ.Ò.Ð.Ý/°Ñ4Ô4Ð4àÕ)Ò)Ð)Ý*¨3Ñ/Ô/Ð/Ð/Ð/ð *Ð)rV   )
rS   r"   rÕ   r"   rŠ   r"   rx   r"   rW   N)r/   rU   rM   )r³   rÊ   rÝ   s     @rT   r^   r^   ¶  s‰   ø€ õ
 %Ô-Ðà/µsÐ;NÑ7OÔ7OÐO€OØð 6ð	0Øð	0Ø#ð	0Ø,1ð	0Ø=Bð	0àð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 6�
ÔÐÐð#6ð 6rV   rZ   r   c                 ó\   ‡ ‡— t           j        Š	 	 	 	 	 	 	 	 	 	 dˆˆ fd„}|t           _        d
S )zG
    Instrument Starlette ASGI app using the SentryAsgiMiddleware.
    rS   r-   rr   ÚStarletteScopert   r4   rv   r5   rW   Nc           	   “   ó4  •‡ K  — t          j        ¦   «                              t          ¦  «        }|€ ‰‰ |||¦  «        ƒ d {V —†S t	          ˆˆ fd„t          j        |j        t          j        |r|j        nt          d‰¬¦  «        } ||||¦  «        ƒ d {V —†S )Nc                  ó   •—  ‰‰g| ¢R i |¤ŽS r¹   rn   )ÚaÚkwÚold_apprS   s     €€rT   ú<lambda>zBpatch_asgi_app.<locals>._sentry_patched_asgi_app.<locals>.<lambda>à  s!   ø€ ˜W˜W TÐ4¨AÐ4Ð4Ð4°Ð4Ð4€ rV   r8   )Úmechanism_typerA   Úspan_originrD   Úasgi_versionrZ   )
r‚   r—   r˜   r>   r   rj   rA   rk   rD   r   )rS   rr   rt   rv   r¥   Ú
middlewarerý   rZ   s   `     €€rT   Ú_sentry_patched_asgi_appz0patch_asgi_app.<locals>._sentry_patched_asgi_appØ  sÍ   øøè è € õ !Ô+Ñ-Ô-×=Ò=Õ>RÑSÔSˆØÐØ ˜  u¨g°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<å)Ø4Ð4Ð4Ð4Ð4Ý/Ô:Ø)Ô;Ý,Ô3ð ð5�Ô3Ð3å4àØ/ð
ñ 
ô 
ˆ
ð  �Z  w°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5rV   )
rS   r-   rr   rø   rt   r4   rv   r5   rW   N)r-   r²   )rZ   r  rý   s   ` @rT   ra   ra   Ò  si   øø€ õ Ô €Gð6Øð6Ø"2ð6Ø=Fð6ØNTð6à	ð6ð 6ð 6ð 6ð 6ð 6ð 6ð. 2…IÔÐÐrV   Úobjc                 óÜ   — t          | t          j        ¦  «        r!| j        } t          | t          j        ¦  «        °!t	          | ¦  «        p"t          | ¦  «        ot	          | j        ¦  «        S r¹   )rO   Ú	functoolsÚpartialÚfuncr:   Úcallabler²   )r  s    rT   rÑ   rÑ   ô  se   € Ý
�S�)Ô+Ñ
,Ô
,ð ØŒhˆõ �S�)Ô+Ñ
,Ô
,ð õ ˜sÑ#Ô#ð Ý�‰ŒÐ;Õ-¨c¬lÑ;Ô;ðrV   r¤   úsentry_sdk.client.BaseClientÚrequestr1   úOptional[str]c                 ó¼  — d|j         vrdS 	 t          |j         d         ¦  «        }n# t          $ r Y dS w xY w|rt          | |¦  «        st          S t          |d¦  «        rt          j        |j        ¦  «        S t          |dd¦  «        }|€dS i }| 
                    ¦   «         D ]#\  }}t          |t          ¦  «        }|s|nd||<   Œ$t          j        |¦  «        S )z}
    Returns a stringified JSON representation of the request body if the request body is cached and within size bounds.
    úcontent-lengthNÚ_jsonÚ_formz[Unparsable])ÚheadersrÏ   rJ   r   r   rÎ   r¼   r½   r  rŽ   ÚitemsrO   r.   )r¤   r  Úcontent_lengthÚformdata_bodyÚ	form_datarÜ   ÚvalÚis_files           rT   Ú"_get_cached_request_body_attributer  ý  s  € ð ˜wœÐ.Ð.ØˆtðÝ˜Wœ_Ð-=Ô>Ñ?Ô?ˆˆøÝð ð ð Øˆtˆtðøøøð ð *Õ8¸ÀÑPÔPð *Ý)Ð)åˆw˜Ñ Ô ð )ÝŒz˜'œ-Ñ(Ô(Ð(å˜G W¨dÑ3Ô3€MØÐØˆtà€IØ!×'Ò'Ñ)Ô)ð @ð @‰ˆˆSÝ˜S¥*Ñ-Ô-ˆØ$+Ð?˜˜°ˆ	�#‰ˆåŒ:�iÑ Ô Ð s   �( ¨
6µ6ÚhandlerúCallable[..., Awaitable[Any]]rŠ   rx   c              �   ó*  ‡‡K  — t          j        ¦   «         Š‰                     t          ¦  «        }|€ | |i |¤Žƒ d{V —†S |d         }t	          |j        ¦  «        \  }}t          j        ¦   «         j        }|�2|�0|t          j	        k    r | 
                    t          j        |¦  «         t          t          j        ¦   «         |j        |j                             d¦  «        ||¬¦  «         t          j        ¦   «         }t#          |¦  «        }	|	                     ¦   «         ƒ d{V —†Š	 	 	 	 	 	 dˆˆfd
„}
t          j        |_        |                      |
||¦  «        ¦  «         	  | |i |¤Žƒ d{V —†	 t-          ¦   «         }t/          |¦  «        t0          u rfd}t3          ‰j        ¦  «        rd‰j        d         d         v }|r:t7          ‰|¬¦  «        }|r(|j         
                    t          j        |¦  «         S S S S # t-          ¦   «         }t/          |¦  «        t0          u rfd}t3          ‰j        ¦  «        rd‰j        d         d         v }|r:t7          ‰|¬¦  «        }|r(|j         
                    t          j        |¦  «         w w w w xY w)a&  
    Wraps an asynchronous handler function to attach request info to errors and the server segment span.
    The request body cached on the Starlette Request object is attached to streamed spans, but consuming the request body in the event
    processor can still cause application hangs.
    Nr   r;   ©r;   rz   r{   Úreqr"   r¥   rW   ú(Callable[[Event, dict[str, Any]], Event]c                 ó   •— dˆˆfd„}|S )NrÇ   r*   rÅ   rs   rW   c                 óò   •— |                       di ¦  «        }‰rKd‰v r‰d         |d<   d‰v r8d}t          ‰j        ¦  «        rd‰j        d         d         v }|r‰d         |d<   t          |¦  «        | d<   | S )Nr  Úcookiesrµ   TÚincoming_requestræ   Úhttp_bodies)Úgetr   r¢   r   )rÇ   rÅ   Úrequest_infoÚattach_request_datar¤   Úinfos       €€rT   Úevent_processorzS_wrap_async_handler.<locals>._make_request_event_processor.<locals>.event_processorF  s¥   ø€ à Ÿ9š9 Y°Ñ3Ô3ˆLØð <Ø Ð$Ð$Ø.2°9¬o�L Ñ+Ø˜T�>�>Ø*.Ð'Ý2°6´>ÑBÔBð à.Ø%œ~Ð.?Ô@ÀÔOðPð ,ð
 +ð <Ø/3°F¬|˜ VÑ,Ý'¨Ñ5Ô5ˆE�)ÑàˆLrV   )rÇ   r*   rÅ   rs   rW   r*   rn   )r  r¥   r(  r¤   r'  s      €€rT   Ú_make_request_event_processorz:_wrap_async_handler.<locals>._make_request_event_processorC  s.   ø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð( ÐrV   Tr"  ræ   r#  )r¤   r  ©r  r"   r¥   r"   rW   r  )r‚   r—   r˜   r>   r™   rr   rš   r›   r   rœ   r�   r	   rž   Ú _set_transaction_name_and_sourcerA   r$  rì   ÚStarletteRequestExtractorÚextract_request_inforj   Ú_nameÚadd_event_processorr   rÂ   r   r   r¢   r  Ú_segmentÚHTTP_REQUEST_BODY_DATA)r  rŠ   rx   r¥   r  rz   r{   r¦   rð   Ú	extractorr)  Úcurrent_spanr&  Úrequest_bodyr¤   r'  s                 @@rT   Ú_wrap_async_handlerr5    sQ  øøè è € õ Ô"Ñ$Ô$€FØ×(Ò(Õ)=Ñ>Ô>€KØÐØ�W˜dÐ- fÐ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-à�1Œg€Gå@ÀÄÑOÔOÑ€J�åÔ.Ñ0Ô0ÔE€KàÐØÐ"ØÕ,Ô2Ò2Ð2à×!Ò!¥(Ô"5°zÑBÔBÐBå$ÝÔ$Ñ&Ô&ØÔ%Ø”×"Ò" :Ñ.Ô.ØØðñ ô ð õ Ô1Ñ3Ô3€LÝ)¨'Ñ2Ô2€Ià×/Ò/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1€DðØðØ!&ðà	3ðð ð ð ð ð ð õ2 .Ô8€LÔØ×$Ò$Ø%Ð% g¨{Ñ;Ô;ñô ð ðØ�W˜dÐ- fÐ-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-å'Ñ)Ô)ˆå�ÑÔ¥Ð-Ð-Ø"&ÐÝ*¨6¬>Ñ:Ô:ð à&Ø”~Ð&7Ô8¸ÔGðHð $ð
 #ð ÝAØ!¨7ð ñ  ô  �ð  ð Ø Ô)×7Ò7Ý Ô7Ø$ñô ð ð ð .ððøõ (Ñ)Ô)ˆå�ÑÔ¥Ð-Ð-Ø"&ÐÝ*¨6¬>Ñ:Ô:ð à&Ø”~Ð&7Ô8¸ÔGðHð $ð
 #ð ÝAØ!¨7ð ñ  ô  �ð  ð Ø Ô)×7Ò7Ý Ô7Ø$ñô ð ð ð .ððøøøs   Å)H ÈBJc                  óX   ‡— t           j        j        Šdˆfd„} | t           j        _        d S )Nr  úCallable[[Any], Any]rW   r3   c                 ó˜   •‡— | Št          ‰¦  «        }|r	dˆfd„}|} n"t          j        ‰¦  «        dˆfd„¦   «         }|}  ‰| ¦  «        S )NrŠ   r"   rx   rW   c               Ÿ   ó4   •K  — t          ‰g| ¢R i |¤Žƒ d {V —†S r¹   )r5  )rŠ   rx   Úold_funcs     €rT   Ú_sentry_async_funczTpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func‚  s7   øè è € Ý0°ÐK¸DÐKÐKÐKÀFÐKÐKÐKÐKÐKÐKÐKÐKÐKrV   c                  óà  •‡— t          j        ¦   «         }|                     t          ¦  «        }|€ ‰| i |¤ŽS t          j        ¦   «         }t          |j        ¦  «        }|r7|j        }t          |¦  «        t          u r|j
                             ¦   «          n |j        �|j                             ¦   «          t          j        ¦   «         }|j        �|j                             ¦   «          | d         }t#          |j        ¦  «        \  }	}
t          j        ¦   «         j        }|�2|	�0|
t(          j        k    r |                     t.          j        |	¦  «         t3          ||j        |j                             d¦  «        |	|
¬¦  «         t9          |¦  «        }|                     ¦   «         Š	 	 	 	 	 	 d
ˆfd	„}t          j        |_        |                       |||¦  «        ¦  «          ‰| i |¤ŽS )Nr   r;   r  r  r"   r¥   rW   r  c                 ó    •— 	 	 	 	 	 	 dˆfd„}|S )NrÇ   r*   rÅ   údict[str, Any]rW   c                 óf   •— |                       di ¦  «        }‰r‰|d<   t          |¦  «        | d<   | S )Nr  r!  )r$  r   )rÇ   rÅ   r%  r!  s      €rT   r(  z“patch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor.<locals>.event_processor¼  sA   ø€ ð (-§y¢y°¸BÑ'?Ô'?˜Ø"ð >Ø6=˜L¨Ñ3å+3°LÑ+AÔ+A˜˜iÑ(à$˜rV   )rÇ   r*   rÅ   r>  rW   r*   rn   )r  r¥   r(  r!  s      €rT   r)  zzpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor¹  sA   ø€ ð
%Ø&ð
%Ø.>ð
%à ð
%ð 
%ð 
%ð 
%ð 
%ð 
%ð +Ð*rV   r*  )!r‚   r—   r˜   r>   rš   r   r¢   Ústreamed_spanrÂ   r   r0  Ú_update_active_threadÚtransactionÚupdate_active_threadrì   ÚprofileÚupdate_active_thread_idr™   rr   r›   r   rœ   r�   r	   rž   r+  rA   r$  r,  Úextract_cookies_from_requestrj   r.  r/  )rŠ   rx   r¤   r¥   Úcurrent_scopeÚspan_streamingr3  rð   r  rz   r{   r¦   r2  r)  r!  r:  s                 @€rT   Ú_sentry_sync_funczSpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func‰  s&  øø€ å#Ô.Ñ0Ô0�à$×4Ò4Õ5IÑJÔJ�ØÐ&Ø#˜8 TÐ4¨VÐ4Ð4Ð4å *Ô <Ñ >Ô >�å!;¸F¼NÑ!KÔ!K�Ø!ð EØ#0Ô#>�Lå˜LÑ)Ô)­\Ð9Ð9Ø$Ô-×CÒCÑEÔEÐEøØ"Ô.Ð:Ø!Ô-×BÒBÑDÔDÐDå)Ô=Ñ?Ô?�ØÔ'Ð3Ø Ô(×@Ò@ÑBÔBÐBà˜qœ'�å*LØ”Mñ+ô +Ñ'�
˜Kõ )Ô:Ñ<Ô<ÔQ�àÐ+Ø"Ð.Ø#Õ'8Ô'>Ò>Ð>à×-Ò-­hÔ.AÀ:ÑNÔNÐNå0Ø!ØÔ1Ø$œ]×.Ò.¨zÑ:Ô:Ø)Ø +ðñ ô ð õ 6°gÑ>Ô>�	Ø#×@Ò@ÑBÔB�ð+Øð+Ø-2ð+à?ð+ð +ð +ð +ð +ð +õ" &:Ô%D�Ô"Ø×0Ò0Ø1Ð1°'¸;ÑGÔGñô ð ð  �x Ð0¨Ð0Ð0Ð0rV   r–   )rÑ   r  Úwraps)r  Úis_coroutiner;  rI  r:  Úold_request_responses       @€rT   Ú_sentry_request_responsez8patch_request_response.<locals>._sentry_request_response|  s    øø€ Øˆå)¨(Ñ3Ô3ˆØð Q	%ðLð Lð Lð Lð Lð Lð &ˆDˆDõ Œ_˜XÑ&Ô&ðE1ð E1ð E1ð E1ð E1ñ 'Ô&ðE1ðN %ˆDà#Ð# DÑ)Ô)Ð)rV   )r  r7  rW   r3   )r?   ÚroutingÚrequest_response)rM  rL  s    @rT   rb   rb   y  sH   ø€ Ý$Ô,Ô=ÐðW*ð W*ð W*ð W*ð W*ð W*ðr *B…IÔÔ&Ð&Ð&rV   c                  óÒ   ‡‡— 	 ddl mŠ n# t          $ r Y d S w xY w	 ddlm}  n# t          $ r Y d S w xY w| j        Šdt          ‰¦  «        v}|r	 	 	 	 	 	 	 	 dˆˆfd„}|| _        d S d S )Nr   )ÚMarkup)ÚJinja2TemplatesÚ_sentry_jinja2templates_initrS   rR  rŠ   r"   rx   rW   c                 óž   •— dˆfd„}|                      dg ¦  «         ||d         vr|d                              |¦  «          ‰| g|¢R i |¤ŽS )Nr  r1   rW   rs   c                 óh   •—  ‰t          j        ¦   «                              ¦   «         ¦  «        }d|iS )NÚsentry_trace_meta)r‚   rš   Útrace_propagation_meta)r  Ú
trace_metarQ  s     €rT   Úadd_sentry_trace_metazTpatch_templates.<locals>._sentry_jinja2templates_init.<locals>.add_sentry_trace_metaò  s=   ø€ Ø#˜VÝÔ0Ñ2Ô2×IÒIÑKÔKñô �
ð (¨ðð rV   Úcontext_processors)r  r1   rW   rs   )rë   Úappend)rS   rŠ   rx   rY  rQ  Úold_jinja2templates_inits       €€rT   rS  z5patch_templates.<locals>._sentry_jinja2templates_initï  s‡   ø€ ðð ð ð ð ð ð ×ÒÐ2°BÑ7Ô7Ð7à$¨FÐ3GÔ,HÐHÐHØÐ+Ô,×3Ò3Ð4IÑJÔJÐJà+Ð+¨DÐB°4ÐBÐBÐB¸6ÐBÐBÐBrV   )rS   rR  rŠ   r"   rx   r"   rW   N)Ú
markupsaferQ  ÚImportErrorÚstarlette.templatingrR  rU   rM   )rR  r³   rS  rQ  r\  s      @@rT   rc   rc   Ø  s  øø€ ðØ%Ð%Ð%Ð%Ð%Ð%Ð%øÝð ð ð ØˆˆðøøøðØ8Ð8Ð8Ð8Ð8Ð8Ð8øÝð ð ð Øˆˆðøøøð  /Ô7Ðà4½CØ ñ=ô =ð €Oð ð @ð	CØ#ð	CØ,1ð	CØ=Bð	Càð	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð$ $@ˆÔ Ð Ð ð)@ð @s   „ ‹
˜�$ ¤
2±2c                   ój   — e Zd ZdZdd„Z	 	 	 	 dd	„Z	 	 	 	 dd
„Zdd„Zdd„Zdd„Z	dd de
fd„Zdd„ZdS )r,  z�
    Extracts useful information from the Starlette request
    (like form data or cookies) and adds it to the Sentry event.
    rS   r  r1   rW   Nc                 ó   — || _         d S r¹   )r  )rS   r  s     rT   rU   z"StarletteRequestExtractor.__init__
  s   € ØˆŒˆˆrV   úOptional[Dict[str, Any]]c                 óü   — t          j        ¦   «         j        }d }t          |¦  «        r0t	          |                      ¦   «         |d         d         ¬¦  «        }n"t          ¦   «         r|                      ¦   «         }|S )Nræ   r!  ©r  Ú	behaviour)r‚   r—   r¢   r   r
   r!  r   )rS   rÃ   r!  s      rT   rF  z6StarletteRequestExtractor.extract_cookies_from_request  s{   € õ $Ô.Ñ0Ô0Ô8ˆØ.2ˆå& ~Ñ6Ô6ð 	%Ý;Ø—l’l‘n”nØ(Ð):Ô;¸IÔFðñ ô ˆGˆGõ %Ñ&Ô&ð 	%Ø—l’l‘n”nˆGàˆrV   c              ƒ   ó¬  K  — t          j        ¦   «         }i }t          ¦   «         5  t          |j        ¦  «        r<t          |                      ¦   «         |j        d         d         ¬¦  «        }|r||d<   n%t          ¦   «         r|                      ¦   «         |d<   |                      ¦   «         ƒ d {V —†}|s|cd d d ¦  «         S |r4t          ||¦  «        s$t          j        ¦   «         |d<   |cd d d ¦  «         S |                      ¦   «         ƒ d {V —†}|r||d<   |cd d d ¦  «         S |                      ¦   «         ƒ d {V —†}|r^i }|                     ¦   «         D ]4\  }}	t          |	t           ¦  «        }
|
s|	nt          j        ¦   «         ||<   Œ5||d<   |cd d d ¦  «         S t          j        ¦   «         |d<   |cd d d ¦  «         S # 1 swxY w Y   d S )Nræ   r!  rd  rµ   )r‚   r—   r   r   r¢   r
   r!  r   r  r   r   Úremoved_because_over_size_limitr¼   Úformr  rO   r.   Úremoved_because_raw_data)rS   r¤   r%  r!  r  r¼   rh  r  rÜ   r  r  s              rT   r-  z.StarletteRequestExtractor.extract_request_info  sè  è è € õ Ô&Ñ(Ô(ˆà)+ˆå(Ñ*Ô*ð /	 ð /	 å*¨6¬>Ñ:Ô:ð 9Ý?ØŸ,š,™.œ.Ø$œnÐ->Ô?À	ÔJðñ ô �ð ð 6Ø.5�L Ñ+øÝ(Ñ*Ô*ð 9Ø*.¯,ª,©.¬.�˜YÑ'ð $(×#6Ò#6Ñ#8Ô#8Ð8Ð8Ð8Ð8Ð8Ð8ˆNØ!ð $Ø#ð/	 ð /	 ð /	 ð /	 ñ /	 ô /	 ð /	 ð /	 ð$ ð $Õ&@Ø˜ñ'ô 'ð $õ (6Ô'UÑ'WÔ'W�˜VÑ$Ø#ð-/	 ð /	 ð /	 ð /	 ñ /	 ô /	 ð /	 ð /	 ð2 Ÿš™œÐ$Ð$Ð$Ð$Ð$Ð$ˆDØð $Ø'+�˜VÑ$Ø#ð9/	 ð /	 ð /	 ð /	 ñ /	 ô /	 ð /	 ð /	 ð> Ÿš™œÐ$Ð$Ð$Ð$Ð$Ð$ˆDØð $Ø�	Ø $§
¢
¡¤ð ð ‘H�C˜Ý(¨­jÑ9Ô9�Gð  'ðG˜˜å+ÔDÑFÔFð ˜c‘N�Nð (1�˜VÑ$Ø#ðW/	 ð /	 ð /	 ð /	 ñ /	 ô /	 ð /	 ð /	 õ\ $2Ô#JÑ#LÔ#LˆL˜Ñ Øð_/	 ð /	 ð /	 ð /	 ñ /	 ô /	 ð /	 ð /	 ð /	 ð /	 ð /	 ð /	 øøøð /	 ð /	 ð /	 ð /	 ð /	 ð /	 s+   ¦BG	Ã)G	Ã<"G	Ä+A-G	Æ%G	Ç	GÇGúOptional[int]c              ƒ   ód   K  — d| j         j        v rt          | j         j        d         ¦  «        S d S )Nr  )r  r  rÏ   ©rS   s    rT   r  z(StarletteRequestExtractor.content_lengthU  s4   è è € Ø˜tœ|Ô3Ð3Ð3Ý�t”|Ô+Ð,<Ô=Ñ>Ô>Ð>àˆtrV   rs   c                 ó   — | j         j        S r¹   )r  r!  rl  s    rT   r!  z!StarletteRequestExtractor.cookies[  s   € ØŒ|Ô#Ð#rV   r"   c              ƒ   ó”   K  — t           €d S | j                             ¦   «         ƒ d {V —† | j                             ¦   «         ƒ d {V —†S r¹   )Ú	multipartr  Úbodyrh  rl  s    rT   rh  zStarletteRequestExtractor.form^  s_   è è € ÝÐØ�4ð Œl×ÒÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!à”\×&Ò&Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(rV   c                 óZ   — t          | j        j                             d¦  «        ¦  «        S )Nzcontent-type)r   r  r  r$  rl  s    rT   Úis_jsonz!StarletteRequestExtractor.is_jsonj  s#   € Ý$ T¤\Ô%9×%=Ò%=¸nÑ%MÔ%MÑNÔNÐNrV   c              ƒ   ó”   K  — |                       ¦   «         sd S 	 | j                             ¦   «         ƒ d {V —†S # t          $ r Y d S w xY wr¹   )rr  r  r¼   r   rl  s    rT   r¼   zStarletteRequestExtractor.jsonm  sh   è è € Ø�|Š|‰~Œ~ð 	Ø�4ð	Øœ×*Ò*Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øÝð 	ð 	ð 	Ø�4�4ð	øøøs   š9 ¹
AÁA)rS   r,  r  r1   rW   N)rS   r,  rW   rb  )rS   r,  rW   rj  )rS   r,  rW   rs   )rS   r,  rW   r"   )rg   rh   ri   Ú__doc__rU   rF  r-  r  r!  rh  rl   rr  r¼   rn   rV   rT   r,  r,    sô   € € € € € ðð ð
ð ð ð ðØ)ðà	#ðð ð ð ð 6 Ø)ð6 à	#ð6 ð 6 ð 6 ð 6 ðpð ð ð ð$ð $ð $ð $ð
)ð 
)ð 
)ð 
)ðOÐ1ð O°dð Oð Oð Oð Oðð ð ð ð ð rV   r,  rø   ú'Tuple[Optional[str], TransactionSource]c                 ód  — |                       d¦  «        }|sd t          j        fS |j        D ]v}|                     | ¦  «        }|d         t
          j        k    rI	 |j        t          j        fc S # t          $ r& |                       d¦  «        t          j	        fcY c S w xY wŒwd t          j        fS )NÚrouterr   Úpath)
r$  r   rœ   ÚroutesÚmatchesr2   ÚFULLrx  ÚAttributeErrorÚURL)rr   rw  ÚrouteÚmatchs       rT   r™   r™   v  sÜ   € ð �YŠY�xÑ Ô €FØð -ØÕ&Ô,Ð,Ð,à”ð @ð @ˆØ—’˜eÑ$Ô$ˆØ�Œ8•u”zÒ!Ð!ð@Ø”zÕ#4Ô#:Ð:Ð:Ð:Ð:øÝ!ð @ð @ð @ð —y’y Ñ(Ô(Õ*;Ô*?Ð?Ð?Ð?Ð?Ð?Ð?ð@øøøð "ð Õ"Ô(Ð(Ð(s   ÁA0Á0+B ÂB zsentry_sdk.ScoperA   r;   zOptional[Callable[..., Any]]rz   r{   r   c                 óÄ   — d }t           |         }|dk    r|rt          |¦  «        pd }n
|dk    r||}}|€t          }t          j        }|                      ||¬¦  «         d S )Nr;   r<   r|   )r   r!   Ú_DEFAULT_TRANSACTION_NAMEr   rœ   r    )rr   rA   r;   rz   r{   r   r}   s          rT   r+  r+  Š  s}   € ð €DÝÐ/Ô0€Fà˜JÒ&Ð&¨8Ð&Ý(¨Ñ2Ô2Ð:°dˆˆà	˜eÒ	#Ð	#Ø! ;ˆfˆà€|Ý(ˆÝ"Ô(ˆà	×Ò˜t¨FÐÑ3Ô3Ð3Ð3Ð3rV   rq   r¥   ú#Tuple[Optional[str], Optional[str]]c                 óˆ   — d }d }|j         dk    r!t          | j        ¦  «        }t          j        }n|j         dk    r||}}||fS )Nr;   r<   )rA   r!   r¡   r   Ú	COMPONENT)rq   r¥   rz   r{   r   r}   s         rT   rŸ   rŸ   ¡  sV   € ð €DØ€FàÔ$¨
Ò2Ð2Ý(¨¬Ñ7Ô7ˆÝ"Ô,ˆˆØ	Ô	&¨%Ò	/Ð	/Ø! ;ˆfˆà�ˆ<ÐrV   )ro   r"   rW   r"   )F)ro   r"   rW   N)rr   rs   rW   Nrf   )rZ   r   rW   N)r¤   r
  r  r1   rW   r  )r  r  rŠ   r"   rx   r"   rW   r"   )rr   rø   rW   ru  )
rq   r"   r¥   r>   rz   r  r{   r   rW   r‚  )sr  r¼   ÚsysrP   Úcollections.abcr   rÚ   r   r   Útypingr   r‚   Úsentry_sdk._typesr   Úsentry_sdk.constsr   r	   Úsentry_sdk.data_collectionr
   Úsentry_sdk.integrationsr   r   r   Ú$sentry_sdk.integrations._asgi_commonr   Ú$sentry_sdk.integrations._wsgi_commonr   r   r   r   Úsentry_sdk.integrations.asgir   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   r   Úsentry_sdk.tracingr   r   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r?   r,   r\   Ústarlette.applicationsr-   Ústarlette.datastructuresr.   Ústarlette.middlewarer/   Ú#starlette.middleware.authenticationr0   Ústarlette.requestsr1   Ústarlette.routingr2   Ústarlette.typesr3   r4   r5   r6   rø   r^  Ústarlette.middleware.exceptionsr7   Ústarlette.exceptionsÚpython_multipartro  Úversion_infoÚinspectr:   Úasyncior�  rI   r>   r´   rM   r¾   ÚBaseExceptionrÈ   rã   rà   ró   r^   ra   rl   rÑ   r  r5  rb   rc   r,  r™   r+  rŸ   rn   rV   rT   ú<module>r¢     s©  ðØ Ð Ð Ð Ø €€€Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø LÐ LÐ LÐ LÐ LÐ Lðð ð ð ð ð ð ð ð ð ð
 AÐ @Ð @Ð @Ð @Ð @ðð ð ð ð ð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð @Ð ?Ð ?Ð ?Ð ?Ð ?ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð ð =ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð =Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð5ØÐÐÐØ:Ð:Ð:Ð:Ð:Ð:Ø0Ð0Ð0Ð0Ð0Ð0ðð ð ð ð ð ð 0Ð/Ð/Ð/Ð/Ð/ðð ð ð ð ð ð +Ð*Ð*Ð*Ð*Ð*Ø'Ð'Ð'Ð'Ð'Ð'Ø6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ø7Ð7Ð7Ð7Ð7Ð7Ð7øØð 5ð 5ð 5Ø
ˆ,Ð3Ñ
4Ô
4Ð4ð5øøøð9àCÐCÐCÐCÐCÐCÐCøØð 9ð 9ð 9à8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð9øøøð	ðà,Ð,Ð,Ð,Ð,øØð ð ð àÐÐÐÐÐðøøøøøð ð ð ð Ø€I€I€Iðøøøð
 Ô�wÒÐØ+Ð+Ð+Ð+Ð+Ð+Ð+à+Ð+Ð+Ð+Ð+Ð+ð 8Ð à.Ð ð<ð <ð <ð <ð <˜;ñ <ô <ð <ð~kØðkà
ðkð kð kð kð\. uð .°ð .ð .ð .ð .ð ÐÐ0Ñ1Ô1ð/ð / -ð /¸%ð /ÈDð /ð /ð /ñ 2Ô1ð/ðMEð MEð MEð MEð` ÐÐ0Ñ1Ô1ð%ð %ð %ñ 2Ô1ð%ðDJð Jð Jð Jð,6ð 6ð 6ð 6ð82ð 2ð 2ð 2ðD˜Eð  dð ð ð ð ð!Ø*ð!Ø5>ð!àð!ð !ð !ð !ð@YØ,ðYØ5:ðYØFKðYà
ðYð Yð Yð Yðx\Bð \Bð \Bð \Bð~)@ð )@ð )@ð )@ðXoð oð oð oð oñ oô oð oðd)Øð)à.ð)ð )ð )ð )ð(4Øð4àð4ð -ð4ð  ð	4ð
 %ð4ð 
ð4ð 4ð 4ð 4ð.Ø	ðà'ðð  ðð %ð	ð
 +ðð ð ð ð ð sN   Â2>C1 Ã1DÄD ÄDÄDÄ D% Ä$D5 Ä%	D1Ä.D5 Ä0D1Ä1D5 Ä5D?Ä>D?