
    Lf                        d dl Z d dlZd dlmZ ddlmZ ddlmZ d dl	Z	d dl
Z	e	j                  j                  Z G d de	j                  j                        Z G d	 d
e	j                   j"                        Z G d de      Zy)    N)BaseHTTPAdapter   )	constants   )NpipeSocketc                   &     e Zd Zd fd	Zd Z xZS )NpipeHTTPConnectionc                 D    t         |   d|       || _        || _        y )N	localhost)timeoutsuper__init__
npipe_pathr   )selfr   r   	__class__s      </usr/lib/python3/dist-packages/docker/transport/npipeconn.pyr   zNpipeHTTPConnection.__init__   s*     	 	
 %    c                     t               }|j                  | j                         |j                  | j                         || _        y N)r   
settimeoutr   connectr   sock)r   r   s     r   r   zNpipeHTTPConnection.connect   s0    }%T__%	r   )<   )__name__
__module____qualname__r   r   __classcell__r   s   @r   r	   r	      s    r   r	   c                   ,     e Zd Zd fd	Zd Zd Z xZS )NpipeHTTPConnectionPoolc                 F    t         |   d||       || _        || _        y )Nr   )r   maxsizer   )r   r   r   r#   r   s       r   r   z NpipeHTTPConnectionPool.__init__   s,    ' 	 	
 %r   c                 B    t        | j                  | j                        S r   )r	   r   r   )r   s    r   	_new_connz!NpipeHTTPConnectionPool._new_conn%   s    "OOT\\
 	
r   c                 X   d }	 | j                   j                  | j                  |      }|xs | j                         S # t        $ r! t        j
                  j                  | d      t        j                  $ r/ | j                  r t        j
                  j                  | d      Y }w xY w)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   conns      r   	_get_connz!NpipeHTTPConnectionPool._get_conn-   s    	99==tzz7=CD 't~~''  	N$$44T;LMM{{ 	zz((77/ 
 	s   '? A'B)(B))r   
   )r   r   r   r   r%   r2   r   r   s   @r   r!   r!      s    
(r   r!   c                        e Zd Zej                  j
                  j                  g dz   Zdej                  ej                  f fd	Z
ddZd Z xZS )NpipeHTTPAdapter)r   poolsr   max_pool_sizer   c                     |j                  dd      | _        || _        || _        t	        |d       | _        t        |           y )Nznpipe:// c                 "    | j                         S r   )close)ps    r   <lambda>z+NpipeHTTPAdapter.__init__.<locals>.<lambda>O   s    QWWY r   )dispose_func)replacer   r   r7   RecentlyUsedContainerr6   r   r   )r   base_urlr   pool_connectionsr7   r   s        r   r   zNpipeHTTPAdapter.__init__H   sG     #**:r:**+>

 	r   c                 $   | j                   j                  5  | j                   j                  |      }|r|cd d d        S t        | j                  | j
                  | j                        }|| j                   |<   d d d        |S # 1 sw Y   S xY w)N)r#   )r6   lockr)   r!   r   r   r7   )r   urlproxiesr(   s       r   get_connectionzNpipeHTTPAdapter.get_connectionS   s~    ZZ__ 		#::>>#&D		# 		#
 +**D #DJJsO		# 		# s   B ;BBc                     |j                   S r   )path_url)r   requestrF   s      r   request_urlzNpipeHTTPAdapter.request_urla   s     r   r   )r   r   r   requestsadaptersHTTPAdapter	__attrs__r   DEFAULT_NUM_POOLSDEFAULT_MAX_POOL_SIZEr   rG   rK   r   r   s   @r   r5   r5   A   sL    !!--77 ;L LI
 *,"+"="=(>>	 r   r5   )r.   requests.adaptersrL    docker.transport.basehttpadapterr   r9   r   npipesocketr   r+   urllib3.connection_collectionsr@   
connectionHTTPConnectionr	   connectionpoolHTTPConnectionPoolr!   r5    r   r   <module>r\      si      <  $  ,,BB ',,;; !(g44GG !(H&  & r   