o
    2wi                     @   st   d Z ddlmZ ddlZddlZG dd dZej	  ddl
Z
G dd dZW d   dS 1 s3w   Y  dS )a  
Drop-in replacement for httplib2. Make sure to monkey patch everything first!

import gevent.monkey
gevent.monkey.patch_all()

from geventhttpclient import httplib
httplib.patch()

from geventhttpclient import httplib2

http = httplib2.Http(concurrency=5)
    )contextmanagerNc                   @   s.   e Zd ZdZd
ddZedd Zdd Zd	S )
ClientPoolz
    Pool implementation for HTTP clients, that weren't designed with concurrency in mind.
    Usage example:

    pool = ClientPool(MyHttpClient)
    with pool.get() as client:
        response = client.request("127.0.0.1")
       c                 C   s4   || _ tj|| _t|D ]	}| j|  qd S N)factorygeventqueueQueuerangeput)selfr   concurrencyi r   V/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/geventhttpclient/httplib2.py__init__    s
   zClientPool.__init__c                 c   s"    | j  }|V  | j | d S r   )r   getr   r   clientr   r   r   r   &   s   
zClientPool.getc                 C   s   | j D ]}|  qd S r   )r   closer   r   r   r   r   ,   s   

zClientPool.closeN)r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r      s    
	
r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )HttpzGImitate a httplib2.Http client. Except that it is now run concurrently.c                 O   s6   t |ddd| _|| _|| _t| j| jd| _d S )Nr   r      )r   )maxpopr   argskwr   _http_factorypool)r   r   r   r   r   r   r   7   s   zHttp.__init__c                 C   s   t j| ji | jS r   )httplib2r   r   r   r   r   r   r   r    =   s   zHttp._http_factoryc                 O   s>   | j  }|j|i |W  d    S 1 sw   Y  d S r   )r!   r   request)r   r   r   r   r   r   r   r$   @   s   $zHttp.requestc                 C   s   | j   d S r   )r!   r   r#   r   r   r   r   D   s   z
Http.closeN)r   r   r   r   r   r    r$   r   r   r   r   r   r   4   s    r   )r   
contextlibr   gevent.queuer   geventhttpclient.httplibgeventhttpclientr   httplibpatchedr"   r   r   r   r   r   <module>   s    "