B
    ¯”t\C	  ã               @   sD   d Z ddlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZd	S )
z
Tracing utils
é   )Ú_Resultc               @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú	TagTracerc             C   s   i | _ d | _d| _d S )Né    )Ú	_tag2procÚwriterÚindent)Úself© r	   ú.lib/python3.7/site-packages/pluggy/_tracing.pyÚ__init__   s    zTagTracer.__init__c             C   s   t | |fƒS )N)ÚTagTracerSub)r   Únamer	   r	   r
   Úget   s    zTagTracer.getc       	      C   s†   t |d tƒr$|d }|d d… }ni }d tt|ƒ¡}d| j }d||d |¡f g}x(| ¡ D ]\}}| d|||f ¡ qbW |S )Néÿÿÿÿú z  z
%s%s [%s]
ú:z%s    %s: %s
)Ú
isinstanceÚdictÚjoinÚmapÚstrr   ÚitemsÚappend)	r   ÚtagsÚargsZextraZcontentr   Úlinesr   Úvaluer	   r	   r
   Úformat_message   s    
zTagTracer.format_messagec             C   sX   | j d k	r*|r*|  ||¡}|   d |¡¡ y| j| ||ƒ W n tk
rR   Y nX d S )NÚ )r   r   r   r   ÚKeyError)r   r   r   r   r	   r	   r
   Úprocessmessage    s    zTagTracer.processmessagec             C   s
   || _ d S )N)r   )r   r   r	   r	   r
   Ú	setwriter)   s    zTagTracer.setwriterc             C   s6   t |tƒrt| d¡ƒ}nt |tƒs(t‚|| j|< d S )Nr   )r   r   ÚtupleÚsplitÚAssertionErrorr   )r   r   Ú	processorr	   r	   r
   Úsetprocessor,   s    
zTagTracer.setprocessorN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r!   r&   r	   r	   r	   r
   r      s   	r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c             C   s   || _ || _d S )N)Úrootr   )r   r*   r   r	   r	   r
   r   5   s    zTagTracerSub.__init__c             G   s   | j  | j|¡ d S )N)r*   r    r   )r   r   r	   r	   r
   Ú__call__9   s    zTagTracerSub.__call__c             C   s   | j  | j|¡ d S )N)r*   r&   r   )r   r%   r	   r	   r
   Úsetmyprocessor<   s    zTagTracerSub.setmyprocessorc             C   s   |   | j| j|f ¡S )N)Ú	__class__r*   r   )r   r   r	   r	   r
   r   ?   s    zTagTracerSub.getN)r'   r(   r)   r   r+   r,   r   r	   r	   r	   r
   r   4   s   r   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_TracedHookExecutionc             C   s6   || _ || _|| _|j| _t| jtƒr*t‚| | j _d S )N)ÚpluginmanagerÚbeforeÚafterÚ_inner_hookexecÚoldcallr   r.   r$   )r   r/   r0   r1   r	   r	   r
   r   D   s    z_TracedHookExecution.__init__c                sB   ˆ  ˆ jˆˆ¡ t ‡ ‡‡‡fdd„¡}ˆ |ˆ jˆˆ¡ | ¡ S )Nc                  s   ˆ  ˆ ˆˆ¡S )N)r3   r	   )ÚhookÚ
hook_implsÚkwargsr   r	   r
   Ú<lambda>N   s    z/_TracedHookExecution.__call__.<locals>.<lambda>)r0   r   r   Z	from_callr1   Z
get_result)r   r4   r5   r6   Zoutcomer	   )r4   r5   r6   r   r
   r+   L   s    z_TracedHookExecution.__call__c             C   s   | j | j_d S )N)r3   r/   r2   )r   r	   r	   r
   ÚundoR   s    z_TracedHookExecution.undoN)r'   r(   r)   r   r+   r8   r	   r	   r	   r
   r.   C   s   r.   N)Ú__doc__Zcallersr   Úobjectr   r   r.   r	   r	   r	   r
   Ú<module>   s   -