§
    xÅj,(  ã                   óv  — U 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
 d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ erd d
l mZmZmZ d dlmZmZ 	 d dlZd dlmZ n# e$ r  ed¦  «        ‚w xY w	 d dl Zej!        Z"ej#        Z$dZ%n# e$ r d dl&Zej'        Z"ej(        Z$dZ%Y nw xY wdZ)de*d<   e%r( e¦   «         5  d dl+m,Z) ddd¦  «         n# 1 swxY w Y    G d„ de
¦  «        Z- G d„ d¦  «        Z.dZ/ G d„ de¦  «        Z0d-d„Z1d-d„Z2d-d„Z3de4dd de5fd!„Z6dd de5fd"„Z7d#d$d%e8d&d'ddfd(„Z9	 	 	 	 	 	 d.d,„Z:dS )/é    )ÚTYPE_CHECKINGN)ÚSPANDATA)ÚDidNotEnableÚIntegrationÚ_check_minimum_version)ÚRequestExtractor)ÚSentryWsgiMiddleware)ÚSOURCE_FOR_STYLE)Úhas_span_streaming_enabled)Úcapture_internal_exceptionsÚensure_integration_enabledÚevent_from_exceptionÚparse_version)ÚAnyÚDictÚOptional)ÚEventÚEventProcessor)Ú__version__zFalcon not installedTFzOptional[object]Ú_FALCON_UNSET)Ú_UNSETc                   ó>   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd	„Zdd„ZdS )ÚFalconRequestExtractorÚreturnúDict[str, Any]c                 ó   — | j         j        S ©N)ÚrequestÚenv©Úselfs    úOC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/falcon.pyr   zFalconRequestExtractor.env6   s   € ØŒ|ÔÐó    c                 ó   — | j         j        S r   )r   Úcookiesr    s    r"   r%   zFalconRequestExtractor.cookies9   s   € ØŒ|Ô#Ð#r#   Nc                 ó   — d S r   © r    s    r"   ÚformzFalconRequestExtractor.form<   ó   € Øˆtr#   c                 ó   — d S r   r'   r    s    r"   ÚfileszFalconRequestExtractor.files?   r)   r#   úOptional[str]c                 ó>   — |                       ¦   «         }|dk    rdS d S )Nr   z[REQUEST_CONTAINING_RAW_DATA])Úcontent_length)r!   r.   s     r"   Úraw_datazFalconRequestExtractor.raw_dataB   s+   € ð
 ×,Ò,Ñ.Ô.ˆØ˜AÒÐØ2Ð2à�4r#   úOptional[Dict[str, Any]]c                 ó„   — d }t          ¦   «         5  | j        j        }d d d ¦  «         n# 1 swxY w Y   |t          ur|S d S r   )r   r   Ú_mediar   )r!   Úcached_medias     r"   ÚjsonzFalconRequestExtractor.jsonM   sŒ   € àˆÝ(Ñ*Ô*ð 	/ð 	/ð  œ<Ô.ˆLð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð �}Ð,Ð,ØÐàˆts   ‘*ª.±.)r   r   ©r   N)r   r,   )r   r0   )	Ú__name__Ú
__module__Ú__qualname__r   r%   r(   r+   r/   r4   r'   r#   r"   r   r   5   sŒ   € € € € € ð ð  ð  ð  ð$ð $ð $ð $ðð ð ð ðð ð ð ð	ð 	ð 	ð 	ðð ð ð ð ð r#   r   c                   óJ   — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 dd	„Z	 	 	 	 	 	 	 	 	 	 dd„ZdS )ÚSentryFalconMiddlewarez9Captures exceptions in Falcon requests and send to SentryÚreqr   ÚrespÚargsÚkwargsr   Nc                 óÞ   — t          j        ¦   «                              t          ¦  «        }|€d S t          j        ¦   «         }d|_        |                     t          ||¦  «        ¦  «         d S )NÚfalcon)Ú
sentry_sdkÚ
get_clientÚget_integrationÚFalconIntegrationÚget_isolation_scopeÚ_nameÚadd_event_processorÚ_make_request_event_processor)r!   r;   r<   r=   r>   ÚintegrationÚscopes          r"   Úprocess_requestz&SentryFalconMiddleware.process_requestb   sf   € õ !Ô+Ñ-Ô-×=Ò=Õ>OÑPÔPˆØÐØˆFåÔ.Ñ0Ô0ˆØˆŒØ×!Ò!Õ"?ÀÀ[Ñ"QÔ"QÑRÔRÐRÐRÐRr#   ÚresourceÚparamsc                 ó¨  — t          j        ¦   «         }|                     t          ¦  «        }|�t	          |j        ¦  «        sdS t          j        ¦   «         j        }|�%|                     t          j
        |j        ¦  «         |j        |j        dœ}||j                 }	t           j        j        |j                 }
