§
    xÅj�&  ã                   ór  — 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 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mZ er$d d
l mZmZmZ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$Z$n# e%$ r dZ$Y nw xY w	 d dl&m'Z'm(Z( d dl&m)Z* d dl+m,Z,m-Z-m.Z. d dl/m0Z0 n# e%$ r  ed¦  «        ‚w xY w	 d dl1Z1n# e%$ r  ed¦  «        ‚w xY wdZ2 G d„ de¦  «        Z3	 	 	 	 	 	 	 	 	 	 d7d„Z4d d!d"e5d#d$ddfd%„Z6d8d(„Z7 G d)„ d*e¦  «        Z8	 	 	 	 	 	 	 	 d9d.„Z9 ee3¦  «        	 	 	 	 	 	 	 	 d:d1„¦   «         Z:d;d3„Z;d<d6„Z<dS )=é    )ÚTYPE_CHECKINGN)ÚSPANDATA)ÚDidNotEnableÚIntegrationÚ_check_minimum_version)ÚDEFAULT_HTTP_METHODS_TO_CAPTUREÚRequestExtractor)ÚSentryWsgiMiddleware)Úshould_send_default_pii)ÚSOURCE_FOR_STYLE)Úcapture_internal_exceptionsÚensure_integration_enabledÚevent_from_exceptionÚhas_data_collection_enabledÚpackage_version)ÚAnyÚCallableÚDictÚOptionalÚUnion)ÚFileStorageÚImmutableMultiDict)ÚEventÚEventProcessor)Ú_ScopedResponse)ÚFlaskÚRequest)Úrequest)Úbefore_render_templateÚgot_request_exceptionÚrequest_started)ÚMarkupzFlask is not installedzblinker is not installed)ÚendpointÚurlc                   óR   — e Zd ZdZde› �ZdZdefdedddd	fd
„Ze	dd„¦   «         Z
d	S )ÚFlaskIntegrationÚflaskz
auto.http.Ú r#   Útransaction_styleÚhttp_methods_to_captureztuple[str, ...]ÚreturnNc                 ó´   — |t           vrt          d|›dt           ›d�¦  «        ‚|| _        t          t	          t
          j        |¦  «        ¦  «        | _        d S )Nz%Invalid value for transaction_style: z (must be in ú))ÚTRANSACTION_STYLE_VALUESÚ
ValueErrorr)   ÚtupleÚmapÚstrÚupperr*   )Úselfr)   r*   s      úNC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/flask.pyÚ__init__zFlaskIntegration.__init__=   si   € ð
 Õ$<Ð<Ð<Ý�*à$Ð$Ð$Õ&>Ð&>Ð&>ð@ñô ð ð "3ˆÔÝ',­Sµ´Ð<SÑ-TÔ-TÑ'UÔ'UˆÔ$Ð$Ð$ó    c                  ó–  ‡— 	 ddl m}  t          | k    rt          d¦  «        ‚n# t          $ r Y nw xY wt          d¦  «        }t          t          |¦  «         t          j	        t          ¦  «         t          j	        t          ¦  «         t          j	        t          ¦  «         t          j        Š	 	 	 	 	 	 	 	 dˆfd„}|t          _        d S )Nr   )ÚQuartz?This is not a Flask app but rather Quart pretending to be Flaskr'   r4   r   ÚenvironúDict[str, str]Ústart_responseúCallable[..., Any]r+   r   c                 óî   •‡ — t          j        ¦   «                              t          ¦  «        }|€ ‰‰ ||¦  «        S t	          ˆˆ fd„t          j        |r|j        nt          ¬¦  «        } |||¦  «        S )Nc                  ó   •—  ‰‰g| ¢R i |¤ŽS ©N© )ÚaÚkwÚold_appr4   s     €€r5   ú<lambda>zNFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>i   s!   ø€   ¨Ð!8°Ð!8Ð!8Ð!8°RÐ!8Ð!8€ r7   )Úspan_originr*   )Ú
