
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    „á§\h  ã                   @   s  d dl mZ d dl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 d dlmZ zd dlZW n ek
r|   dZY nX d dlmZmZmZmZ d d	lmZm Z m!Z!m"Z" G d
d„ de
ƒZ#dd„ Z$dd„ Z%dd„ Z&G dd„ deƒZ'dd„ Z(dd„ Z)dd„ Z*dS )é    )Úabsolute_importN)ÚHubÚ_should_send_default_pii)Úcapture_internal_exceptionsÚevent_from_exception)ÚIntegration)ÚSentryWsgiMiddleware)ÚRequestExtractor)ÚRequestÚFlaskÚ_request_ctx_stackÚ_app_ctx_stack)Úappcontext_pushedÚappcontext_tearing_downÚgot_request_exceptionÚrequest_startedc                   @   s*   e Zd ZdZdZddd„Zedd„ ƒZdS )	ÚFlaskIntegrationÚflaskNÚendpointc                 C   s&   d}||krt d||f ƒ‚|| _d S )N)r   Úurlz7Invalid value for transaction_style: %s (must be in %s))Ú
ValueErrorÚtransaction_style)Úselfr   ZTRANSACTION_STYLE_VALUES© r   úN/opt/alt/python38/lib/python3.8/site-packages/sentry_sdk/integrations/flask.pyÚ__init__(   s    ÿÿzFlaskIntegration.__init__c                     sD   t  t¡ t t¡ t t¡ t t¡ t	j
‰ ‡ fdd„} | t	_
d S )Nc                    s4   t j t¡d krˆˆ ||ƒS t‡‡ fdd„ƒ||ƒS )Nc                     s   ˆ ˆf| ž|ŽS ©Nr   )ÚaÚkw)Úold_appr   r   r   Ú<lambda>A   ó    zNFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>)r   ÚcurrentÚget_integrationr   r   )r   ÚenvironZstart_response©r   ©r   r   Úsentry_patched_wsgi_app<   s     ÿz<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app)r   ZconnectÚ_push_appctxr   Ú_pop_appctxr   Ú_request_startedr   Ú_capture_exceptionr   Ú__call__)r'   r   r%   r   Ú
setup_once2   s    



	zFlaskIntegration.setup_once)r   )Ú__name__Ú
__module__Ú__qualname__Z
identifierr   r   Ústaticmethodr-   r   r   r   r   r   #   s
   

r   c               	   O   sJ   t j}| t¡d k	rF| ¡ }| ¡  |tj_| 	¡ �}d|_
W 5 Q R X d S )Nr   )r   r"   r#   r   Z
push_scopeÚ	__enter__r   ÚtopÚsentry_sdk_scope_managerÚconfigure_scopeÚ_name)ÚargsÚkwargsÚhubÚscope_managerÚscoper   r   r   r(   H   s    
r(   c                  O   s(   t tjdd ƒ}|d k	r$| d d d ¡ d S )Nr4   )Úgetattrr   r3   Ú__exit__)r7   r8   r:   r   r   r   r)   U   s    r)   c              	   K   s\   t j}| t¡}|d krd S t tjj¡}t	jj
}| ¡ �}| t|||ƒ¡ W 5 Q R X d S r   )r   r"   r#   r   ÚweakrefÚrefr   r3   Úrequestr   Úappr5   Zadd_event_processorÚ_make_request_event_processor)Úsenderr8   r9   ÚintegrationÚweak_requestrA   r;   r   r   r   r*   \   s    

  ÿÿr*   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚFlaskRequestExtractorc                 C   s   | j jS r   )r@   r$   r&   r   r   r   Úenvn   s    zFlaskRequestExtractor.envc                 C   s   | j jS r   )r@   Úcookiesr&   r   r   r   rH   r   s    zFlaskRequestExtractor.cookiesc                 C   s   | j jS r   )r@   Údatar&   r   r   r   Úraw_datav   s    zFlaskRequestExtractor.raw_datac                 C   s   | j jS r   )r@   Úformr&   r   r   r   rK   z   s    zFlaskRequestExtractor.formc                 C   s   | j jS r   )r@   Úfilesr&   r   r   r   rL   ~   s    zFlaskRequestExtractor.filesc                 C   s   | j jS r   )r@   Úis_jsonr&   r   r   r   rM   ‚   s    zFlaskRequestExtractor.is_jsonc                 C   s
   | j  ¡ S r   )r@   Zget_jsonr&   r   r   r   Újson…   s    zFlaskRequestExtractor.jsonc                 C   s   |j S r   )Zcontent_length)r   Úfiler   r   r   Úsize_of_fileˆ   s    z"FlaskRequestExtractor.size_of_fileN)r.   r/   r0   rG   rH   rJ   rK   rL   rM   rN   rP   r   r   r   r   rF   m   s   rF   c                    s   ‡ ‡fdd„}|S )Nc              	      sž   ˆƒ }|d kr| S z2ˆ j dkr,|jj| d< nˆ j dkrB|jj| d< W n tk
rX   Y nX tƒ � t|ƒ | ¡ W 5 Q R X tƒ rštƒ � t	| ƒ W 5 Q R X | S )Nr   Ztransactionr   )
r   Zurl_ruler   ZruleÚ	Exceptionr   rF   Zextract_into_eventr   Ú_add_user_to_event)ÚeventÚhintr@   ©rD   rE   r   r   Úinner�   s     

z,_make_request_event_processor.<locals>.innerr   )rA   rE   rD   rV   r   rU   r   rB   �   s    rB   c                 K   sF   t j}| t¡d krd S t||jjdddœd�\}}|j||d� d S )Nr   F)ÚtypeZhandled)Zclient_optionsZ	mechanism)rT   )r   r"   r#   r   r   ZclientÚoptionsZcapture_event)rC   Z	exceptionr8   r9   rS   rT   r   r   r   r+   ­   s    ý
r+   c              	   C   s¶   t d krd S t j}|d krd S tƒ �ˆ |  di ¡}z| ¡ |d< W n tk
rV   Y nX z|j |d< |d< W n tk
r‚   Y nX z|j|d< W n tk
r¦   Y nX W 5 Q R X d S )NÚuserÚidÚemailÚusername)	Úflask_loginZcurrent_userr   Ú
setdefaultZget_idÚAttributeErrorr[   rQ   r\   )rS   rY   Z	user_infor   r   r   rR   »   s&    	rR   )+Z
__future__r   r>   Zsentry_sdk.hubr   r   Zsentry_sdk.utilsr   r   Zsentry_sdk.integrationsr   Zsentry_sdk.integrations.wsgir   Z$sentry_sdk.integrations._wsgi_commonr	   Z_ScopedResponseZAnyZDictZImmutableTypeConversionDictZImmutableMultiDictZFileStorageZUnionÚCallabler]   ÚImportErrorr   r
   r   r   r   Zflask.signalsr   r   r   r   r   r(   r)   r*   rF   rB   r+   rR   r   r   r   r   Ú<module>   s(   
%  