o
    g<                     @  s  U d Z ddl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Zddl	Z	ddl
Z
ddlmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZm Z m!Z!m"Z" dZ#e$ed	dZ%erse%dusqJ eZ&e#rG d
d dZ'e'e%dZ%e%dusJ ej(eddddZe) Z*de+d< d+ddZ,d,ddZ-d-ddZ.n
d+d dZ,d-d!dZ.ej/G d"d# d#Z0d.d'd(Z1G d)d* d*e!Z2dS )/zBCallback functions and support for sys.monitoring data collection.    )annotationsN)CodeType	FrameType)AnyCallableDictListOptionalSetTYPE_CHECKINGcast)short_filenameshort_stack)AnyCallableTArcTFileDispositionTLineNo
TTraceDataTTraceFileData
TracerCoreTWarnFnF
monitoringc                   @  s$   e Zd ZdZddd	ZdddZdS )LoggingWrapperz*Wrap a namespace to log all its functions.wrappedr   	namespacestrreturnNonec                 C  s   || _ || _d S N)r   r   )selfr   r    r    O/var/www/html/bloggers_ems/venv/lib/python3.10/site-packages/coverage/sysmon.py__init__=   s   
zLoggingWrapper.__init__nameCallable[..., Any]c                   s   d fdd}|S )Nargsr   kwargsr   c                    s2   t j d  |  |  tj | i |S )N.)logr   getattrr   )r%   r&   r#   r   r    r!   _wrappedB   s   z,LoggingWrapper.__getattr__.<locals>._wrapped)r%   r   r&   r   r   r   r    )r   r#   r+   r    r*   r!   __getattr__A   s   zLoggingWrapper.__getattr__N)r   r   r   r   r   r   )r#   r   r   r$   )__name__
__module____qualname____doc__r"   r,   r    r    r    r!   r   :   s    
r   zsys.monitoringT)fullshort_filenames	frame_idszSet[int]seen_threadsmsgr   r   r   c              	   C  s   t  }ttt j}|| d d}|tvr+t| t	d| d| dt
   dD ]&}t|d}t| d| d	|  |d
d W d   n1 sNw   Y  q-dS )z1Write a message to our detailed debugging log(s).iw 07dzNew thread  z:
)z/tmp/foo.outa:: T)fileflushN)osgetpidr   int	threadingcurrent_threadidentr4   addr(   r   openprint)r5   pidtidtslugfilenamefr    r    r!   r(   P   s   
 r(   argr   c                 C  sJ   t | tr!dt| dd| j d dt| jd| j d S t| S )z)Make a customized repr for logged values.z<code @#xz name=,z file=#>)
isinstancer   idco_namer   co_filenameco_firstlinenorepr)rK   r    r    r!   arg_repre   s   
rV   namesOptional[str]r   c                    s   d fdd}|S )z%Decorate a function to log its calls.methodr   r   c                   s   t  d fdd}|S )Nr   r   r%   r   c                   s   z<g }t |D ]\}}|d u rq|| dt|  qtt| dd j dd| d  | g|R  }|W S  ty| } z4td|jj d|  td	t	
| ztd usaJ ttjjd
 W   tyw   td Y  w d }~ww )N=rL   r9   (z, )z!!r:    r   z/oops, shutting off events with disabled tool id)zipappendrV   r(   rQ   r-   join	Exception	__class__	tracebackformat_exceptionsys_monitoring
set_eventssysr   COVERAGE_ID
ValueError)r   r%   
args_reprsr#   rK   retexc)rY   rW   r    r!   r+   s   s,   (
z0panopticon.<locals>._decorator.<locals>._wrapped)r   r   r%   r   r   r   )	functoolswraps)rY   r+   rW   )rY   r!   
_decoratorr   s   panopticon.<locals>._decoratorN)rY   r   r   r   r    rW   rp   r    ro   r!   
panopticono   s   rs   c                 C     dS )zAWrite a message to our detailed debugging log(s), but not really.Nr    )r5   r    r    r!   r(      s    c                  G  s   ddd}|S )z5Decorate a function to log its calls, but not really.methr   r   c                 S  s   | S r   r    )ru   r    r    r!   rp      s   rq   N)ru   r   r   r   r    rr   r    r    r!   rs      s   
c                   @  s*   e Zd ZU dZded< ded< ded< dS )	CodeInfoz/The information we want about each code object.booltracingzOptional[TTraceFileData]	file_datazDict[int, int] | Nonebyte_to_lineN)r-   r.   r/   r0   __annotations__r    r    r    r!   rv      s
   
 rv   coder   Dict[int, int]c                 C  s>   i }|   D ]\}}}|durt||dD ]}|||< qq|S )z6Make a dict mapping byte code offsets to line numbers.N   )co_linesrange)r|   b2lbstartbendlinenoboffsetr    r    r!   bytes_to_lines   s   
