3
ûZð]ñ  ã               @   s\   d Z ddlZddlZddlZddlZddgZejdƒZG dd„ deƒZ	dd	d„Z
d
d„ ZdS )zPThe debug module contains utilities and functions for better
debugging Gunicorn.é    NÚspewÚunspewz\W+c               @   s   e Zd Zddd„Zdd„ ZdS )ÚSpewNTc             C   s   || _ || _d S )N)Útrace_namesÚshow_values)Úselfr   r   © r   ú2/tmp/pip-build-w1as9q70/gunicorn/gunicorn/debug.pyÚ__init__   s    zSpew.__init__c             C   sR  |dk�rN|j }d|jkr\|jd }|jdƒs8|jdƒrD|d d… }|jd }tj||ƒ}nBd}ytj|ƒ}|| }W n& tk
rœ   d|jj	|j
f }Y nX | jd ks´|| jk�rNtd	|||jƒ f ƒ | jsÔ| S g }	tj|ƒ}
xR|
D ]J}||jk�r|	jd
||j| f ƒ ||jkrè|	jd
||j| f ƒ qèW |	�rNtddj|	ƒ ƒ | S )NÚlineÚ__file__z.pycz.pyoé   Ú__name__z	[unknown]z,Unknown code named [%s].  VM instruction #%dz	%s:%s: %sz%s=%rz	%sú éÿÿÿÿ)Úf_linenoÚ	f_globalsÚendswithÚ	linecacheÚgetlineÚinspectÚgetsourcelinesÚIOErrorÚf_codeÚco_nameÚf_lastir   ÚprintÚrstripr   Ú_token_spliterÚsplitÚappendÚf_localsÚjoin)r   ÚframeÚeventÚargÚlinenoÚfilenameÚnamer   ÚsrcÚdetailsÚtokensÚtokr   r   r	   Ú__call__   s<    









zSpew.__call__)NT)r   Ú
__module__Ú__qualname__r
   r-   r   r   r   r	   r      s   
r   Fc             C   s   t jt| |ƒƒ dS )zpInstall a trace hook which writes incredibly detailed logs
    about what code is being executed to stdout.
    N)ÚsysÚsettracer   )r   r   r   r   r	   r   ;   s    c               C   s   t jdƒ dS )z-Remove the trace hook installed by spew.
    N)r0   r1   r   r   r   r	   r   B   s    )NF)Ú__doc__r0   r   Úrer   Ú__all__Úcompiler   Úobjectr   r   r   r   r   r   r	   Ú<module>   s   
(
