o
    h                     @   s  d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dl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mZ zd dlmZ d dlmZ W n eyc   edw d dlmZ erd dl 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' d dl(m)Z) d dl*m+Z+ d dlm,Z, d dlm-Z- e.eddrdd Z/nd dl0m/Z/ dZ1G dd deZ2dd  Z3d!d" Z4G d#d$ d$eZ5d%d& Z6dS )'    )absolute_importN)Hub_should_send_default_pii)Scope)SOURCE_FOR_STYLE)capture_internal_exceptionsevent_from_exception)reraise	iteritems)IntegrationDidNotEnable)RequestExtractor)SentryWsgiMiddleware)HTTPException)RequestzPyramid not installed)TYPE_CHECKING)Response)Any)_ScopedResponse)Callable)Dict)Optional)RequestCookies)cgi_FieldStorage)ExcInfo)EventProcessorauthenticated_useridc                 C   s   | j S Nr   )request r    b/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/sentry_sdk/integrations/pyramid.pyr   ,   s   r   
route_nameroute_patternc                   @   s*   e Zd ZdZdZd	ddZedd ZdS )
PyramidIntegrationpyramid r#   c                 C   s"   |t vrtd|t f || _d S )Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES
ValueErrortransaction_style)selfr*   r    r    r!   __init__=   s   
zPyramidIntegration.__init__c                     sf   ddl m}  | j  fdd}|| _ttdr#tjfdd}|t_| jjfdd	}|| j_d S )
Nr   )routerc                    s|   t j}|t}|d ur2| }t||j| |tt	
|| W d    n1 s-w   Y   | |g|R i |S r   )r   currentget_integrationr%   configure_scope _set_transaction_name_and_sourcer*   add_event_processor_make_event_processorweakrefref)registryr   argskwargshubintegrationscope)old_call_viewr    r!   sentry_patched_call_viewM   s   

z?PyramidIntegration.setup_once.<locals>.sentry_patched_call_viewinvoke_exception_viewc                    sN    | g|R i |}| j r%t| j r%|jdkr%tjtd ur%t| j  |S )Ni  )exc_infoall
status_intr   r.   r/   r%   _capture_exception)r+   r7   r8   rv)old_invoke_exception_viewr    r!   $sentry_patched_invoke_exception_viewb   s   

zKPyramidIntegration.setup_once.<locals>.sentry_patched_invoke_exception_viewc                    s@   t j}|t}|d u r ||S  fdd}t|||S )Nc                    s<   z | |W S  t y   t }t| t|  Y d S w r   )	Exceptionsysr?   rB   r	   )environstart_responseeinfo)old_wsgi_callr+   r    r!   sentry_patched_inner_wsgi_call{   s   zgPyramidIntegration.setup_once.<locals>.sentry_patched_wsgi_call.<locals>.sentry_patched_inner_wsgi_call)r   r.   r/   r%   r   )r+   rH   rI   r9   r:   rL   )rK   r+   r!   sentry_patched_wsgi_callt   s   
	z?PyramidIntegration.setup_once.<locals>.sentry_patched_wsgi_call)r&   r-   
_call_viewhasattrr   r>   Router__call__)r-   r=   rE   rN   r    )r<   rD   rK   r!   
setup_onceF   s   
zPyramidIntegration.setup_onceN)r#   )__name__
__module____qualname__
identifierr*   r,   staticmethodrS   r    r    r    r!   r%   8   s    
	r%   c                 C   sh   | d d u st | d trd S tj}|td u rd S |j}t| |jdddd\}}|j	||d d S )Nr   r&   F)typehandled)client_options	mechanism)hint)

issubclassr   r   r.   r/   r%   clientr   optionscapture_event)r?   r9   r_   eventr]   r    r    r!   rB      s   
rB   c                 C   sD   z|j j|j jd}| j|| t| d W d S  ty!   Y d S w )Nr"   )source)matched_routenamepatternset_transaction_namer   rF   )r;   r*   r   name_for_styler    r    r!   r1      s   r1   c                   @   sD   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S )PyramidRequestExtractorc                 C      | j jS r   )r   path_urlrM   r    r    r!   url      zPyramidRequestExtractor.urlc                 C   rj   r   )r   rH   rM   r    r    r!   env   rm   zPyramidRequestExtractor.envc                 C   rj   r   )r   cookiesrM   r    r    r!   ro      rm   zPyramidRequestExtractor.cookiesc                 C   rj   r   )r   textrM   r    r    r!   raw_data   rm   z PyramidRequestExtractor.raw_datac                 C      dd t | jjD S )Nc                 S   s"   i | ]\}}t |d ds||qS filenameNgetattr.0keyvaluer    r    r!   
<dictcomp>       
z0PyramidRequestExtractor.form.<locals>.<dictcomp>r
   r   POSTrM   r    r    r!   form      
zPyramidRequestExtractor.formc                 C   rr   )Nc                 S   s"   i | ]\}}t |d dr||qS rs   ru   rw   r    r    r!   r{      r|   z1PyramidRequestExtractor.files.<locals>.<dictcomp>r}   rM   r    r    r!   files   r   zPyramidRequestExtractor.filesc                 C   s.   |j }z	t| jW S  ty   Y dS w )Nr   )fileosfstatfilenost_sizerF   )r+   postdatar   r    r    r!   size_of_file   s   z$PyramidRequestExtractor.size_of_fileN)
rT   rU   rV   rl   rn   ro   rq   r   r   r   r    r    r    r!   ri      s    ri   c                    s    fdd}|S )Nc                    s     }|d u r	| S t   t||  W d    n1 sw   Y  t rHt   | di }|dt| W d    | S 1 sCw   Y  | S )Nuserid)r   ri   extract_into_eventr   
setdefaultr   )rb   r]   r   	user_infoweak_requestr    r!   event_processor   s   
z._make_event_processor.<locals>.event_processorr    )r   r:   r   r    r   r!   r3      s   r3   )7
__future__r   r   rG   r4   sentry_sdk.hubr   r   sentry_sdk.scoper   sentry_sdk.tracingr   sentry_sdk.utilsr   r   sentry_sdk._compatr	   r
   sentry_sdk.integrationsr   r   $sentry_sdk.integrations._wsgi_commonr   sentry_sdk.integrations.wsgir   pyramid.httpexceptionsr   pyramid.requestr   ImportErrorsentry_sdk._typesr   pyramid.responser   typingr   r   r   r   r   webob.cookiesr   webob.compatr   r   r   rv   r   pyramid.securityr(   r%   rB   r1   ri   r3   r    r    r    r!   <module>   sN    
S*