t          j        |	|
¦  «         dS )z[
        Sets the segment name and source as the route is resolved when this runs.
        N©Úuri_templateÚpath)rA   rB   rC   rD   r   ÚoptionsÚget_current_scopeÚ_server_segment_spanÚset_attributer   Ú
HTTP_ROUTErP   rQ   Útransaction_styleÚtracesr
   Úset_transaction_name)r!   r;   r<   rL   rM   ÚclientrI   Úserver_spanÚname_for_styleÚnameÚsources              r"   Úprocess_resourcez'SentryFalconMiddleware.process_resourcem   sÈ   € õ Ô&Ñ(Ô(ˆØ×,Ò,Õ->Ñ?Ô?ˆØÐÕ&@ÀÄÑ&PÔ&PÐØˆFå Ô2Ñ4Ô4ÔIˆØÐ"Ø×%Ò%¥hÔ&9¸3Ô;KÑLÔLÐLð  Ô,Ø”Hð
ð 
ˆð ˜kÔ;Ô<ˆÝÔ"Ô3°KÔ4QÔRˆÝÔ'¨¨fÑ5Ô5Ð5Ð5Ð5r#   )
r;   r   r<   r   r=   r   r>   r   r   N)
r;   r   r<   r   rL   r   rM   r   r   N)r6   r7   r8   Ú__doc__rK   r_   r'   r#   r"   r:   r:   _   s›   € € € € € ØCÐCð	SØð	SØ %ð	SØ.3ð	SØ?Dð	Sà	ð	Sð 	Sð 	Sð 	Sð6Øð6Ø %ð6Ø16ð6Ø@Eð6à	ð6ð 6ð 6ð 6ð 6ð 6r#   r:   rO   c                   óJ   — e Zd ZdZde› �ZdZd
deddfd„Zedd	„¦   «         Z	dS )rD   r@   z
auto.http.Ú rP   rW   r   Nc                 ó\   — |t           vrt          d|›dt           ›d�¦  «        ‚|| _        d S )Nz%Invalid value for transaction_style: z (must be in ú))ÚTRANSACTION_STYLE_VALUESÚ
ValueErrorrW   )r!   rW   s     r"   Ú__init__zFalconIntegration.__init__Ž   sJ   € ØÕ$<Ð<Ð<Ý�*à$Ð$Ð$Õ&>Ð&>Ð&>ð@ñô ð ð "3ˆÔÐÐr#   c                  ó¬   — t          t          ¦  «        } t          t          | ¦  «         t	          ¦   «          t          ¦   «          t          ¦   «          d S r   )r   ÚFALCON_VERSIONr   rD   Ú_patch_wsgi_appÚ_patch_handle_exceptionÚ_patch_prepare_middleware)Úversions    r"   Ú
setup_oncezFalconIntegration.setup_once–   sJ   € å¥Ñ/Ô/ˆÝÕ0°'Ñ:Ô:Ð:åÑÔÐÝÑ!Ô!Ð!Ý!Ñ#Ô#Ð#Ð#Ð#r#   )rP   r5   )
r6   r7   r8   Ú
identifierÚoriginrW   Ústrrg   Ústaticmethodrn   r'   r#   r"   rD   rD   ˆ   ss   € € € € € Ø€JØ&˜*Ð&Ð&€FàÐð3ð 3¨#ð 3À4ð 3ð 3ð 3ð 3ð ð$ð $ð $ñ „\ð$ð $ð $r#   rD   r   c                  óT   ‡— t           j        Š	 	 	 	 	 	 	 	 dˆfd„} | t           _        d S )	Nr!   ú
falcon.APIr   r   Ústart_responser   c                 óÐ   •‡ — t          j        ¦   «                              t          ¦  «        }|€ ‰‰ ||¦  «        S t	          ˆˆ fd„t          j        ¬¦  «        } |||¦  «        S )Nc                 ó   •—  ‰‰| |¦  «        S r   r'   )ÚenviÚ
start_respÚoriginal_wsgi_appr!   s     €€r"   ú<lambda>zB_patch_wsgi_app.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>«   s   ø€ Ð%6Ð%6°t¸TÀ:Ñ%NÔ%N€ r#   )Úspan_origin)rA   rB   rC   rD   r	   rp   )r!   r   ru   rI   Úsentry_wrappedrz   s   `    €r"   Úsentry_patched_wsgi_appz0_patch_wsgi_app.<locals>.sentry_patched_wsgi_app£   s{   øø€ õ !Ô+Ñ-Ô-×=Ò=Õ>OÑPÔPˆØÐØ$Ð$ T¨3°Ñ?Ô?Ð?å-ØNÐNÐNÐNÐNÝ)Ô0ð
ñ 
ô 
ˆð
 ˆ~˜c >Ñ2Ô2Ð2r#   )r!   rt   r   r   ru   r   r   r   )Úfalcon_app_classÚ__call__)r~   rz   s    @r"   rj   rj       s[   ø€ Ý(Ô1Ðð3Øð3Ø!&ð3Ø8=ð3à	ð3ð 3ð 3ð 3ð 3ð 3ð !8ÕÔÐÐr#   c                  óz   ‡— t           j        Št          t          ‰¦  «        dˆfd„¦   «         } | t           _        d S )Nr!   rt   r=   r   r   c                 ó†  •— d x}}t          ¦   «         5  t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }d d d ¦  «         n# 1 swxY w Y    ‰| g|¢R Ž }|�|€|S t          ||¦  «        rDt          |t	          j        ¦   «         j        dddœ¬¦  «        \  }}t	          j        ||¬¦  «         |S )Nc              3   óD   K  — | ]}t          |t          ¦  «        ¯|V — Œd S r   )Ú
