B
    `l3                 @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlm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mZmZmZmZmZmZmZmZmZmZ d	ZG d
d deZG dd deZG dd deZG dd de Z!dd Z"dd Z#dddZ$dZ%dS )    N)URLDecodeError)WSGIHTTPException)	Interface)get_current_request)bytes_url_unquote)get_traceback)STATIC_PATHToolbarStorageaddr_indebug_toolbar_urlget_exc_nameget_settinghexlifyloggermake_subrequestreplace_insensitiveresolve_panel_classes)z	text/htmlzapplication/xhtml+xmlc               @   s   e Zd ZdZdd ZdS )IToolbarWSGIAppz3 Marker interface for the toolbar WSGI application.c             C   s   d S )N )environZstart_responser   r   d/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pyramid_debugtoolbar/toolbar.py__call__   s    zIToolbarWSGIApp.__call__N)__name__
__module____qualname____doc__r   r   r   r   r   r      s   r   c               @   s   e Zd ZdZdS )	IPanelMapz. Marker interface for the set of known panels.N)r   r   r   r   r   r   r   r   r   #   s   r   c               @   s   e Zd Zdd ZdS )IRequestAuthorizationc             C   s   dS )z
        Toolbar per-request authorization.

        Should return bool values whether toolbar is permitted to monitor
        the provided request.

        Nr   )requestr   r   r   r   (   s    zIRequestAuthorization.__call__N)r   r   r   r   r   r   r   r   r   '   s   r   c               @   s0   e Zd Zdd Zedd Zdd Zdd Zd	S )
DebugToolbarc       	         s   g | _ g | _|| _d| _|| _d| _t|jdd}|	d  
|  fdd}x(|D ] }||}|| | j | q\W x(|D ] }||}|| | j| qW d S )N   Fpdtb_active ,c                s.   d| _ | j kr| jrd| _ n| js*d| _ d S )NFT)Z	is_activenameZhas_contentZuser_activate)
panel_inst)	activatedr   r   configure_panelJ   s
    z.DebugToolbar.__init__.<locals>.configure_panel)panelsglobal_panelsr   
status_intdefault_active_panelsvisibler   cookiesgetsplitextendappend)	selfr   panel_classesglobal_panel_classesr,   r"   r(   Zpanel_classr&   r   )r'   r   __init__3   s$    



zDebugToolbar.__init__c             C   s"   | j j| j j| j j| j j| jdS )N)hostmethodpathschemestatus_code)r   r7   r8   r9   r:   r+   )r3   r   r   r   jsonZ   s
    zDebugToolbar.jsonc             C   sZ   t |tr||j x| jD ]}|| qW x| jD ]}|| q8W || _d| _d S )NT)	
isinstancer   preparer   r)   process_responser*   responser-   )r3   r   r@   panelr   r   r   r?   d   s    
zDebugToolbar.process_responsec             C   s|   |j }t||j}t|jjdd}|td }t|r@d	|nd||d }|
|jpZd}t|td|td |_ dS )	zH
        Inject the debug toolbar iframe into an HTML response.
        button_styler#   ztoolbar/toolbar_button.csszstyle="{0}")rB   css_pathtoolbar_urlzutf-8z</body>N)bodyr   pdtb_idr   registrysettingsZ
static_urlr	   toolbar_html_templateformatencodecharsetr   r   )r3   r   r@   Zresponse_htmlrD   rB   rC   Ztoolbar_htmlr   r   r   injectq   s    

zDebugToolbar.injectN)r   r   r   r6   propertyr<   r?   rM   r   r   r   r   r    2   s   '
r    c             C   s   t | ddddS )N   FT)infoskipZshow_hidden_framesZignore_system_exceptions)r   )rP   r   r   r   process_traceback   s
    rR   c             C   sH   |  d}|d krt }t|dd d k	rDx|jjD ]}||  q2W d S )Nr   debug_toolbar)r/   r   getattrrS   r)   Zprocess_beforerender)eventr   rA   r   r   r   beforerender_subscriber   s    
rV   c       	         s  dkrt  dkrdd  |jdfdd	}|ds<S |tj}|d}t||_|jti dfd	d}t	|d
g sdd D 
|dg  |dt	|dg sdd D 
|dg  |dd|d	|d
|d|d|t|dg ttd|_	|_|dg  fdd	
fdd}|S )z- Pyramid tween factory for the debug toolbar Nc             S   s
   | | S )N)Zget_response)Zappr   r   r   r   <lambda>       z'toolbar_tween_factory.<locals>.<lambda>c                s   t  | |S )N)r   )optdefault)rH   r   r   sget   s    z#toolbar_tween_factory.<locals>.sgetenabledmax_request_history)rZ   c                s   t | | S )N)r   )ab)	panel_mapr   r   rW      rX   r)   c             S   s   g | ]\}}|s|qS r   r   ).0pgr   r   r   
<listcomp>   s    z)toolbar_tween_factory.<locals>.<listcomp>Zextra_panelsFr*   c             S   s   g | ]\}}|r|qS r   r   )ra   rb   rc   r   r   r   rd      s    Zextra_global_panelsT)i-  i.  i/  i0  intercept_excintercept_redirectsshow_on_exc_onlyhostsexclude_prefixes   Zactive_panelsc                s
    | S )Nr   )r   )	_dispatchtoolbar_appr   r   rW      rX   c          
      sh  y
| j  W n< tk
rF } zt|j|j|j|j|jW d d }~X Y nX d }| jrhd| jkrh| j	 }n| jd k	r|t
d |d kst fddD st|rr| s| S | jddrt
d | S t| ddd	} |rDzB| j}| j }|  j|d d
 7  _| j t|d d  | _ | S || _|| _ X tt| | _t| }|| _| j| }x|jD ]}||}qW zyn|| }	|	j|_| jr	rt| j|_d}
t | jd }t!| || jd }|
|| j"|j"f }#| W n t$k
r } zt |}	rtt% |_d}
t!| || jd }|
|| j"|j"f }&| |}	|	j|_|'| |	 |(| |	 || _&t% | _|	S d}
&|
|| j"f   W d d }~X Y nX 
r,|	jkr,|	j)}|	j}|r,|t*|d}t!| |d|}|j+}d |	_)||	_+d|	_|'| |	 sV|	j,t-krV|(| |	 |	S W d | `X d S )Nr$   ar  pyramid_debugtoolbar has detected a broken proxy that modified REMOTE_ADDR with an invalid value and is cowardly going to refuse to serve the toolbar. If you see this message, and you think it is incorrect, please open an issue with more details including the proxy you're using and the format of the REMOTE_ADDR at https://github.com/Pylons/pyramid_debugtoolbar/issues/c             3   s   | ]}  |V  qd S )N)
startswith)ra   e)rb   r   r   	<genexpr>   s    z?toolbar_tween_factory.<locals>.toolbar_tween.<locals>.<genexpr>zwsgi.multiprocessFzpyramid_debugtoolbar has detected that the application is being served by a forking / multiprocess web server. The toolbar relies on global state to work and is not compatible with this environment. The toolbar will be disabled.r#   )Z_app_urlrO   z#Squashed %s at %s
traceback url: %sz
/exceptionz#Uncaught %s at %s
traceback url: %szUncaught %s at %s)redirect_toredirect_coderedirectr!   ).Z	path_infoUnicodeDecodeErrorr   encodingobjectstartendreasonremote_addrstripwarningswarnanyr   r   r/   r   rm   script_namelenr   idrF   r    rS   putr)   Zwrap_handlerr+   exc_inforR   	tracebackr   r   urlrP   	Exceptionsys	exceptionr?   rM   locationstrtextcontent_type
html_types)r   rn   client_addr	root_pathZold_script_nameZold_path_infoZtoolbarZ_handlerrA   r@   msgZexc_nameZ
subrequestZexc_msgexcrq   rr   qscontent)_logger
auth_checkr,   dispatchri   r5   handlerrh   re   rf   r4   redirect_codesrequest_historyrg   )rb   r   toolbar_tween   s    
*





