o
    pf'	                     @   s   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mZ ddlmZ er:d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 )    )default_timer)TracebackType)	AnyCallableLiteralOptionalTupleTypeTYPE_CHECKINGTypeVarUnion   decorate)CounterF.)boundc                	   @   s|   e Zd Zdddeee eee df f ddfddZdd	d
Zde	ee  de	e de	e
 ded fddZdddZdS )ExceptionCountercounterr   	exception.returnNc                 C      || _ || _d S N)_counter
_exception)selfr   r    r   [/home/ertert/spirit/venv/lib/python3.10/site-packages/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	tracebackFc                 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   r	   BaseExceptionr   r   r!   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
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__r)   r   r   c                    r*   )Nc                    r+   r   r   r,   r    r   r   r0   /   r1   z+InprogressTracker.__call__.<locals>.wrappedr   r2   r   r    r   r3   .   r4   zInprogressTracker.__call__Nr5   )r6   r7   r8   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	d
 ZdddZdS )Timerc                 C   r   r   )_metric_callback_name)r   metriccallback_namer   r   r   r   7   r   zTimer.__init__c                 C   s   |  | j| jS r   )	__class__rA   rB   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   rG   getattrrA   rB   )r   r"   r#   r$   durationcallbackr   r   r   r(   B   s   zTimer.__exit__c                 O   s   | j j|i || _ d S r   )rA   labels)r   r.   kwr   r   r   rL   H   s   zTimer.labelsr)   r   r   c                    r*   )Nc                    s:       | |i |W  d    S 1 sw   Y  d S r   )rF   r,   r    r   r   r0   L   s   
$zTimer.__call__.<locals>.wrappedr   r2   r   r    r   r3   K   s   
zTimer.__call__Nr5   )	r6   r7   r8   r   rF   r!   r(   rL   r3   r   r   r   r   r@   6   s    r@   N)timeitr   typesr   typingr   r   r   r   r   r	   r
   r   r   	decoratorr    r   r   r   r:   r@   r   r   r   r   <module>   s    ,