a
    %g                     @   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   U/var/www/html/llm_bihealth/app/venv/lib/python3.9/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 r   )boollenr   r   r   r   __bool__9   s    zReceiveBuffer.__bool__c                 C   s
   t | jS r   )r   r	   r   r   r   r   __len__<   s    zReceiveBuffer.__len__c                 C   s
   t | jS r   )bytesr	   r   r   r   r   	__bytes__@   s    zReceiveBuffer.__bytes__)countr   c                 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r6t| j| _dS |d }| |S )zK
        Extract the first line, if it is completed in the buffer.
        r         
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u rrtdt| j d | _dS |dd }| |}|d}|D ]}|	dr|d= q|d	 |d   krd
ksn 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 0 d S )Nr   !   F)r	   
IndexErrorr   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   r3   r6   r   r   r   r   r   /   s   

+)resystypingr   r   r   __all__compile	MULTILINEr+   r   r   r   r   r   <module>   s
   '