o
    h$"                     @   s  d dl 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 d dlmZ er^d d	lmZmZmZmZ d d
lmZmZ d dlmZ d dlmZmZ zd dl Z W n e!yo   dZ Y nw 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, W n e!y   edw zd dl-Z-W n e!y   edw dZ.G dd deZ/dd Z0dd Z1dd Z2G dd deZ3dd Z4ee/d d! Z5d"d# Z6dS )$    N)_check_minimum_versionDidNotEnableIntegration)DEFAULT_HTTP_METHODS_TO_CAPTURERequestExtractor)SentryWsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionpackage_version)TYPE_CHECKING)AnyCallableDictUnion)EventEventProcessor)_ScopedResponse)FileStorageImmutableMultiDict)FlaskRequestrequest)before_render_templategot_request_exceptionrequest_started)MarkupzFlask is not installedzblinker is not installed)endpointurlc                   @   s8   e Zd ZdZde ZdZdefddZedd Z	d	S )
FlaskIntegrationflaskz
auto.http. r    c                 C   s4   |t vrtd|t f || _tttj|| _d S )Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES
ValueErrortransaction_styletuplemapstrupperhttp_methods_to_capture)selfr'   r,    r.   _/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/flask.py__init__:   s   zFlaskIntegration.__init__c                     s   zddl m}  t| krtdW n	 ty   Y nw td}tt| t	t
 t	t t	t tj  fdd}|t_d S )Nr   )Quartz?This is not a Flask app but rather Quart pretending to be Flaskr#   c                    sZ   t  td u r ||S t  t}t fddtj|r$|jntd}|||S )Nc                     s    g| R i |S Nr.   )akw)old_appr-   r.   r/   <lambda>h   s    zNFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>)span_originr,   )
sentry_sdk
get_clientget_integrationr"   r   originr,   r   )r-   environstart_responseintegration
middlewarer5   r-   r/   sentry_patched_wsgi_app`   s   
	z<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app)quartr1   r   r   ImportErrorr   r   r"   r   connect_add_sentry_tracer   _request_startedr   _capture_exception__call__)r1   versionrB   r.   r@   r/   
setup_onceH   s$   




zFlaskIntegration.setup_onceN)
__name__
__module____qualname__
identifierr;   r'   r   r0   staticmethodrK   r.   r.   r.   r/   r"   4   s    

r"   c                 K   s4   d|v rd S t  }t| }||d< ||d< d S )Nsentry_tracesentry_trace_meta)r8   get_current_scoper   trace_propagation_meta)sendertemplatecontextextrascope
trace_metar.   r.   r/   rF   u   s   rF   c                 C   sD   z|j j|j jd}| j|| t| d W d S  ty!   Y d S w )N)r!   r    )source)url_ruleruler    set_transaction_namer	   	Exception)rY   r'   r   name_for_styler.   r.   r/    _set_transaction_name_and_source   s   ra   c                 K   sV   t  t}|d u rd S t }tt  |j| t 	 }t
| ||}|| d S r2   )r8   r9   r:   r"   flask_request_get_current_objectra   rS   r'   get_isolation_scope_make_request_event_processoradd_event_processor)appkwargsr>   r   rY   evt_processorr.   r.   r/   rG      s   rG   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      | j jS r2   )r   r<   rA   r.   r.   r/   env      zFlaskRequestExtractor.envc                 C   s   dd | j j D S )Nc                 S   s4   i | ]\}}|t |trt|d kr|d n|qS )   r   )
isinstancelistlen).0kvr.   r.   r/   
<dictcomp>   s    "z1FlaskRequestExtractor.cookies.<locals>.<dictcomp>)r   cookiesitemsrA   r.   r.   r/   rv      s   
zFlaskRequestExtractor.cookiesc                 C   s
   | j  S r2   )r   get_datarA   r.   r.   r/   raw_data   s   
zFlaskRequestExtractor.raw_datac                 C   rk   r2   )r   formrA   r.   r.   r/   rz      rm   zFlaskRequestExtractor.formc                 C   rk   r2   )r   filesrA   r.   r.   r/   r{      rm   zFlaskRequestExtractor.filesc                 C   rk   r2   )r   is_jsonrA   r.   r.   r/   r|      rm   zFlaskRequestExtractor.is_jsonc                 C   s   | j jddS )NT)silent)r   get_jsonrA   r.   r.   r/   json   s   zFlaskRequestExtractor.jsonc                 C   s   |j S r2   )content_length)r-   filer.   r.   r/   size_of_file   s   z"FlaskRequestExtractor.size_of_fileN)rL   rM   rN   rl   rv   ry   rz   r{   r|   r   r   r.   r.   r.   r/   rj      s    rj   c                    s    fdd}|S )Nc                    sz    d u r| S t   t |  W d    n1 sw   Y  t r;t   t|  W d    | S 1 s6w   Y  | S r2   )r
   rj   extract_into_eventr   _add_user_to_event)eventhintr   r.   r/   inner   s   

z,_make_request_event_processor.<locals>.innerr.   )rg   r   r>   r   r.   r   r/   re      s   re   c                 K   s0   t |t jdddd\}}tj||d d S )Nr#   F)typehandled)client_options	mechanism)r   )r   r8   r9   optionscapture_event)rU   	exceptionrh   r   r   r.   r.   r/   rH      s   
rH   c              	   C   s   t d u rd S t j}|d u rd S t Q | di }z
|d|  W n	 ty,   Y nw z	|d|j W n	 ty?   Y nw z	|d|j W n	 tyR   Y n	w W d    d S W d    d S 1 sfw   Y  d S )Nuseridemailusername)	flask_logincurrent_userr
   
setdefaultget_idAttributeErrorr   r_   r   )r   r   	user_infor.   r.   r/   r      s4   "r   )7r8   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   typingr   r   r   r   r   sentry_sdk._typesr   r   r   werkzeug.datastructuresr   r   r   rD   r#   r   r   r   rb   flask.signalsr   r   r   
markupsafer   blinkerr%   r"   rF   ra   rG   rj   re   rH   r   r.   r.   r.   r/   <module>   sR    A%
