o
    Nrf                     @   s   d dl Z d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
 ejjZG dd dejjZG d	d
 d
ejjZG dd deZdS )    N   )	constants   )BaseHTTPAdapter)NpipeSocketc                       s&   e Zd Zd fdd	Zdd Z  ZS )NpipeHTTPConnection<   c                    s    t  jd|d || _|| _d S )N	localhost)timeoutsuper__init__
npipe_pathr
   )selfr   r
   	__class__ c/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/docker/transport/npipeconn.pyr      s
   
zNpipeHTTPConnection.__init__c                 C   s(   t  }|| j || j || _d S N)r   
settimeoutr
   connectr   sock)r   r   r   r   r   r      s   
zNpipeHTTPConnection.connect)r   )__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s    r   c                       s.   e Zd Zd	 fdd	Zdd Zdd Z  ZS )
NpipeHTTPConnectionPoolr   
   c                    s"   t  jd||d || _|| _d S )Nr	   )r
   maxsizer   )r   r   r
   r   r   r   r   r      s
   
z NpipeHTTPConnectionPool.__init__c                 C   s   t | j| jS r   )r   r   r
   )r   r   r   r   	_new_conn%   s   z!NpipeHTTPConnectionPool._new_connc              
   C   sx   d }z| j j| j|d}W n( ty! } ztj| d|d }~w tjy5   | jr3tj	| dd Y nw |p;| 
 S )N)blockr
   zPool is closed.z>Pool reached maximum size and no more connections are allowed.)poolgetr    AttributeErrorurllib3
exceptionsClosedPoolErrorqueueEmptyEmptyPoolErrorr   )r   r
   connZaer   r   r   	_get_conn-   s"   	z!NpipeHTTPConnectionPool._get_conn)r   r   )r   r   r   r   r   r+   r   r   r   r   r   r      s    r   c                       sL   e Zd Zejjjg d Zdejej	f fdd	Z
d
ddZdd	 Z  ZS )NpipeHTTPAdapter)r   poolsr
   max_pool_sizer   c                    s:   | dd| _|| _|| _t|dd d| _t   d S )Nznpipe:// c                 S   s   |   S r   )close)pr   r   r   <lambda>N   s    z+NpipeHTTPAdapter.__init__.<locals>.<lambda>)dispose_func)replacer   r
   r.   RecentlyUsedContainerr-   r   r   )r   base_urlr
   pool_connectionsr.   r   r   r   r   G   s   zNpipeHTTPAdapter.__init__Nc                 C   sn   | j j) | j |}|r|W  d    S t| j| j| jd}|| j |< W d    |S 1 s0w   Y  |S )N)r   )r-   lockr"   r   r   r
   r.   )r   urlproxiesr!   r   r   r   get_connectionR   s   

zNpipeHTTPAdapter.get_connectionc                 C   s   |j S r   )path_url)r   requestr:   r   r   r   request_url`   s   zNpipeHTTPAdapter.request_urlr   )r   r   r   requestsadaptersHTTPAdapter	__attrs__r   ZDEFAULT_NUM_POOLSZDEFAULT_MAX_POOL_SIZEr   r;   r>   r   r   r   r   r   r,   @   s    
r,   )r'   Zrequests.adaptersr?   r$   Zurllib3.connectionr/   r   Zbasehttpadapterr   Znpipesocketr   _collectionsr5   
connectionHTTPConnectionr   connectionpoolHTTPConnectionPoolr   r,   r   r   r   r   <module>   s    #