o
    ٰi(                     @   s  d dl Z d dl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 d dlmZ d dlmZmZmZmZ zd dlmZ d d	lmZ W n eyY   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)m*Z* e+eddrd1ddZ,nd dl-m,Z, dZ.G dd deZ/ee/d2d"d#Z0d$d%d&e1ddddfd'd(Z2G d)d* d*e	Z3	+	,	-			.d3d/d0Z4dS )4    N)IntegrationDidNotEnable)RequestExtractor)SentryWsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionreraise)HTTPException)RequestzPyramid not installed)TYPE_CHECKING)Response)Any)_ScopedResponse)Callable)Dict)Optional)RequestCookies)_FieldStorageWithFile)ExcInfo)EventEventProcessorauthenticated_useridrequestr   returnOptional[Any]c                 C   s   | j S Nr   )r    r    S/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/integrations/pyramid.pyr   +   s   r   
route_nameroute_patternc                   @   s@   e Zd ZdZde ZdZddeddfdd	Zedd
dZ	dS )PyramidIntegrationpyramidz
auto.http. r#   transaction_styler   Nc                 C   s"   |t vrtd|t f || _d S )Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES
ValueErrorr(   )selfr(   r    r    r!   __init__<   s   
zPyramidIntegration.__init__c                     s   ddl m}  | j t 											
d fdd}|| _ttdr<tj									dfdd}|t_| jj	t
t									dfdd}|| j_	d S )Nr   )routerregistryr   r   r   argskwargsr   r   c                    sv   t  t}|d u r | |g|R i |S tt  |j| t  }|t	t
||  | |g|R i |S r   )
sentry_sdk
get_clientget_integrationr%    _set_transaction_name_and_sourceget_current_scoper(   get_isolation_scopeadd_event_processor_make_event_processorweakrefref)r.   r   r/   r0   integrationscope)old_call_viewr    r!   sentry_patched_call_viewJ   s   z?PyramidIntegration.setup_once.<locals>.sentry_patched_call_viewinvoke_exception_viewr+   c                    sP    | g|R i |}| j r&t| j r&|jdkr&t td ur&t| j  |S )Ni  )exc_infoall
status_intr1   r2   r3   r%   _capture_exception)r+   r/   r0   rv)old_invoke_exception_viewr    r!   $sentry_patched_invoke_exception_viewa   s   

zKPyramidIntegration.setup_once.<locals>.sentry_patched_invoke_exception_viewenvironDict[str, str]start_responseCallable[..., Any]r   c                    s4   						d
 fdd}t |tjd	}|||S )NrG   Dict[str, Any]rI   rJ   r   r   c                    s<   z | |W S  t y   t }t| t|  Y d S w r   )	Exceptionsysr@   rC   r   )rG   rI   einfo)old_wsgi_callr+   r    r!   sentry_patched_inner_wsgi_cally   s   zgPyramidIntegration.setup_once.<locals>.sentry_patched_wsgi_call.<locals>.sentry_patched_inner_wsgi_call)span_origin)rG   rK   rI   rJ   r   r   )r   r%   origin)r+   rG   rI   rP   
middleware)rO   r+   r!   sentry_patched_wsgi_callu   s   

z?PyramidIntegration.setup_once.<locals>.sentry_patched_wsgi_call)
r.   r   r   r   r/   r   r0   r   r   r   )r+   r   r/   r   r0   r   r   r   )r+   r   rG   rH   rI   rJ   r   r   )r&   r-   
_call_view	functoolswrapshasattrr   r?   Router__call__r	   r%   )r-   r>   rF   rU   r    )r=   rE   rO   r!   
setup_onceD   sN   
zPyramidIntegration.setup_once)r#   )r   N)
__name__
__module____qualname__
identifierrR   r(   strr,   staticmethodr\   r    r    r    r!   r%   6   s    
r%   r@   r   c                 C   sN   | d d u st | d trd S t| t jdddd\}}tj||d d S )Nr   r&   F)typehandled)client_options	mechanism)hint)
issubclassr   r
   r1   r2   optionscapture_event)r@   eventrg   r    r    r!   rC      s   
rC   r<   zsentry_sdk.Scoper(   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   rL   )r<   r(   r   name_for_styler    r    r!   r4      s   r4   c                   @   sb   e Zd ZdefddZdddZddd	Zdefd
dZdddZdddZ	ddde
fddZdS )PyramidRequestExtractorr   c                 C      | j jS r   )r   path_urlrT   r    r    r!   url      zPyramidRequestExtractor.urlrH   c                 C   rs   r   )r   rG   rT   r    r    r!   env   rv   zPyramidRequestExtractor.envr   c                 C   rs   r   )r   cookiesrT   r    r    r!   rx      rv   zPyramidRequestExtractor.cookiesc                 C   rs   r   )r   textrT   r    r    r!   raw_data   rv   z PyramidRequestExtractor.raw_datac                 C      dd | 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   POSTitemsrT   r    r    r!   form      
zPyramidRequestExtractor.form Dict[str, _FieldStorageWithFile]c                 C   r{   )Nc                 S   s"   i | ]\}}t |d dr||qS r|   r~   r   r    r    r!   r      r   z1PyramidRequestExtractor.files.<locals>.<dictcomp>r   rT   r    r    r!   files   r   zPyramidRequestExtractor.filespostdatar   c                 C   s.   |j }z	t| jW S  ty   Y dS w )Nr   )fileosfstatfilenost_sizerL   )r+   r   r   r    r    r!   size_of_file   s   z$PyramidRequestExtractor.size_of_fileN)r   rH   )r   r   )r   r   )r]   r^   r_   ra   ru   rw   rx   rz   r   r   intr   r    r    r    r!   rr      s    



rr   weak_requestCallable[[], Request]r;   r   c                    s   d fdd}|S )	Nrk   r   rg   rK   r   c                    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   rr   extract_into_eventr   
setdefaultr   )rk   rg   r   	user_infor   r    r!   pyramid_event_processor   s   
z6_make_event_processor.<locals>.pyramid_event_processor)rk   r   rg   rK   r   r   r    )r   r;   r   r    r   r!   r8      s   r8   )r   r   r   r   )r@   r   r   N)r   r   r;   r%   r   r   )5rW   r   rM   r9   r1   sentry_sdk.integrationsr   r   $sentry_sdk.integrations._wsgi_commonr   sentry_sdk.integrations.wsgir   sentry_sdk.scoper   sentry_sdk.tracingr   sentry_sdk.utilsr   r	   r
   r   pyramid.httpexceptionsr   pyramid.requestr   ImportErrortypingr   pyramid.responser   r   r   r   r   r   webob.cookiesr   webob.requestr   r   sentry_sdk._typesr   r   r   r   pyramid.securityr)   r%   rC   ra   r4   rr   r8   r    r    r    r!   <module>   sj    V
#