o
    £Çh„  ã                   @   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„Zdeeef dd fdd„Zdefdd	„Z	de
fd
d„Zdefdd„Zde
defdd„Zde
dee fdd„Zdee fdd„Zdeee  fdd„Zdefdd„ZdS )r   ÚreturnNc                 C   s   t ƒ | _d| _d| _d S ©Nr   )Ú	bytearrayÚ_dataÚ_next_line_searchÚ_multiple_lines_search©Úself© r   úf/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/h11/_receivebuffer.pyÚ__init__0   s   
zReceiveBuffer.__init__Ú	byteslikec                 C   s   |  j |7  _ | S ©N)r	   )r   r   r   r   r   Ú__iadd__5   s   zReceiveBuffer.__iadd__c                 C   s   t t| ƒƒS r   )ÚboolÚlenr   r   r   r   Ú__bool__9   s   zReceiveBuffer.__bool__c                 C   ó
   t | jƒS r   )r   r	   r   r   r   r   Ú__len__<   ó   
zReceiveBuffer.__len__c                 C   r   r   )Úbytesr	   r   r   r   r   Ú	__bytes__@   r   zReceiveBuffer.__bytes__Úcountc                 C   s*   | j d |… }| j d |…= d| _d| _|S r   )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   Úmaybe_extract_at_mostM   s   
z#ReceiveBuffer.maybe_extract_at_mostc                 C   sH   t d| jd ƒ}| j d|¡}|dkrt| jƒ| _dS |d }|  |¡S )zK
        Extract the first line, if it is completed in the buffer.
        r   é   ó   
éÿÿÿÿNé   )Úmaxr
   r	   Úfindr   r   )r   Úsearch_start_indexÚ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u r9tdt| j ƒd ƒ| _dS | d¡d }|  |¡}| d¡}|D ]
}| 	d¡rV|d= qL|d	 |d   krfd
ksiJ ‚ J ‚|d	d…= |S )z\
        Extract everything up to the first blank line, and return a list of lines.
        Nr!   ó   
r$   r"   r   r#   ó   éþÿÿÿó    )
r	   r   Úblank_line_regexÚsearchr   r%   r   ÚspanÚsplitÚendswith)r   Úmatchr)   r   ÚlinesÚliner   r   r   Úmaybe_extract_linesh   s(   




€$
z!ReceiveBuffer.maybe_extract_linesc                 C   s&   z| j d dk W S  ty   Y dS w )Nr   é!   F)r	   Ú
IndexErrorr   r   r   r   Ú+is_next_line_obviously_invalid_request_line“   s
   ÿz9ReceiveBuffer.is_next_line_obviously_invalid_request_line)r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   Úintr   r   r   r   r    r*   r   r7   r:   r   r   r   r   r   /   s    


+)ÚreÚsysÚtypingr   r   r   Ú__all__ÚcompileÚ	MULTILINEr/   r   r   r   r   r   Ú<module>   s    '