isinstanceÚ	Exception©Ú.0Úarguments     r"   ú	<genexpr>zS_patch_handle_exception.<locals>.sentry_patched_handle_exception.<locals>.<genexpr>¾   s1   è è € ÐWÐW 8µzÀ(ÍIÑ7VÔ7VÐW�hÐWÐWÐWÐWÐWÐWr#   c              3   óN   K  — | ] }t          |t          j        ¦  «        ¯|V — Œ!d S r   )r„   r@   ÚResponser†   s     r"   r‰   zS_patch_handle_exception.<locals>.sentry_patched_handle_exception.<locals>.<genexpr>¿   sG   è è € ð ð Ø%µ¸HÅfÄoÑ1VÔ1VðØðð ð ð ð ð r#   r@   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)r   ÚnextÚ_exception_leads_to_http_5xxr   rA   rB   rR   Úcapture_event)r!   r=   ÚexÚresponseÚwas_handledÚeventr�   Úoriginal_handle_exceptions          €r"   Úsentry_patched_handle_exceptionz@_patch_handle_exception.<locals>.sentry_patched_handle_exception·   sH  ø€ ð
 ÐˆˆXÝ(Ñ*Ô*ð 	ð 	ÝÐWÐW¨tÐWÑWÔWÑWÔWˆBÝð ð Ø)-ðñ ô ñ ô ˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 0Ð/°Ð<°tÐ<Ð<Ð<ˆàˆ:˜Ð)ð Ðå'¨¨HÑ5Ô5ð 	7Ý.ØÝ)Ô4Ñ6Ô6Ô>Ø#+¸Ð>Ð>ðñ ô ‰KˆE�4õ
 Ô$ U°Ð6Ñ6Ô6Ð6àÐs   ”3AÁAÁA)r!   rt   r=   r   r   r   )r   Ú_handle_exceptionr   rD   )r™   r˜   s    @r"   rk   rk   ´   sT   ø€ Ý 0Ô BÐåÕ 1Ð3LÑMÔMðð ð ð ð ñ NÔMðð: *IÕÔ&Ð&Ð&r#   c            	      óf   ‡— t           j        Š	 	 	 ddddddt          ddfˆfd„} | t           _        d S )	NFÚ