sentry_sdkÚ
get_clientÚget_integrationr&   r
   Úoriginr*   r   )r4   r:   r<   ÚintegrationÚ
middlewarerD   s   `    €r5   Úsentry_patched_wsgi_appz<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_appa   s�   øø€ õ %Ô/Ñ1Ô1×AÒAÕBRÑSÔSˆKØÐ"Ø�w˜t W¨nÑ=Ô=Ð=å-Ø8Ð8Ð8Ð8Ð8Ý,Ô3ð #ð9�KÔ7Ð7å8ðñ ô ˆJð �:˜g ~Ñ6Ô6Ð6r7   )r4   r   r:   r;   r<   r=   r+   r   )Úquartr9   r   r   ÚImportErrorr   r   r&   r   ÚconnectÚ_add_sentry_tracer!   Ú_request_startedr    Ú_capture_exceptionÚ__call__)r9   ÚversionrM   rD   s      @r5   Ú
setup_oncezFlaskIntegration.setup_onceJ   s	  ø€ ð
	Ø#Ð#Ð#Ð#Ð#Ð#å˜Š~ˆ~õ #ØUñô ð ð øõ ð 	ð 	ð 	ØˆDð	øøøõ " 'Ñ*Ô*ˆÝÕ/°Ñ9Ô9Ð9åÔ&Õ'8Ñ9Ô9Ð9ÝÔÕ 0Ñ1Ô1Ð1ÝÔ%Õ&8Ñ9Ô9Ð9å”.ˆð	7Øð	7Ø"2ð	7ØDXð	7àð	7ð 	7ð 	7ð 	7ð 	7ð 	7ð$ 1�Œˆˆs   ƒ $ ¤
1°1)r+   N)Ú__name__Ú
__module__Ú__qualname__Ú
identifierrJ   r)   r   r2   r6   ÚstaticmethodrV   rA   r7   r5   r&   r&   7   s‘   € € € € € Ø€JØ&˜*Ð&Ð&€FàÐð ",Ø5TðVð VàðVð "3ðVð 
ð	Vð Vð Vð Vð ð(1ð (1ð (1ñ „\ð(1ð (1ð (1r7   r&   Úsenderr   Útemplater   ÚcontextúDict[str, Any]Úextrar+   c                 óŽ   — d|v rd S t          j        ¦   «         }t          |                     ¦   «         ¦  «        }||d<   ||d<   d S )NÚsentry_traceÚsentry_trace_meta)rG   Úget_current_scoper"   Útrace_propagation_meta)r\   r]   r^   r`   ÚscopeÚ
trace_metas         r5   rQ   rQ   v   sV   € ð ˜Ð Ð ØˆåÔ(Ñ*Ô*€EÝ˜×4Ò4Ñ6Ô6Ñ7Ô7€JØ(€GˆNÑØ#-€GÐÑ Ð Ð r7   rf   zsentry_sdk.Scoper)   r   r   c                 ó¬   — 	 |j         j        |j         j        dœ}|                      ||         t          |         ¬¦  «         d S # t
          $ r Y d S w xY w)N)r$   r#   )Úsource)Úurl_ruleÚruler#   Úset_transaction_namer   Ú	Exception)rf   r)   r   Úname_for_styles       r5   Ú _set_transaction_name_and_sourcero   ‚   s„   € ð
àÔ#Ô(ØÔ(Ô1ð
ð 
ˆð 	×"Ò"ØÐ,Ô-Ý#Ð$5Ô6ð 	#ñ 	
ô 	
ð 	
ð 	
ð 	
øõ ð ð ð Øˆˆðøøøs   ‚AA Á
AÁAÚappÚkwargsc                 óž  — t          j        ¦   «         }|                     t          ¦  «        }|€d S t	          j        ¦   «         }d }	 |j        j        }n# t          $ r Y nw xY wt          j	        ¦   «         j
        }|�"|� |                     t          j        |¦  «         t          t          j	        ¦   «         |j        |¦  «         t          j        ¦   «         }t#          |j        ¦  «        r_|j        d         d         rKt'          ¦   «         5  t)          ¦   «         }|r|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   nYt-          ¦   «         rKt'          ¦   «         5  t)          ¦   «         }|r|                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t/          | ||¦  «        }	|                     |	¦  «         d S ©NÚdata_collectionÚ	user_info)rG   rH   rI   r&   Úflask_requestÚ_get_current_objectrj   rk   rm   rd   Ú_server_segment_spanÚset_attributer   Ú
