<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</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   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__
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 )Nr6   )getattrr   r5   __exit__)r9   r:   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   r5   requestr   appr7   Zadd_event_processor_make_request_event_processor)senderr:   r;   integrationweak_requestrC   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   )rB   r$   r&   r   r   r   envn   s    zFlaskRequestExtractor.envc                 C   s   | j jS r   )rB   cookiesr&   r   r   r   rJ   r   s    zFlaskRequestExtractor.cookiesc                 C   s   | j jS r   )rB   datar&   r   r   r   raw_datav   s    zFlaskRequestExtractor.raw_datac                 C   s   | j jS r   )rB   formr&   r   r   r   rM   z   s    zFlaskRequestExtractor.formc                 C   s   | j jS r   )rB   filesr&   r   r   r   rN   ~   s    zFlaskRequestExtractor.filesc                 C   s   | j jS r   )rB   is_jsonr&   r   r   r   rO      s    zFlaskRequestExtractor.is_jsonc                 C   s
   | j  S r   )rB   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/   r0   r1   rI   rJ   rL   rM   rN   rO   rP   rR   r   r   r   r   rH   m   s   rH   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 rt  t	|  W 5 Q R X | S )Nr   Ztransactionr   )
r   Zurl_ruler   Zrule	Exceptionr   rH   Zextract_into_eventr   _add_user_to_event)eventhintrB   rF   rG   r   r   inner   s     

z,_make_request_event_processor.<locals>.innerr   )rC   rG   rF   rX   r   rW   r   rD      s    rD   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)rV   )r   r"   r#   r   r   ZclientoptionsZcapture_event)rE   	exceptionr:   r;   rU   rV   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^   rS   r_   )rU   r\   Z	user_infor   r   r   rT      s&    	rT   )+
__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AnyDictZImmutableTypeConversionDictZImmutableMultiDictZFileStorageUnionCallabler`   ImportErrorr   r
   r   r   r   Zflask.signalsr   r   r   r   r   r)   r*   r+   rH   rD   r,   rT   r   r   r   r   <module>   s(   
%  