middlewarer   Úindependent_middlewareÚasgir   c                 ó¼   •— |r ‰| ||¦  «        S t          j        ¦   «                              t          ¦  «        }|�t	          ¦   «         g| pg z   }  ‰| |¦  «        S r   )rA   rB   rC   rD   r:   )rœ   r�   rž   rI   Úoriginal_prepare_middlewares       €r"   Ú!sentry_patched_prepare_middlewarezD_patch_prepare_middleware.<locals>.sentry_patched_prepare_middlewareÛ   sv   ø€ ð
 ð 	Yà.Ð.¨zÐ;QÐSWÑXÔXÐXå Ô+Ñ-Ô-×=Ò=Õ>OÑPÔPˆØÐ"Ý0Ñ2Ô2Ð3°zÐ7GÀRÑHˆJð +Ð*¨:Ð7MÑNÔNÐNr#   )NFF)Úfalcon_helpersÚprepare_middlewareÚbool)r¡   r    s    @r"   rl   rl   Ø   sz   ø€ Ý"0Ô"CÐð !Ø(-ØðOð OØðOà %ðOõ ðOð 
ð	Oð Oð Oð Oð Oð Oð" )J…NÔ%Ð%Ð%r#   r”   r•   zfalcon.Responsec                 óü   — t          | t          j        ¦  «        o| j        pd                     d¦  «        }t          | t          j        t          j        j        f¦  «         }|s|ot           pt          |¦  «        S )Nrb   Ú5)	r„   r@   Ú	HTTPErrorÚstatusÚ
startswithÚhttp_statusÚ
HTTPStatusÚFALCON3Ú_has_http_5xx_status)r”   r•   Úis_server_errorÚis_unhandled_errors       r"   r’   r’   ï   s†   € Ý  ¥VÔ%5Ñ6Ô6ð ¸B¼I¸OÈ×;WÒ;WØñ<ô <€Oõ (Ø
�VÔ�vÔ1Ô<Ð=ñô ð Ðð Ð1Ð1ð ÝˆÐ5Õ+¨HÑ5Ô5ðr#   c                 ó6   — | j                              d¦  «        S )Nr¦   )r¨   r©   )r•   s    r"   r­   r­     s   € ØŒ?×%Ò% cÑ*Ô*Ð*r#   r—   r   rW   r   úfalcon.Requestc                 ó^   — |j         |j        dœ}||         | d<   dt          |         i| d<   d S )NrO   Útransactionr^   Útransaction_info)rP   rQ   r
   )r—   rW   r   r\   s       r"   Ú _set_transaction_name_and_sourcerµ     sJ   € ð  Ô,Ø”ðð €Nð *Ð*;Ô<€Eˆ-ÑØ!)Õ+;Ð<MÔ+NÐ O€EÐ
ÑÐÐr#   r;   rI   r   c                 ó   ‡ ‡— dˆˆ fd„}|S )Nr—   r   r�   údict[str, Any]r   c                 óÄ   •— t          | ‰j        ‰¦  «         t          ¦   «         5  t          ‰¦  «                             | ¦  «         d d d ¦  «         n# 1 swxY w Y   | S r   )rµ   rW   r   r   Úextract_into_event)r—   r�   rI   r;   s     €€r"   Úevent_processorz6_make_request_event_processor.<locals>.event_processor  s­   ø€ Ý(¨°Ô0MÈsÑSÔSÐSå(Ñ*Ô*ð 	Bð 	BÝ" 3Ñ'Ô'×:Ò:¸5ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð ˆs   ¦#AÁAÁA)r—   r   r�   r·   r   r   r'   )r;   rI   rº   s   `` r"   rH   rH     s/   øø€ ðð ð ð ð ð ð ð Ðr#   r5   )r;   r±   rI   rD   r   r   );Útypingr   rA   Úsentry_sdk.constsr   Úsentry_sdk.integrationsr   r   r   Ú$sentry_sdk.integrations._wsgi_commonr   Úsentry_sdk.integrations.wsgir	   Úsentry_sdk.tracingr
   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   r   r   Úsentry_sdk._typesr   r   r@   r   ri   ÚImportErrorÚfalcon.app_helpersÚapp_helpersr¢   ÚAppr   r¬   Úfalcon.api_helpersÚapi_helpersÚAPIr   Ú__annotations__Úfalcon.requestr   r   r:   re   rD   rj   rk   rl   r…   r¤   r’   r­   rq   rµ   rH   r'   r#   r"   ú<module>rÍ      sú  ðØ  Ð  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ AÐ AÐ AÐ AÐ AÐ AØ =Ð =Ð =Ð =Ð =Ð =Ø /Ð /Ð /Ð /Ð /Ð /Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð 8Ø*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*à7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ð
/Ø€M€M€MØ4Ð4Ð4Ð4Ð4Ð4Ð4øØð /ð /ð /Ø
ˆ,Ð-Ñ
.Ô
.Ð.ð/øøøðØÐÐÐàÔ'€NØ”zÐØ€G€GøØð ð ð ØÐÐÐàÔ'€NØ”zÐØ€G€G€Gðøøøð %)€Ð!Ð (Ð (Ñ (Ø
ð 
Ø	$Ð	$Ñ	&Ô	&ð 
ð 
ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð'ð 'ð 'ð 'ð 'Ð-ñ 'ô 'ð 'ðT#6ð #6ð #6ð #6ð #6ñ #6ô #6ð #6ðL 4Ð ð$ð $ð $ð $ð $˜ñ $ô $ð $ð08ð 8ð 8ð 8ð(!Ið !Ið !Ið !IðHJð Jð Jð Jð. Yð Ð:Kð ÐPTð ð ð ð ð$+Ð#4ð +¸ð +ð +ð +ð +ðPØðPØ'*ðPØ5EðPà	ðPð Pð Pð PðØ	ðØ(;ðàðð ð ð ð ð s0   Á
A  Á A1Á5B
 Â
B&Â%B&Â<CÃCÃC