<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    Y9'                 @   s   d Z ddlmZmZ ddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ edZdddZdd	d
Zdd Zdd ZdddZe
dfddZd ddZd!ddZe
ddfddZdS )"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)	iteritemszcoding[:=]\s*([-\w.]+)c          	   C   s  d}|dk	rRt |drRy||}W n ttfk
r@   d}Y nX |dk	rR| }|dkryt| }W n ttfk
r   dS X |sdS td|| }t	|d | t
|}yBdd ||| D }|| d}	d	d ||d | D }
W n tk
r   dS X t|t|	t|
fS )
z
    Returns context_lines before and after lineno from file.
    Returns (pre_context_lineno, pre_context, context_line, post_context).
    N
get_source)NNNr      c             S   s   g | ]}| d qS )z
)strip).0line r   C/opt/alt/python37/lib/python3.7/site-packages/raven/utils/stacks.py
<listcomp>B   s   z'get_lines_from_file.<locals>.<listcomp>z
c             S   s   g | ]}| d qS )z
)r   )r	   r
   r   r   r   r   G   s   )hasattrr   ImportErrorIOError
splitlines	linecachegetlinesOSErrormaxminlenr   
IndexErrorslim_string)filenamelinenocontext_linesloadermodule_namesourceZlower_boundZupper_boundpre_contextcontext_linepost_contextr   r   r   get_lines_from_file   s8    
r#   c             C   s"   y| | S  t k
r   |S X dS )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defaultr   r   r   _getitem_from_frameU   s    r(   c                sD   t  dr j}nt  dr$ j}nt t fdd| D S )zu
    Given something that closely resembles a dictionary, we attempt
    to coerce it into a propery dictionary.
    iterkeyskeysc             3   s   | ]}| | fV  qd S )Nr   )r	   k)dictishr   r   	<genexpr>l   s    zto_dict.<locals>.<genexpr>)r   r)   r*   
ValueErrordict)r,   mr   )r,   r   to_dict`   s    

r1   c             c   sJ   xD| rDt | drDt| jdi }t|ds<| jt| ddfV  | j} qW dS )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   getattrr2   r(   tb_next)tbr%   r   r   r   iter_traceback_frameso   s
    
r8   c             c   sV   | st  dd } x<dd | D D ]*\}}t|di }t|drDq$||fV  q$W dS )z
    Given an optional list of frames (defaults to current stack),
    iterates over all frames that do not contain the ``__traceback_hide__``
    local variable.
    r   Nc             s   s   | ]}|d  |d fV  qdS )r      Nr   )r	   fr   r   r   r-      s    z$iter_stack_frames.<locals>.<genexpr>r%   r3   )inspectstackr5   r(   )framesframer   r%   r   r   r   iter_stack_frames   s    
r?   i   c       	      C   s   t | dd }|sd S t|ts@yt|}W n tk
r>   d S X i }d}xDt|D ]8\}}||}tt|}|| |k rR|||< ||7 }qRW |S )Nr%   r   )r5   
isinstancer/   r1   r$   r   r   repr)	r>   transformerZmax_var_sizer%   f_varsZf_sizer+   vZv_sizer   r   r   get_frame_locals   s"    
rE      c             C   s\  d}g }g }x4| D ],}|d7 }| dr4|| q|| qW ||krN| S || }t|}t|| d}|rt|d }	x~||	|	  D ]0}|dd |dd |dd |d8 }qW n:x8|D ]0}|dd |dd |dd |d8 }qW |s| S || }
t|
d }	x<||	|	  D ]*}|dd |dd |dd q*W | S )	z~
    Removes various excess metadata from middle frames which go beyond
    ``frame_allowance``.

    Returns ``frames``.
    r   r   Zin_appr9   varsNr    r"   )getappendr   r   intpop)r=   frame_allowanceZ
frames_lenZ
app_framesZsystem_framesr>   	remainingZ	app_countZsystem_allowanceZhalf_maxZapp_allowancer   r   r   slim_frame_data   sD    


rN      c             C   s4   | s| S t | |kr(| d |d  d S | d | S )N   z...)r   )valuelengthr   r   r   r      s
    r   Tc          	   C   s  d}g }x| D ]}t |ttfr.|\}}n
|}|j}t|di }	t|	drPqt|di }
t|dd}|r~|jj}|jj}nd}d}t|
d}t|
d}|r|d	8 }|dk	r|rt	||d
||\}}}n
d\}}}yBt
j|dd	d  j}||tjdd d	d tj}W n tk
r0   |}Y nX |s<|}|||pHd|pPd|d	 d}|r|t||d}|r|||d< |dk	r||||d || qW dt||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      )NNN.r   r9   z	<unknown>)abs_pathr   modulefunctionr   )rB   rG   )r    r!   r"   r=   )rL   )r@   listtuplef_linenor5   r(   rT   co_filenameco_namer#   sysmodulessplit__file__rsplitosseplstripr$   rE   updaterI   rN   )r=   rB   capture_localsrL   r3   resultZ
frame_infor>   r   r%   rS   rT   rZ   r\   r   r   r    r!   r"   base_filenamer   Zframe_resultrC   Z	stackinfor   r   r   get_stack_info   sb    






&


rn   )NN)N)N)rF   )rO   )__doc__
__future__r   r   r;   r   rerg   rb   Zraven.utils.serializerr   Zraven.utils.compatr   compileZ
_coding_rer#   r(   r1   r8   r?   rE   rN   r   rn   r   r   r   r   <module>   s&   

=


4
