o
    Th                     @   s`   d dl Z d dlZd dlmZmZmZ G dd dZG dd dZG dd dZG d	d
 d
Z	dS )    N)
NoMoreDataChunkMissingTerminatorInvalidChunkSizec                   @   s>   e Zd Zdd Zdd Zdd Zdd Zdd
dZdd Zd	S )ChunkedReaderc                 C   s    || _ | || _t | _d S N)reqparse_chunkedparserioBytesIObuf)selfr   unreader r   T/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/gunicorn/http/body.py__init__   s   zChunkedReader.__init__c                 C   s   t |ts	td|dk rtd|dkrdS | jr@| j |k r@z| jt| j W n t	y8   d | _Y nw | j |k s!| j
 }|d | ||d  }}t | _| j| |S )Nzsize must be an integer typer   Size must be positive.    )
isinstanceint	TypeError
ValueErrorr	   r   tellwritenextStopIterationgetvaluer
   r   r   sizedataretrestr   r   r   read   s(   


zChunkedReader.readc                 C   s   t  }|| | d}| d d dk}|dk r=|s=| || | d}| d d dk}|dk r=|r |rL|| dd   dS | jj| d | dd| j_	|| |d d   d S )	Ns   

      
r   r   T)from_trailer   )
r
   r   r   r   findget_dataunreadr   parse_headerstrailers)r   r   r   r   idxdoner   r   r   parse_trailers(   s   
 zChunkedReader.parse_trailersc                 c   s    |  |\}}|dkrq|t|kr*|t|8 }|V  | }|s$t |t|ks|d | V  ||d  }t|dk rN| }|sDn
||7 }t|dk s=|d d dkr^t|d d | j ||dd  d\}}|dksd S d S )Nr   r#   r$   )r   )parse_chunk_sizelenr"   r   r   )r   r   r   r!   new_datar   r   r   r   8   s,   zChunkedReader.parse_chunkedNc           	      C   s  t  }|d ur|| | d}|dk r)| || | d}|dk s| }|d | ||d d  }}|dd^}}|rK|d}tdd |D rXt	|t
|dkrbt	|t|d	}|dkrz	| || W d
S  ty~   Y d
S w ||fS )Nr$   r   r#      ;   s    	c                 s   s    | ]}|d vV  qdS )s   0123456789abcdefABCDEFNr   ).0nr   r   r   	<genexpr>^   s    z1ChunkedReader.parse_chunk_size.<locals>.<genexpr>   )r   N)r
   r   r   r   r'   r(   splitrstripanyr   r0   r   r.   r   )	r   r   r   r   r,   line
rest_chunk
chunk_size	chunk_extr   r   r   r/   M   s6   


zChunkedReader.parse_chunk_sizec                 C   s    |  }|s	t || d S r   )r"   r   r   )r   r   r   r   r   r   r   r(   l   s   zChunkedReader.get_datar   )	__name__
__module____qualname__r   r"   r.   r   r/   r(   r   r   r   r   r      s    
r   c                   @      e Zd Zdd Zdd ZdS )LengthReaderc                 C   s   || _ || _d S r   )r   length)r   r   rD   r   r   r   r   t   s   
zLengthReader.__init__c                 C   s   t |ts	tdt| j|}|dk rtd|dkrdS t }| j	 }|r;|
| | |kr4n| j	 }|s(| }|d | ||d  }}| j| |  j|8  _|S )Nsize must be an integral typer   r   r   )r   r   r   minrD   r   r
   r   r   r"   r   r   r   r)   )r   r   r   r   r    r!   r   r   r   r"   x   s(   



zLengthReader.readNr?   r@   rA   r   r"   r   r   r   r   rC   s   s    rC   c                   @   rB   )	EOFReaderc                 C   s   || _ t | _d| _d S )NF)r   r
   r   r   finished)r   r   r   r   r   r      s   

zEOFReader.__init__c                 C   s   t |ts	td|dk rtd|dkrdS | jr9| j }|d | ||d  }}t | _| j	| |S | j
 }|rU| j	| | j |krNn| j
 }|s@|sZd| _| j }|d | ||d  }}t | _| j	| |S )NrE   r   r   r   T)r   r   r   r   rI   r   r   r
   r   r   r   r"   r   r   r   r   r   r"      s4   






zEOFReader.readNrG   r   r   r   r   rH      s    rH   c                   @   sN   e Zd Zdd Zdd Zdd ZeZdd Zdd
dZdddZ	dddZ
d	S )Bodyc                 C   s   || _ t | _d S r   )readerr
   r   r   )r   rK   r   r   r   r      s   zBody.__init__c                 C   s   | S r   r   )r   r   r   r   __iter__   s   zBody.__iter__c                 C   s   |   }|s	t |S r   )readliner   )r   r    r   r   r   __next__   s   zBody.__next__c                 C   s2   |d u rt jS t|tstd|dk rt jS |S )NrE   r   )sysmaxsizer   r   r   )r   r   r   r   r   getsize   s   
zBody.getsizeNc                 C   s   |  |}|dkrdS || j k r1| j }|d | ||d  }}t | _| j| |S || j krN| jd}|sAn| j| || j ks8| j }|d | ||d  }}t | _| j| |S )Nr   r      )	rQ   r   r   r   r
   r   r   rK   r"   r   r   r   r   r"      s(   




z	Body.readc                 C   s   |  |}|dkrdS | j }t | _g }	 |dd|}|dkr'|d n	t||kr/|nd}|rG||d |  | j||d   n|| |t|8 }| j	
td|}|s^nqd|S )Nr   r   r3      
rR   )rQ   r   r   r
   r   r'   r0   appendr   rK   r"   rF   join)r   r   r   r    r,   r   r   r   rM      s(   


$

zBody.readlinec                 C   sf   g }|   }|r1|d}|dk r|| d}n|d |d  ||d d  }}|| |s|S )NrS   r   r   r3   )r"   r'   rT   )r   r   r    r   posr;   r   r   r   	readlines  s   

"
zBody.readlinesr   )r?   r@   rA   r   rL   rN   r   rQ   r"   rM   rW   r   r   r   r   rJ      s    
	
rJ   )
r
   rO   gunicorn.http.errorsr   r   r   r   rC   rH   rJ   r   r   r   r   <module>   s   g&