
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    „á§\  ã                   @   sâ   d dl mZ d dlZd dlZd dl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 d dlmZ d d	lmZ d d
lmZ e eddƒr¢dd„ Z!nd dl"m!Z! G dd„ deƒZ#dd„ Z$G dd„ deƒZ%dd„ Z&dS )é    )Úabsolute_importN)ÚHTTPException)ÚRequest)ÚHubÚ_should_send_default_pii)Úcapture_internal_exceptionsÚevent_from_exception)Úreraise)ÚIntegration)ÚRequestExtractor)ÚSentryWsgiMiddlewareÚauthenticated_useridc                 C   s   | j S ©N©r   )Úrequest© r   úP/opt/alt/python38/lib/python3.8/site-packages/sentry_sdk/integrations/pyramid.pyr   !   s    r   c                   @   s*   e Zd ZdZdZddd„Zedd„ ƒZdS )	ÚPyramidIntegrationÚpyramidNÚ
route_namec                 C   s&   d}||krt d||f ƒ‚|| _d S )N)r   Úroute_patternz7Invalid value for transaction_style: %s (must be in %s))Ú
ValueErrorÚtransaction_style)Úselfr   ZTRANSACTION_STYLE_VALUESr   r   r   Ú__init__0   s    ÿÿzPyramidIntegration.__init__c                     s@   ddl m}  | j‰ ‡ fdd„}|| _| j‰‡fdd„}|| _d S )Nr   )ÚRouterc              	      sš   t j}| t¡}|d kr*ˆ | |f|ž|ŽS | ¡ �}| tt |¡|ƒ¡ W 5 Q R X zˆ | |f|ž|ŽW S  t	k
r”   t
 ¡ }t|ƒ t|Ž  Y nX d S r   )r   ÚcurrentÚget_integrationr   Zconfigure_scopeZadd_event_processorÚ_make_event_processorÚweakrefÚrefÚ	ExceptionÚsysÚexc_infoÚ_capture_exceptionr	   )r   r   ÚargsÚkwargsÚhubÚintegrationZscoper#   )Úold_handle_requestr   r   Úsentry_patched_handle_requestA   s    

ÿzDPyramidIntegration.setup_once.<locals>.sentry_patched_handle_requestc                    s<   t j}| t¡}|d kr$ˆˆ ||ƒS t‡‡ fdd„ƒ||ƒS )Nc                     s   ˆ ˆf| ž|ŽS r   r   )ÚaÚkw)Úold_wsgi_callr   r   r   Ú<lambda>_   ó    zQPyramidIntegration.setup_once.<locals>.sentry_patched_wsgi_call.<locals>.<lambda>)r   r   r   r   r   )r   ÚenvironZstart_responser'   r(   )r-   ©r   r   Úsentry_patched_wsgi_callX   s    
 ÿz?PyramidIntegration.setup_once.<locals>.sentry_patched_wsgi_call)Zpyramid.routerr   Zhandle_requestÚ__call__)r   r*   r2   r   )r)   r-   r   Ú
setup_once:   s    zPyramidIntegration.setup_once)r   )Ú__name__Ú
__module__Ú__qualname__Ú
identifierr   r   Ústaticmethodr4   r   r   r   r   r   +   s
   

r   c                 K   sd   | d d kst | d tƒrd S tj}| t¡d kr6d S t| |jjdddœd�\}}|j	||d� d S )Nr   r   F)ÚtypeZhandled)Zclient_optionsZ	mechanism)Úhint)
Ú
issubclassr   r   r   r   r   r   ZclientÚoptionsZcapture_event)r#   r&   r'   Úeventr;   r   r   r   r$   f   s    ý
r$   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   s   | j jS r   )r   Zpath_urlr1   r   r   r   Úurlw   s    zPyramidRequestExtractor.urlc                 C   s   | j jS r   )r   r0   r1   r   r   r   Úenvz   s    zPyramidRequestExtractor.envc                 C   s   | j jS r   )r   Úcookiesr1   r   r   r   rB   ~   s    zPyramidRequestExtractor.cookiesc                 C   s   | j jS r   )r   Útextr1   r   r   r   Úraw_data‚   s    z PyramidRequestExtractor.raw_datac                 C   s   dd„ | j j ¡ D ƒS )Nc                 S   s"   i | ]\}}t |d dƒs||“qS ©ÚfilenameN©Úgetattr©Ú.0ÚkeyÚvaluer   r   r   Ú
<dictcomp>ˆ   s   þ z0PyramidRequestExtractor.form.<locals>.<dictcomp>©r   ZPOSTÚitemsr1   r   r   r   Úform†   s    
þzPyramidRequestExtractor.formc                 C   s   dd„ | j j ¡ D ƒS )Nc                 S   s"   i | ]\}}t |d dƒr||“qS rE   rG   rI   r   r   r   rM   �   s   þ z1PyramidRequestExtractor.files.<locals>.<dictcomp>rN   r1   r   r   r   ÚfilesŽ   s    
þzPyramidRequestExtractor.filesc                 C   s4   |j }zt | ¡ ¡jW S  tk
r.   Y dS X d S )Nr   )ÚfileÚosÚfstatÚfilenoÚst_sizer!   )r   ZpostdatarR   r   r   r   Úsize_of_file–   s
    z$PyramidRequestExtractor.size_of_fileN)
r5   r6   r7   r@   rA   rB   rD   rP   rQ   rW   r   r   r   r   r?   v   s   r?   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ƒ � |  	di ¡}t
|ƒ|d< W 5 Q R X | S )Nr   Ztransactionr   ÚuserÚid)r   Zmatched_routeÚnameÚpatternr!   r   r?   Zextract_into_eventr   Ú
setdefaultr   )r>   r;   r   Z	user_info©r(   Úweak_requestr   r   Úevent_processor¡   s"    

z._make_event_processor.<locals>.event_processorr   )r^   r(   r_   r   r]   r   r   Ÿ   s    r   )'Ú
__future__r   rS   r"   r   Zpyramid.httpexceptionsr   Zpyramid.requestr   Zsentry_sdk.hubr   r   Zsentry_sdk.utilsr   r   Zsentry_sdk._compatr	   Zsentry_sdk.integrationsr
   Z$sentry_sdk.integrations._wsgi_commonr   Zsentry_sdk.integrations.wsgir   ZResponseZAnyZ_ScopedResponseÚCallableÚDictÚOptionalZRequestCookiesZcgi_FieldStorageZExcInforH   r   Zpyramid.securityr   r$   r?   r   r   r   r   r   Ú<module>   s$   
;)