U
    ‰d—  ã                   @   sD   d dl Z d dlZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )é    Nc                   @   s.   e Zd Zdd„ Zdd„ Zd
dd„Zdd	„ ZdS )ÚUnreaderc                 C   s   t  ¡ | _d S ©N)ÚioÚBytesIOÚbuf©Úself© r	   ú:/tmp/pip-unpacked-wheel-1tw_qy24/gunicorn/http/unreader.pyÚ__init__   s    zUnreader.__init__c                 C   s
   t ƒ ‚d S r   )ÚNotImplementedErrorr   r	   r	   r
   Úchunk   s    zUnreader.chunkNc                 C   sü   |d k	rt |tƒstdƒ‚|d k	r:|dkr.dS |dk r:d }| j dtj¡ |d krt| j ¡ rt| j ¡ }t	 
¡ | _|S |d krˆ|  ¡ }|S | j ¡ |k rÈ|  ¡ }|sº| j ¡ }t	 
¡ | _|S | j |¡ qˆ| j ¡ }t	 
¡ | _| j ||d … ¡ |d |… S )Nz&size parameter must be an int or long.r   ó    )Ú
isinstanceÚintÚ	TypeErrorr   ÚseekÚosÚSEEK_ENDÚtellÚgetvaluer   r   r   Úwrite)r   ÚsizeÚretÚdr   Údatar	   r	   r
   Úread   s4    





zUnreader.readc                 C   s    | j  dtj¡ | j  |¡ d S )Nr   )r   r   r   r   r   )r   r   r	   r	   r
   Úunread4   s    zUnreader.unread)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r	   r	   r	   r
   r      s   
 r   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚSocketUnreaderé    c                    s   t ƒ  ¡  || _|| _d S r   )Úsuperr   ÚsockÚmxchunk)r   r$   Z	max_chunk©Ú	__class__r	   r
   r   :   s    
zSocketUnreader.__init__c                 C   s   | j  | j¡S r   )r$   Úrecvr%   r   r	   r	   r
   r   ?   s    zSocketUnreader.chunk)r"   ©r   r   r    r   r   Ú__classcell__r	   r	   r&   r
   r!   9   s   r!   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚIterUnreaderc                    s   t ƒ  ¡  t|ƒ| _d S r   )r#   r   Úiter)r   Úiterabler&   r	   r
   r   D   s    
zIterUnreader.__init__c                 C   s8   | j s
dS zt| j ƒW S  tk
r2   d | _ Y dS X d S )Nr   )r,   ÚnextÚStopIterationr   r	   r	   r
   r   H   s    zIterUnreader.chunkr)   r	   r	   r&   r
   r+   C   s   r+   )r   r   Úobjectr   r!   r+   r	   r	   r	   r
   Ú<module>   s   ,