r   c                   @  s  e Zd ZdZd6ddZd7d	d
Ze d8ddZe d8ddZe d8ddZ	d9ddZ
d8ddZd:ddZer?d;ddZnd;ddZeddd<d"d#Zeddd<d$d%Zeddd&d=d)d*Zeddd+d>d.d/Zedd0d?d2d3Zedd0d?d4d5Zd&S )@
SysMonitorzHPython implementation of the raw data tracer for PEP669 implementations.tool_idr?   r   r   c                 C  s`   |  d| _ |  |  d | _d | _|  || _i | _g | _i | _i | _d| _ddi| _	d| _
d| _d S )NFstartsr   )
trace_arcsshould_start_contextswitch_contextmyid
code_infoscode_objects
last_lineslocal_event_codes	sysmon_onstatsstopped	_activity)r   r   r    r    r!   r"      s"   
zSysMonitor.__init__r   c                 C  s@   t dd | j D }t| j}dt| dd| d| dS )Nc                 s  s    | ]}t |V  qd S r   )len).0vr    r    r!   	<genexpr>   s    z&SysMonitor.__repr__.<locals>.<genexpr>z<SysMonitor at rL   r:   z data points in z files>)sumdatavaluesr   rQ   )r   pointsfilesr    r    r!   __repr__   s   
zSysMonitor.__repr__c                 C  s   d| _ tdus	J t| jd ttj| j}tj}| jrMt	| j|j
|jB  ||j
| j ||j| j ||j| j ||j| j ||j| j nt	| j|j
 ||j
| j ||j| j t  d| _dS )zStart this Tracer.FNzcoverage.pyT)r   re   use_tool_idr   rm   partialregister_callbackeventsr   rf   PY_START	PY_UNWINDsysmon_py_start	PY_RESUMEsysmon_py_resume_arcs	PY_RETURNsysmon_py_return_arcssysmon_py_unwind_arcsLINEsysmon_line_arcssysmon_line_linesrestart_eventsr   )r   registerr   r    r    r!   start   s(   

zSysMonitor.startc                 C  s`   | j sdS tdusJ t| jd | j D ]
}t| j|d qi | _t| j d| _ dS )zStop this Tracer.Nr   F)r   re   rf   r   r   r   set_local_eventsfree_tool_id)r   r|   r    r    r!   stop   s   
zSysMonitor.stopc                 C  s   |    dS )z+The process has forked, clean up as needed.N)r   r   r    r    r!   	post_fork  s   zSysMonitor.post_forkrw   c                 C  s   | j S )zHas there been any activity?r   r   r    r    r!   activity	  s   zSysMonitor.activityc                 C  s
   d| _ dS )zReset the activity() flag.FNr   r   r    r    r!   reset_activity  s   
