o
    2.a                     @   s   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	m
Z zd dlm  mZ W n ey8   d dlZY nw ejjZG dd dejZG d	d
 d
ejjZG dd deZdS )    N)BaseHTTPAdapter   )	constants   )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__ </usr/lib/python3/dist-packages/docker/transport/npipeconn.pyr      s
   
zNpipeHTTPConnection.__init__c                 C   s(   t  }|| j || j || _d S N)r   Z
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   sj   d }z| j j| j|d}W n! ty   tj| d tjy.   | jr,tj	| dY nw |p4| 
 S )N)blockr
   zPool is closed.z>Pool reached maximum size and no more connections are allowed.)poolgetr   AttributeErrorurllib3
exceptionsZClosedPoolErrorqueueZEmptyZEmptyPoolErrorr   )r   r
   Zconnr   r   r   	_get_conn1   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>S   s    z+NpipeHTTPAdapter.__init__.<locals>.<lambda>)Zdispose_func)replacer   r
   r)   RecentlyUsedContainerr(   r   r   )r   Zbase_urlr
   Zpool_connectionsr)   r   r   r   r   L   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   Zurlproxiesr    r   r   r   get_connectionW   s   

zNpipeHTTPAdapter.get_connectionc                 C   s   |j S r   )Zpath_url)r   Zrequestr1   r   r   r   request_urle   s   zNpipeHTTPAdapter.request_urlr   )r   r   r   requestsZadaptersZHTTPAdapterZ	__attrs__r   ZDEFAULT_NUM_POOLSZDEFAULT_MAX_POOL_SIZEr   r2   r3   r   r   r   r   r   r'   E   s    
r'   )r%   Zrequests.adaptersr4   Z docker.transport.basehttpadapterr   r*   r   Znpipesocketr   Zhttp.clientZclientZhttplibZrequests.packages.urllib3Zpackagesr#   ImportError_collectionsr/   ZHTTPConnectionr   ZconnectionpoolZHTTPConnectionPoolr   r'   r   r   r   r   <module>   s    $