U
    +5øi×  ã                   @   sZ   d Z ddlZddlZddlZddlZddgZe d¡ZG dd„ dƒ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-unpacked-wheel-pa3uujlc/gunicorn/debug.pyÚ__init__   s    zSpew.__init__c                 C   sN  |dk�rJ|j }d|jkr\|jd }| d¡s8| d¡rD|d d… }|jd }t ||¡}nBd}zt |¡}|| }W n& tk
rœ   d|jj	|j
f }Y nX | jd ks´|| jk�rJtd	||| ¡ f ƒ | jsÔ| S g }	t |¡}
|
D ]J}||jk�r|	 d
||j| f ¡ ||jkræ|	 d
||j| f ¡ qæ|	�rJtdd |	¡ ƒ | 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ÚOSErrorÚ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__   sB    



ÿ

 ÿ

zSpew.__call__)NT)r   Ú
__module__Ú__qualname__r   r-   r	   r	   r	   r
   r      s   
r   Fc                 C   s   t  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   :   s    c                   C   s   t  d¡ dS )z-Remove the trace hook installed by spew.
    N)r0   r1   r	   r	   r	   r
   r   A   s    )NF)Ú__doc__r0   r   Úrer   Ú__all__Úcompiler   r   r   r   r	   r	   r	   r
   Ú<module>   s   
(