zSysMonitor.reset_activityOptional[Dict[str, int]]c                 C  rt   )z+Return a dictionary of statistics, or None.Nr    r   r    r    r!   	get_stats  s   zSysMonitor.get_statsr   c                 C  s   t  jjjS z2Get the frame of the Python code we're monitoring.inspectcurrentframef_backr   r    r    r!   callers_frame  s   zSysMonitor.callers_framec                 C  s   t  jjS r   r   r   r    r    r!   r      s   r|   @r   instruction_offsetMonitorReturnc                 C  sx  d| _ | jd  d7  < | jt|}d}d}|dur"|j}|j}|du r|j}| j|}|du rHt	
 j}tr=|j}| ||}|| j|< |j}|rk|j}	|	dusVJ |	| jvrat | j|	< | j|	 }t|}
nd}d}
t|||
d| jt|< | j| |rtjj}| jrtdusJ t| j||j|jB |jB  || j t|< |r| j!r| " }|j# | j$|< dS tjj%S )z-Handle sys.monitoring.events.PY_START events.Tr      N)rx   ry   rz   )&r   r   r   getrQ   rx   ry   rS   should_trace_cacher   r   r   LOGshould_tracetracesource_filenamer   setr   rv   r   r_   rg   r   r   r   re   r   r   r   r   r   r   r   r   rT   r   DISABLE)r   r|   r   	code_infotracing_codery   rI   dispframe	tracenamer   r   r    r    r!   r   $  sh   





zSysMonitor.sysmon_py_startc                 C  s   |   }|j| j|< dS )zBHandle sys.monitoring.events.PY_RESUME events for branch coverage.N)r   f_linenor   )r   r|   r   r   r    r    r!   r   h  s   z SysMonitor.sysmon_py_resume_arcsNretvalobjectc                 C  sr   |   }| jt|}|dur0|jdur0| j|}|dur0||j f}ttt	 |j
| | j|d dS )zBHandle sys.monitoring.events.PY_RETURN events for branch coverage.N)r   r   r   rQ   ry   r   rT   r   r
   r   rC   pop)r   r|   r   r   r   r   	last_linearcr    r    r!   r   p  s   z SysMonitor.sysmon_py_return_arcsrl   	exceptionBaseExceptionc                 C  s   |   }| j|d}t|trdS | jt|}|dur:|jdur<|dur>||j	 f}t
tt |j| dS dS dS dS )zBHandle sys.monitoring.events.PY_UNWIND events for branch coverage.N)r   r   r   rP   GeneratorExitr   r   rQ   ry   rT   r   r
   r   rC   )r   r|   r   r   r   r   r   r   r    r    r!   r     s   
z SysMonitor.sysmon_py_unwind_arcslineline_numberc                 C  s6   | j t| }|jdurttt |j| tjj	S )z;Handle sys.monitoring.events.LINE events for line coverage.N)
r   rQ   ry   r   r
   r   rC   rg   r   r   )r   r|   r   r   r    r    r!   r     s   
zSysMonitor.sysmon_line_linesc                 C  sd   | j t| }d}|jdur0|  }| j|}|dur+||f}ttt |j	| || j|< |S )z=Handle sys.monitoring.events.LINE events for branch coverage.N)
r   rQ   ry   r   r   r   r   r
   r   rC   )r   r|   r   r   rk   r   r   r   r    r    r!   r     s   

zSysMonitor.sysmon_line_arcs)r   r?   r   r   )r   r   )r   r   )r   rw   )r   r   )r   r   )r|   r   r   r?   r   r   )r|   r   r   r?   r   r   r   r   )r|   r   r   r?   r   r   r   r   )r|   r   r   r?   r   r   )r-   r.   r/   r0   r"   r   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r      s8    

 



C

r   )r5   r   r   r   )rK   r   r   r   )rW   rX   r   r   )r|   r   r   r}   )3r0   
__future__r   dataclassesrm   r   r=   os.pathrg   r@   rc   typesr   r   typingr   r   r   r   r	   r
   r   r   coverage.debugr   r   coverage.typesr   r   r   r   r   r   r   r   r   r)   re   r   r   r   r   r4   r{   r(   rV   rs   	dataclassrv   r   r   r    r    r    r!   <module>   sH   ((




"
	
	
