o
    );c	                     @   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 e jdkr+d dlmZ ddlmZ e
rCd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TypeTYPE_CHECKINGTypeVar)      r   )Literal   decorate)CounterF.)boundc                   @   sd   e Zd Zdddee ddfddZddd	Zd
eee  dee dee ddfddZ	dddZ
dS )ExceptionCountercounterr   	exceptionreturnNc                 C      || _ || _d S N)_counter
_exception)selfr   r    r   m/Users/cmarchbanks/go/src/github.com/prometheus/client_python/build/lib/prometheus_client/context_managers.py__init__      
zExceptionCounter.__init__c                 C   s   d S r   r   r   r   r   r   	__enter__   s   zExceptionCounter.__enter__typvalue	tracebackzLiteral[False]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__fr   c                        fdd}t ||S )Nc                    6     | |i |W  d    S 1 sw   Y  d S r   r   funcargskwargsr    r   r   wrapped      $z*ExceptionCounter.__call__.<locals>.wrappedr   r   r)   r0   r   r    r   __call__      
zExceptionCounter.__call__)r   N)r)   r   r   r   )__name__
__module____qualname__r   BaseExceptionr   r!   r   r   r(   r3   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   gauger   r   r   r   &   s   
zInprogressTracker.__init__c                 C      | j   d S r   )r:   r&   r    r   r   r   r!   )      zInprogressTracker.__enter__c                 C   r<   r   )r:   decr'   r   r   r   r(   ,   r=   zInprogressTracker.__exit__c                    r*   )Nc                    r+   r   r   r,   r    r   r   r0   0   r1   z+InprogressTracker.__call__.<locals>.wrappedr   r2   r   r    r   r3   /   r4   zInprogressTracker.__call__N)r5   r6   r7   r   r!   r(   r3   r   r   r   r   r9   %   s
    r9   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   r   r   )_metric_callback_name)r   metricZcallback_namer   r   r   r   8   r   zTimer.__init__c                 C   s   |  | j| jS r   )	__class__r@   rA   r    r   r   r   
_new_timer<   s   zTimer._new_timerc                 C   s   t  | _| S r   )r   _startr    r   r   r   r!   ?   s   zTimer.__enter__c                 C   s,   t t | j d}t| j| j}|| d S )Nr   )maxr   rE   getattrr@   rA   )r   r"   r#   r$   Zdurationcallbackr   r   r   r(   C   s   zTimer.__exit__c                 O   s   | j j|i || _ d S r   )r@   labels)r   r.   kwr   r   r   rI   I   s   zTimer.labelsc                    r*   )Nc                    s:       | |i |W  d    S 1 sw   Y  d S r   )rD   r,   r    r   r   r0   M   s   
$zTimer.__call__.<locals>.wrappedr   r2   r   r    r   r3   L   s   
zTimer.__call__N)	r5   r6   r7   r   rD   r!   r(   rI   r3   r   r   r   r   r?   7   s    r?   )sysZtimeitr   typesr   typingr   r   r   r   r   r	   version_infor   	decoratorr    r   r   r   r9   r?   r   r   r   r   <module>   s     
