U
    dQ	                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZ e jdkr^d dlmZ ddlmZ erdd	lmZ ed
edef dZG dd dZG dd dZG dd dZdS )    N)default_timer)TracebackType)AnyCallableOptionalTupleTypeTYPE_CHECKINGTypeVarUnion)      r   )Literal   decorate)CounterF.)boundc                   @   sx   e Zd Zdeee eee df f ddddZdddd	Ze	ee  e	e e	e
 d
dddZdddddZdS )ExceptionCounterr   .N)counter	exceptionreturnc                 C   s   || _ || _d S N)_counter
_exception)selfr   r    r   F/tmp/pip-unpacked-wheel-2bcd7zt2/prometheus_client/context_managers.py__init__   s    zExceptionCounter.__init__)r   c                 C   s   d S r   r   r   r   r   r   	__enter__   s    zExceptionCounter.__enter__zLiteral[False])typvalue	tracebackr   c                 C   s   t || jr| j  dS )NF)
isinstancer   r   incr   r"   r#   r$   r   r   r   __exit__   s    
zExceptionCounter.__exit__r   )fr   c                    s    fdd}t ||S )Nc              
      s&     | ||W  5 Q R  S Q R X d S r   r   funcargskwargsr    r   r   wrapped    s    z*ExceptionCounter.__call__.<locals>.wrappedr   r   r)   r.   r   r    r   __call__   s    zExceptionCounter.__call__)__name__
__module____qualname__r   r   BaseExceptionr   r   r!   r   r   r(   r0   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 )
InprogressTrackerc                 C   s
   || _ d S r   )_gauge)r   Zgauger   r   r   r   (   s    zInprogressTracker.__init__c                 C   s   | j   d S r   )r6   r&   r    r   r   r   r!   +   s    zInprogressTracker.__enter__c                 C   s   | j   d S r   )r6   decr'   r   r   r   r(   .   s    zInprogressTracker.__exit__c                    s    fdd}t ||S )Nc              
      s&     | ||W  5 Q R  S Q R X d S r   r   r*   r    r   r   r.   2   s    z+InprogressTracker.__call__.<locals>.wrappedr   r/   r   r    r   r0   1   s    zInprogressTracker.__call__N)r1   r2   r3   r   r!   r(   r0   r   r   r   r   r5   '   s   r5   c                   @   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 )Timerc                 C   s   || _ || _d S r   )_metric_callback_name)r   ZmetricZcallback_namer   r   r   r   :   s    zTimer.__init__c                 C   s   |  | j| jS r   )	__class__r9   r:   r    r   r   r   
_new_timer>   s    zTimer._new_timerc                 C   s   t  | _| S r   )r   _startr    r   r   r   r!   A   s    zTimer.__enter__c                 C   s,   t t | j d}t| j| j}|| d S )Nr   )maxr   r=   getattrr9   r:   )r   r"   r#   r$   durationcallbackr   r   r   r(   E   s    zTimer.__exit__c                 O   s   | j j||| _ d S r   )r9   labels)r   r,   kwr   r   r   rB   K   s    zTimer.labelsc                    s    fdd}t ||S )Nc              
      s*       | ||W  5 Q R  S Q R X d S r   )r<   r*   r    r   r   r.   O   s    
zTimer.__call__.<locals>.wrappedr   r/   r   r    r   r0   N   s    zTimer.__call__N)	r1   r2   r3   r   r<   r!   r(   rB   r0   r   r   r   r   r8   9   s   r8   )sysZtimeitr   typesr   typingr   r   r   r   r   r	   r
   r   version_infor   	decoratorr    r   r   r   r5   r8   r   r   r   r   <module>   s   (
