U
    g                     @  sL   d dl mZ d dlZG dd dZe ZejZejZejZejZddgZ	dS )    )annotationsNc                   @  s`   e Zd ZdZddddZdddd	d
dZdddddddZddddZddddZdS )_HTTP2ProbeCache_lock_cache_locks_cache_valuesNone)returnc                 C  s   t  | _i | _i | _d S N)	threadingLockr   r   r   self r   7/tmp/pip-unpacked-wheel-f4zjg0cl/urllib3/http2/probe.py__init__   s    
z_HTTP2ProbeCache.__init__strintzbool | None)hostportr	   c              
   C  s   d }| j d ||f}z(| j| }|d k	r:|W W  5 Q R  S W n, tk
rh   t | j|< d | j|< Y nX W 5 Q R X | j| }|  z| j| }W n: tk
r } zt|trt	|
   W 5 d }~X Y nX |S r
   )r   r   KeyErrorr   RLockr   acquireBaseException
isinstanceAssertionErrorrelease)r   r   r   valuekeykey_locker   r   r   acquire_and_get   s&    

z _HTTP2ProbeCache.acquire_and_get)r   r   supports_http2r	   c              	   C  sV   ||f}| j | }|$ |d kr6| j| d k	r6tdW 5 Q R X || j|< |  d S )Nz@Cannot reset HTTP/2 support for origin after value has been set.)r   r   
ValueErrorr   )r   r   r   r"   r   r   r   r   r   set_and_release3   s    

z _HTTP2ProbeCache.set_and_releasez"dict[tuple[str, int], bool | None]c              
   C  s2   | j " dd | j D W  5 Q R  S Q R X dS )zUThis function is for testing purposes only. Gets the current state of the probe cachec                 S  s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>D   s      z,_HTTP2ProbeCache._values.<locals>.<dictcomp>N)r   r   itemsr   r   r   r   _valuesA   s    z_HTTP2ProbeCache._valuesc              	   C  s"   | j  i | _i | _W 5 Q R X dS )zBThis function is for testing purposes only. Reset the cache valuesNr   r   r   r   r   _resetF   s    z_HTTP2ProbeCache._resetN)	__name__
__module____qualname__	__slots__r   r!   r$   r*   r+   r   r   r   r   r      s   !r   r$   r!   )

__future__r   r   r   Z_HTTP2_PROBE_CACHEr$   r!   r*   r+   __all__r   r   r   r   <module>   s   G