U
    —ùiÆ  ã                   @  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-z24cd2a5/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ƒr´t	‚| 
¡  ‚ 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þ