o
    h                     @   sZ  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ erd dl	m
Z
 d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ eZee Zedeee eeee dZeddeiZeeeef Zeedf Zeeef Zeeeee f Zeeeef  ZdZdZ erdd Z!ndd Z!dd Z"dd Z#e fddZ$dS )    N)deque)PY311)filename_for_module)TYPE_CHECKING)LRUCache)	FrameType)Deque)List)Optional)Sequence)Tuple)	TypedDictProcessedFrame)abs_pathfilenamefunctionlinenomoduleProcessedThreadMetadataname.e      c                 C   s   | j jS N)f_codeco_qualname)frame r   [/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/profiler/utils.pyget_frame_nameB   s   r   c              	   C   s   | j }|j}|j}z)|r1|d dkr1d| jv r1t| jd jD ]}||jv r0d|j|  W S qW n t	t
fy=   Y nw z1|rd|d dkrgd| jv rj| jd jD ]}||jv rcd|j|  W S qRW |S W |S W |S W |S  t	t
fy{   Y |S w )Nr   selfz{}.{}cls)r   co_varnamesco_namef_localstype__mro____dict__format__name__AttributeError
ValueError)r   r   r!   r   r    r   r   r   r   H   sJ   



	c                 C   s   | j j| jt| fS r   )r   co_filenamef_linenor   )	raw_framer   r   r   frame_idx   s   r.   c                 C   sX   |j j}z|jd }W n ty   d }Y nw tj|||t||p$d | d |jdS )Nr(      )r   r   r   r   r   )	r   r+   	f_globals	Exceptionospathjoinr   r,   )fidr-   cwdr   r   r   r   r   extract_frame}   s   r7   c                 C   s   t |d}| dur| j}||  |} | dus	tdd |D }g }t|D ] \}}	||	}
|
du rAt|	|| |}
||	|
 ||
 q&t|t	|f}|||fS )aA  
    Extracts the stack starting the specified frame. The extracted stack
    assumes the specified frame is the top of the stack, and works back
    to the bottom of the stack.

    In the event that the stack is more than `MAX_STACK_DEPTH` frames deep,
    only the first `MAX_STACK_DEPTH` frames will be returned.
    )maxlenNc                 s   s    | ]}t |V  qd S r   )r.   ).0r-   r   r   r   	<genexpr>   s    z extract_stack.<locals>.<genexpr>)
r   f_backappendtuple	enumerategetr7   setlenhash)r-   cacher6   max_stack_depth
raw_framesr;   	frame_idsframesir5   r   stack_idr   r   r   extract_stack   s    



rJ   )%r2   collectionsr   sentry_sdk._compatr   sentry_sdk.utilsr   typingr   sentry_sdk._lru_cacher   typesr   r   r	   r
   r   r   typing_extensionsr   strThreadIdintProcessedStackr   r   FrameIdFrameIdsStackIdExtractedStackExtractedSampleDEFAULT_SAMPLING_FREQUENCYMAX_STACK_DEPTHr   r.   r7   rJ   r   r   r   r   <module>   s`    
0!