HTTP_ROUTEro   r)   Úget_isolation_scoper   Úoptionsr   Ú_get_flask_user_propertiesÚset_userr   Ú_make_request_event_processorÚadd_event_processor)
rp   rq   ÚclientrK   r   Ú
route_pathÚserver_spanrf   Úuser_propertiesÚevt_processors
             r5   rR   rR   ’   sS  € ÝÔ"Ñ$Ô$€FØ×(Ò(Õ)9Ñ:Ô:€KØÐØˆåÔ/Ñ1Ô1€Gà"&€JðØÔ%Ô*ˆ
ˆ
øÝð ð ð Øˆðøøøõ Ô.Ñ0Ô0ÔE€KØÐ :Ð#9Ø×!Ò!¥(Ô"5°zÑBÔBÐBõ %ÝÔ$Ñ&Ô&¨Ô(EÀwñô ð õ Ô*Ñ,Ô,€Eå" 6¤>Ñ2Ô2ð 
0ØŒ>Ð+Ô,¨[Ô9ð 	4Ý,Ñ.Ô.ð 4ð 4Ý"<Ñ">Ô">�Ø"ð 4Ø—N’N ?Ñ3Ô3Ð3ð4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4øõ 
!Ñ	"Ô	"ð 0Ý(Ñ*Ô*ð 	0ð 	0Ý8Ñ:Ô:ˆOØð 0Ø—’˜Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0õ
 2°#°wÀÑLÔL€MØ	×Ò˜mÑ,Ô,Ð,Ð,Ð,s6   ÁA Á
A"Á!A"Ä&EÅEÅ	EÅ*&FÆF Æ#F c                   ó^   — e Zd Zdd„Zdd„Zdefd„Zdd„Zdd	„Zde	fd
„Z
dd„Zdddefd„ZdS )ÚFlaskRequestExtractorr+   r;   c                 ó   — | j         j        S r@   )r   r:   ©r4   s    r5   ÚenvzFlaskRequestExtractor.env½   ó   € ØŒ|Ô#Ð#r7   úDict[Any, Any]c                 óR   — d„ | j         j                             ¦   «         D ¦   «         S )Nc                 óz   — i | ]8\  }}|t          |t          ¦  «        rt          |¦  «        d k    r|d         n|“Œ9S )é   r   )Ú
isinstanceÚlistÚlen)Ú.0ÚkÚvs      r5   ú
<dictcomp>z1FlaskRequestExtractor.cookies.<locals>.<dictcomp>Á   sS   € ð 
ð 
ð 
á��1ð •z !¥TÑ*Ô*ÐA­s°1©v¬v¸ª{¨{ˆq�ŒtˆtÀð
ð 
ð 
r7   )r   ÚcookiesÚitemsr‰   s    r5   r—   zFlaskRequestExtractor.cookiesÀ   s4   € ð
ð 
àœÔ,×2Ò2Ñ4Ô4ð
ñ 
ô 
ð 	
r7   c                 ó4   — | j                              ¦   «         S r@   )r   Úget_datar‰   s    r5   Úraw_datazFlaskRequestExtractor.raw_dataÆ   s   € ØŒ|×$Ò$Ñ&Ô&Ð&r7   úImmutableMultiDict[str, Any]c                 ó   — | j         j        S r@   )r   Úformr‰   s    r5   rž   zFlaskRequestExtractor.formÉ   s   € ØŒ|Ô Ð r7   c                 ó   — | j         j        S r@   )r   Úfilesr‰   s    r5   r    zFlaskRequestExtractor.filesÌ   s   € ØŒ|Ô!Ð!r7   c                 ó   — | j         j        S r@   )r   Úis_jsonr‰   s    r5   r¢   zFlaskRequestExtractor.is_jsonÏ   r‹   r7   r   c                 ó8   — | j                              d¬¦  «        S )NT)Úsilent)r   Úget_jsonr‰   s    r5   ÚjsonzFlaskRequestExtractor.jsonÒ   s   € ØŒ|×$Ò$¨DÐ$Ñ1Ô1Ð1r7   Úfiler   c                 ó   — |j         S r@   )Úcontent_length)r4   r§   s     r5   Úsize_of_filez"FlaskRequestExtractor.size_of_fileÕ   s   € ØÔ"Ð"r7   N©r+   r;   )r+   rŒ   )r+   rœ   )r+   r   )rW   rX   rY   rŠ   r—   Úbytesr›   rž   r    Úboolr¢   r¦   Úintrª   rA   r7   r5   r‡   r‡   ¼   sÐ   € € € € € ð$ð $ð $ð $ð
ð 
ð 
ð 
ð'˜%ð 'ð 'ð 'ð 'ð!ð !ð !ð !ð"ð "ð "ð "ð$˜ð $ð $ð $ð $ð2ð 2ð 2ð 2ð# ð #°3ð #ð #ð #ð #ð #ð #r7   r‡   úCallable[[], Request]rK   r   c                 ó   ‡— dˆfd„}|S )NÚeventr   Úhintúdict[str, Any]r+   c                 óü  •— ‰€| S t          ¦   «         5  t          ‰¦  «                             | ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        ¦   «         j        }t          |¦  «        rD|d         d         r5t          ¦   «         5  t          | ¦  «         d d d ¦  «         n# 1 swxY w Y   nCt          ¦   «         r5t          ¦   «         5  t          | ¦  «         d d d ¦  «         n# 1 swxY w Y   | S rs   )	r   r‡   Úextract_into_eventrG   rH   r|   r   Ú_add_user_to_eventr   )r±   r²   Úclient_optionsr   s      €r5   Úinnerz,_make_request_event_processor.<locals>.innerÜ   sÇ  ø€ ð ˆ?ØˆLå(Ñ*Ô*ð 	Eð 	EÝ! 'Ñ*Ô*×=Ò=¸eÑDÔDÐDð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eõ $Ô.Ñ0Ô0Ô8ˆÝ& ~Ñ6Ô6ð 	*ØÐ/Ô0°Ô=ð .Ý0Ñ2Ô2ð .ð .Ý& uÑ-Ô-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .øå$Ñ&Ô&ð 	*Ý,Ñ.Ô.ð *ð *Ý" 5Ñ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ð ˆs5   ”#AÁAÁ
AÂB-Â-B1Â4B1ÃC1Ã1C5Ã8C5)r±   r   r²   r³   r+   r   rA   )rp   r   rK   r¸   s    `  r5   r   r   Ù   s(   ø€ ðð ð ð ð ð ð* €Lr7   Ú	exceptionú Union[ValueError, BaseException]c                 óŽ   — t          |t          j        ¦   «         j        dddœ¬¦  «        \  }}t          j        ||¬¦  «         d S )Nr'   F)ÚtypeÚhandled)r·   Ú	mechanism)r²   )r   rG   rH   r|   Úcapture_event)r\   r¹   rq   r±   r²   s        r5   rS   rS   ô   sW   € õ 'ØÝ!Ô,Ñ.Ô.Ô6Ø"¨uÐ5Ð5ðñ ô �K€Eˆ4õ Ô˜U¨Ð.Ñ.Ô.Ð.Ð.Ð.r7   r;   c                  ó"  — t           €i S t           j        } | €i S i }	 |                      ¦   «         }|�||d<   n# t          $ r Y nw xY w	 | j        �
| j        |d<   n# t
          $ r Y nw xY w	 | j        �
| j        |d<   n# t
          $ r Y nw xY w|S )NÚidÚemailÚusername)Úflask_loginÚcurrent_userÚget_idÚAttributeErrorrÂ   rm   rÃ   )ÚuserÚ
propertiesÚuser_ids      r5   r}   r}     så   € ÝÐØˆ	åÔ#€DØ€|Øˆ	à€Jð	Ø—+’+‘-”-ˆØÐØ&ˆJ�tÑøøÝð ð ð ð
 	ˆðøøøðØŒ:Ð!Ø"&¤*ˆJ�wÑøøÝð ð ð ØˆðøøøðØŒ=Ð$Ø%)¤]ˆJ�zÑ"øøÝð ð ð Øˆðøøøð Ðs3   �9 ¹
AÁAÁ
A Á
A)Á(A)Á-A? Á?
BÂBr±   r   c                 ó   — t          ¦   «         5  t          ¦   «         }|rF|                      di ¦  «        }|                     ¦   «         D ]\  }}|                     ||¦  «         Œd d d ¦  «         d S # 1 swxY w Y   d S )NrÈ   )r   r}   Ú
setdefaultr˜   )r±   r„   ru   ÚkeyÚvalues        r5   r¶   r¶   +  sÒ   € Ý	$Ñ	&Ô	&ð 1ð 1Ý4Ñ6Ô6ˆØð 	1Ø×(Ò(¨°Ñ4Ô4ˆIØ-×3Ò3Ñ5Ô5ð 1ð 1‘
��UØ×$Ò$ S¨%Ñ0Ô0Ð0Ð0ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1s   �AA3Á3A7Á:A7)
r\   r   r]   r   r^   r_   r`   r   r+   N)rp   r   rq   r   r+   N)rp   r   r   r¯   rK   r&   r+   r   )r\   r   r¹   rº   rq   r   r+   Nr«   )r±   r   r+   N)=Útypingr   rG   Úsentry_sdk.constsr   Úsentry_sdk.integrationsr   r   r   Ú$sentry_sdk.integrations._wsgi_commonr   r	   Úsentry_sdk.integrations.wsgir
   Úsentry_sdk.scoper   Úsentry_sdk.tracingr   Úsentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   Úwerkzeug.datastructuresr   r   Úsentry_sdk._typesr   r   r   rÄ   rO   r'   r   r   r   rv   Úflask.signalsr   r    r!   Ú
