B
    ê¹`L  ã               @   s4   d Z ddlmZmZ G dd„ dƒZG dd„ dƒZdS )zData Chunk Receiver
é    )Ú
BadRequestÚfind_double_newlinec               @   s<   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚFixedStreamReceiverFNc             C   s   || _ || _d S )N)ÚremainÚbuf)ÚselfZclr   © r   úY/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/waitress/receiver.pyÚ__init__   s    zFixedStreamReceiver.__init__c             C   s
   | j  ¡ S )N)r   Ú__len__)r   r   r   r	   r      s    zFixedStreamReceiver.__len__c             C   sn   | j }|dk rd| _dS t|ƒ}||krL| j |d|… ¡ d| _ d| _|S | j |¡ |  j |8  _ |S dS )zSee IStreamConsumeré   Tr   N)r   Ú	completedÚlenr   Úappend)r   ÚdataÚrmZdatalenr   r   r	   Úreceived!   s    zFixedStreamReceiver.receivedc             C   s
   | j  ¡ S )N)r   Úgetfile)r   r   r   r	   r   7   s    zFixedStreamReceiver.getfilec             C   s   | j S )N)r   )r   r   r   r	   Úgetbuf:   s    zFixedStreamReceiver.getbuf)
Ú__name__Ú
__module__Ú__qualname__r   Úerrorr
   r   r   r   r   r   r   r   r	   r      s   r   c               @   sT   e Zd ZdZdZdZdZdZdZdZ	dZ
dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ ZdS )ÚChunkedReceiverr   Fó    Nc             C   s
   || _ d S )N)r   )r   r   r   r   r	   r
   L   s    zChunkedReceiver.__init__c             C   s
   | j  ¡ S )N)r   r   )r   r   r   r	   r   O   s    zChunkedReceiver.__len__c             C   s.  | j r
dS t|ƒ}x|r(| j}|dkrv|d |… }| j |¡ t|ƒ}||d … }|  j|8  _| jdkrtd| _q| jrä| j| }| d¡}|dk r°t|ƒdk r°|| _d}n2d| _|dkrÌ|dd … }ntdƒ| _	d| _
d| _q| j
s¸| j| }| d¡}|dk r|| _d}n |d |… }||d d … }d| _| ¡ }|r&| d¡}|dkrf|d |… }yt| ¡ d	ƒ}	W n$ tk
rœ   td
ƒ| _	d}	Y nX |	dkr°|	| _nd| _
q| j| }
|
 d¡räd| _ |t|
ƒd  S t|
ƒ}|dk r|
| _d}qd| _ |
d |… | _|t|
ƒ|  S qW |S )Nr   Ts   
é   r   zChunk not properly terminatedFó   ;é   z!garbage in chunked encoding input)r   r   Úchunk_remainderr   r   Úvalidate_chunk_endÚ	chunk_endÚfindr   r   Úall_chunks_receivedÚcontrol_lineÚstripÚintÚ
ValueErrorÚtrailerÚ
startswithr   )r   ÚsZ	orig_sizer   Zto_writeZwrittenÚposÚlineÚsemiÚszr'   r   r   r	   r   R   sv    














zChunkedReceiver.receivedc             C   s
   | j  ¡ S )N)r   r   )r   r   r   r	   r   ¶   s    zChunkedReceiver.getfilec             C   s   | j S )N)r   )r   r   r   r	   r   ¹   s    zChunkedReceiver.getbuf)r   r   r   r   r   r#   r    r"   r'   r   r   r
   r   r   r   r   r   r   r   r	   r   >   s   dr   N)Ú__doc__Zwaitress.utilitiesr   r   r   r   r   r   r   r	   Ú<module>   s   *