z,toolbar_tween_factory.<locals>.toolbar_tween)N)r   rH   Z
getUtilityr   rG   r
   Zpdtb_historyZqueryUtilityr   listr1   r   r   osurandomZ
pdtb_tokenZpdtb_eval_exc)	r   rG   r   rk   r[   Ztoolbar_registryr]   Zresolve_panelsr   r   )rk   r   r   r,   r   ri   r5   r   rh   re   rf   r4   r`   r   r   rH   rg   rl   r   toolbar_tween_factory   sN    





& r   a  <link rel="stylesheet" type="text/css" href="%(css_path)s" />

<div id="pDebug">
    <div %(button_style)s id="pDebugToolbarHandle">
        <a title="Show Toolbar" id="pShowToolBarButton"
           href="%(toolbar_url)s" target="pDebugToolbar">&#171;</a>
    </div>
</div>
)NN)&r   Zpyramid.exceptionsr   Zpyramid.httpexceptionsr   Zpyramid.interfacesr   Zpyramid.threadlocalr   r   r|   Zpyramid_debugtoolbar.compatr   r   Zpyramid_debugtoolbar.tbtoolsr   Zpyramid_debugtoolbar.utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rv   r    rR   rV   r   rI   r   r   r   r   <module>   s&   4Y		
 S