B
    åCe„  ã               @   sJ   d dl Z d dlZd dlmZmZmZ dgZe  de j¡Z	G dd„ dƒZ
dS )é    N)ÚListÚOptionalÚUnionÚReceiveBuffers   
?
c               @   s¶   e Zd Zddœdd„Zeeef d dœdd„Zedœdd	„Z	e
dœd
d„Zedœdd„Ze
edœdd„Ze
ee dœdd„Zee dœdd„Zeee  dœdd„Zedœdd„ZdS )r   N)Úreturnc             C   s   t ƒ | _d| _d| _d S )Nr   )Ú	bytearrayÚ_dataÚ_next_line_searchÚ_multiple_lines_search)Úself© r   úf/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/h11/_receivebuffer.pyÚ__init__0   s    zReceiveBuffer.__init__)Ú	bytesliker   c             C   s   |  j |7  _ | S )N)r   )r   r   r   r   r   Ú__iadd__5   s    zReceiveBuffer.__iadd__c             C   s   t t| ƒƒS )N)ÚboolÚlen)r   r   r   r   Ú__bool__9   s    zReceiveBuffer.__bool__c             C   s
   t | jƒS )N)r   r   )r   r   r   r   Ú__len__<   s    zReceiveBuffer.__len__c             C   s
   t | jƒS )N)Úbytesr   )r   r   r   r   Ú	__bytes__@   s    zReceiveBuffer.__bytes__)Úcountr   c             C   s*   | j d |… }| j d |…= d| _d| _|S )Nr   )r   r	   r
   )r   r   Úoutr   r   r   Ú_extractC   s
    zReceiveBuffer._extractc             C   s    | j d|… }|sdS |  |¡S )zB
        Extract a fixed number of bytes from the buffer.
        N)r   r   )r   r   r   r   r   r   Úmaybe_extract_at_mostM   s    z#ReceiveBuffer.maybe_extract_at_mostc             C   sH   t d| jd ƒ}| j d|¡}|dkr6t| jƒ| _dS |d }|  |¡S )zK
        Extract the first line, if it is completed in the buffer.
        r   é   s   
éÿÿÿÿNé   )Úmaxr	   r   Úfindr   r   )r   Zsearch_start_indexZpartial_idxÚidxr   r   r   Úmaybe_extract_next_lineW   s    z%ReceiveBuffer.maybe_extract_next_linec             C   sâ   | j dd… dkr |  d¡ g S | j dd… dkr@|  d¡ g S t | j | j¡}|dkrrtdt| j ƒd ƒ| _dS | d¡d }|  |¡}| d¡}x|D ]}| 	d¡rš|d= qšW |d	 |d   krÎd
ksÔn t
‚|d	d…= |S )z\
        Extract everything up to the first blank line, and return a list of lines.
        Nr   ó   
r   s   
r   r   ó   éþÿÿÿó    )r   r   Úblank_line_regexÚsearchr
   r   r   ÚspanÚsplitÚendswithÚAssertionError)r   Úmatchr    r   ÚlinesÚliner   r   r   Úmaybe_extract_linesh   s&    






"
z!ReceiveBuffer.maybe_extract_linesc             C   s(   y| j d dk S  tk
r"   dS X d S )Nr   é!   F)r   Ú
IndexError)r   r   r   r   Ú+is_next_line_obviously_invalid_request_line“   s    z9ReceiveBuffer.is_next_line_obviously_invalid_request_line)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   Úintr   r   r   r   r   r!   r   r/   r2   r   r   r   r   r   /   s   

+)ÚreÚsysÚtypingr   r   r   Ú__all__ÚcompileÚ	MULTILINEr&   r   r   r   r   r   Ú<module>   s
   '