Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib/python3.5/site-packages/raven/utils/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib/python3.5/site-packages/raven/utils/__pycache__/stacks.cpython-35.pyc



��Y9'�@sdZddlmZmZddlZddlZddlZddlZddlZddl	m
Z
ddlmZej
d�Zdddd�Zdd	d
�Zdd�Zd
d�Zddd�Ze
ddd�Zddd�Zddd�Ze
dddd�ZdS)z�
raven.utils.stacks
~~~~~~~~~~~~~~~~~~~~~~~~~~

:copyright: (c) 2010-2012 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
�)�absolute_import�divisionN)�	transform)�	iteritemszcoding[:=]\s*([-\w.]+)cCsrd}|dk	rmt|d�rmy|j|�}Wnttfk
rTd}YnX|dk	rm|j�}|dkr�ytj|�}Wnttfk
r�d	SYnX|s�d
Std||�}t	|d|t
|��}yUdd�|||�D�}||jd�}	dd�||d|�D�}
Wntk
rRdSYnXt
|�t
|	�t
|
�fS)z�
    Returns context_lines before and after lineno from file.
    Returns (pre_context_lineno, pre_context, context_line, post_context).
    N�
get_sourcer�cSsg|]}|jd��qS)z
)�strip)�.0�line�r�C/opt/alt/python35/lib/python3.5/site-packages/raven/utils/stacks.py�
<listcomp>Bs	z'get_lines_from_file.<locals>.<listcomp>z
cSsg|]}|jd��qS)z
)r)r	r
rrrr
Gs	)NNN)NNN)NNN)�hasattrr�ImportError�IOError�
splitlines�	linecache�getlines�OSError�max�min�lenr�
IndexError�slim_string)�filename�lineno�
context_lines�loader�module_name�sourceZlower_boundZupper_bound�pre_context�context_line�post_contextrrr�get_lines_from_files8			
			r#cCs)y||SWntk
r$|SYnXdS)z�
    f_locals is not guaranteed to have .get(), but it will always
    support __getitem__. Even if it doesn't, we return ``default``.
    N)�	Exception)�f_locals�key�defaultrrr�_getitem_from_frameUs
r(csbt�d�r�j}n't�d�r6�j}nt���t�fdd�|�D��S)zu
    Given something that closely resembles a dictionary, we attempt
    to coerce it into a propery dictionary.
    �iterkeys�keysc3s|]}|�|fVqdS)Nr)r	�k)�dictishrr�	<genexpr>lszto_dict.<locals>.<genexpr>)rr)r*�
ValueError�dict)r,�mr)r,r�to_dict`sr1ccsgx`|rbt|d�rbt|jdi�}t|d�sV|jt|dd�fV|j}qWdS)z�
    Given a traceback object, it will iterate over all
    frames that do not contain the ``__traceback_hide__``
    local variable.
    �tb_framer%�__traceback_hide__�	tb_linenoN)r�getattrr2r(�tb_next)�tbr%rrr�iter_traceback_framesos
r8ccss|stj�dd�}xPdd�|D�D];\}}t|di�}t|d�r`q0||fVq0WdS)z�
    Given an optional list of frames (defaults to current stack),
    iterates over all frames that do not contain the ``__traceback_hide__``
    local variable.
    rNcss#|]}|d|dfVqdS)r�Nr)r	�frrrr-�sz$iter_stack_frames.<locals>.<genexpr>r%r3)�inspect�stackr5r()�frames�framerr%rrr�iter_stack_frames�s r?ic	Cs�t|dd�}|sdSt|t�sTyt|�}Wntk
rSdSYnXi}d}x\t|�D]N\}}||�}tt|��}|||krm|||<||7}qmW|S)Nr%r)r5�
isinstancer/r1r$rr�repr)	r>�transformerZmax_var_sizer%�f_varsZf_sizer+�vZv_sizerrr�get_frame_locals�s"
	
rE�cCs�d}g}g}xD|D]<}|d7}|jd�rH|j|�q|j|�qW||kri|S||}t|�}t||d�}|rt|d�}	x�||	|	�D]@}|jdd�|jdd�|jdd�|d8}q�WnKxH|D]@}|jdd�|jdd�|jdd�|d8}qW|sV|S||}
t|
d�}	xI||	|	�D]6}|jdd�|jdd�|jdd�q�W|S)	z~
    Removes various excess metadata from middle frames which go beyond
    ``frame_allowance``.

    Returns ``frames``.
    rrZin_appr9�varsNr r")�get�appendrr�int�pop)r=�frame_allowanceZ
frames_lenZ
app_framesZ
system_framesr>�	remainingZ	app_countZsystem_allowanceZhalf_maxZ
app_allowancerrr�slim_frame_data�sD




rNicCs@|s
|St|�|kr2|d|d�dS|d|�S)N�z...)r)�value�lengthrrrr�s
rTcCshd}g}x=|D]5}t|ttf�r=|\}}n|}|j}t|di�}	t|	d�rpqt|di�}
t|dd�}|r�|jj}|jj}
nd}d}
t|
d�}t|
d�}|r�|d	8}|dk	r%|r%t	||d
||�\}}}nd\}}}yYt
j|jdd	�dj
}|j|jtjd
�dd	�djtj�}Wntk
r�|}YnX|s�|}d|d|d|p�dd|
p�dd|d	i}|rt|d|�}|r||d<|dk	r;|jd|d|d|i�|j|�qWdt|d|�i}|S)a
    Given a list of frames, returns a list of stack information
    dictionary objects that are JSON-ready.

    We have to be careful here as certain implementations of the
    _Frame class do not contain the necessary data to lookup all
    of the information we want.
    Tr%r3�	f_globals�f_codeN�
__loader__�__name__r��.rr9�abs_pathr�module�functionz	<unknown>rrBrGr r!r"r=rL)NNN���)r@�list�tuple�f_linenor5r(rS�co_filename�co_namer#�sys�modules�split�__file__�rsplit�os�sep�lstripr$rE�updaterIrN)r=rB�capture_localsrLr3�resultZ
frame_infor>rr%rRrSrXrZrrr r!r"�
base_filenamerZframe_resultrCZ	stackinforrr�get_stack_info�sb

	
$ 3


rm)�__doc__�
__future__rrr;r�rerfraZraven.utils.serializerrZraven.utils.compatr�compileZ
_coding_rer#r(r1r8r?rErNrrmrrrr�<module>s&=4