o
    0׾g7                     @   s   d dl mZmZmZ d dlZd dl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 g dZG d	d
 d
eZG dd deZG dd deZG dd deZd dlmZ ee d dS )    )print_functionabsolute_importdivisionN)settrace)
getcurrent)format_run_info)perf_counter)gmctime)GreenletTracerHubSwitchTracerMaxSwitchTracerc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )r
   c                 C   s$   d| _ d | _t| }|| _d| _d S )Nr   F)greenlet_switch_counteractive_greenletr   previous_trace_function_killed)self
prev_trace r   X/var/www/html/backend_erp/backend_erp_env/lib/python3.10/site-packages/gevent/_tracer.py__init__   s
   
zGreenletTracer.__init__c                 C   s$   | j sd| _ t| j d | _d S d S NT)r   r   r   r   r   r   r   kill1   s
   

zGreenletTracer.killc                 C   sF   |  j d7  _ |dv r|d | _nd | _| jd ur!| || d S d S )N   )switchthrow)r   r   r   r   eventargsr   r   r   _trace8   s   
zGreenletTracer._tracec                 C   s   |  ||S N)r   r   r   r   r   __call__D      zGreenletTracer.__call__c                 C   s6   | j }| jdk}d| _|s|d u s||u rdS d|fS )Nr   FT)r   r   )r   hubr   
did_switchr   r   r   did_block_hubG   s   
zGreenletTracer.did_block_hubc                 C   s
   d | _ d S r    )r   r   r   r   r    ignore_current_greenlet_blocking^   s   
z/GreenletTracer.ignore_current_greenlet_blockingc                 C   s   t  | _d S r    )r   r   r   r   r   r   !monitor_current_greenlet_blockingb   r"   z0GreenletTracer.monitor_current_greenlet_blockingc                 C   s   ddt  t|f g}|d| f  z	t |j }W n ty+   d|f g}Y nw t|}|dt	|jf  |d
| |d |tdi | |S )	NzP================================================================================z'
%s : Greenlet %s appears to be blockedz    Reported by %sz$Unknown: No thread found for hub %r
z!Blocked Stack (for thread id %s): zInfo:r   )r	   strappendsys_current_framesthread_identKeyError	tracebackformat_stackhexjoinextendr   )r   r#   r   format_kwargsreportframestackr   r   r   did_block_hub_reporte   s"   

z#GreenletTracer.did_block_hub_reportN)__name__
__module____qualname__r   r   r   r!   r%   r&   r'   r8   r   r   r   r   r
      s    r
   c                   @   s   e Zd Zdd Zdd ZdS )
_HubTracerc                 C   s   t |  || _|| _d S r    )r
   r   max_blocking_timer#   r   r#   r=   r   r   r   r   ~   s   

z_HubTracer.__init__c                 C   s   d | _ t|  d S r    )r#   r
   r   r   r   r   r   r      s   z_HubTracer.killN)r9   r:   r;   r   r   r   r   r   r   r<   }   s    r<   c                   @   $   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   t | || d| _d S Nr   )r<   r   last_entered_hubr>   r   r   r   r      s   
zHubSwitchTracer.__init__c                 C   s*   t | || | j| ju rt | _d S d S r    )r
   r   r   r#   r   rA   r   r   r   r   r      s   zHubSwitchTracer._tracec                 C   s    t  | j | jkrd| jfS d S r   )r   rA   r=   r   r   r#   r   r   r   r%      s   
zHubSwitchTracer.did_block_hubNr9   r:   r;   r   r   r%   r   r   r   r   r      s    r   c                   @   r?   )r   c                 C   s    t | || t | _d| _d S r@   )r<   r   r   last_switchmax_blockingr>   r   r   r   r      s   
zMaxSwitchTracer.__init__c                 C   sL   | j }t| || || jur"|d ur$t }t| j|| j | _d S d S d S r    )r   r
   r   r#   r   maxrE   rD   )r   r   r   
old_activeswitched_atr   r   r   r      s   
zMaxSwitchTracer._tracec                 C   s2   | j dkrt | j | _ | j | jkrd| jfS d S )Nr   T)rE   r   rD   r=   r   rB   r   r   r   r%      s
   

zMaxSwitchTracer.did_block_hubNrC   r   r   r   r   r      s    
r   )import_c_accelzgevent.__tracer)
__future__r   r   r   r+   r/   greenletr   r   gevent.utilr   gevent._compatr   gevent._utilr	   __all__objectr
   r<   r   r   rI   globalsr   r   r   r   <module>   s   
b