markupsafer"   Úblinkerr.   r&   rQ   r2   ro   rR   r‡   r   rS   r}   r¶   rA   r7   r5   ú<module>rÜ      s  ðØ  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uðð ð ð ð ð ð ð ð >Ð =Ð =Ð =Ð =Ð =Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð =Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;àGÐGÐGÐGÐGÐGÐGÐGà7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ø<Ð<Ð<Ð<Ð<Ð<ðØÐÐÐÐøØð ð ð Ø€K€K€Kðøøøð
1Ø$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø.Ð.Ð.Ð.Ð.Ð.ðð ð ð ð ð ð ð ð ð ð
 "Ð!Ð!Ð!Ð!Ð!Ð!øØð 1ð 1ð 1Ø
ˆ,Ð/Ñ
0Ô
0Ð0ð1øøøð3Ø€N€N€N€NøØð 3ð 3ð 3Ø
ˆ,Ð1Ñ
2Ô
2Ð2ð3øøøð /Ð ð<1ð <1ð <1ð <1ð <1�{ñ <1ô <1ð <1ð~	.Øð	.Ø$ð	.Ø/?ð	.ØJOð	.à	ð	.ð 	.ð 	.ð 	.ðØðØ25ðØ@Iðà	ðð ð ð ð '-ð '-ð '-ð '-ðT#ð #ð #ð #ð #Ð,ñ #ô #ð #ð:Ø	ðØ2ðØASðàðð ð ð ð6 ÐÐ,Ñ-Ô-ð	/Øð	/Ø Bð	/ØNSð	/à	ð	/ð 	/ð 	/ñ .Ô-ð	/ð'ð 'ð 'ð 'ðT1ð 1ð 1ð 1ð 1ð 1s*   Á*A/ Á/A9Á8A9Á=B ÂB-Â1B6 Â6C