a
    eÝìho$  ã                   @   sp   d Z ddlmZ dZdZG dd„ dƒZG dd„ deƒZG d	d
„ d
eƒZdd„ ZG dd„ deƒZ	G dd„ dƒZ
dS )zBuffers
é    ©ÚBytesIOi   i    c                   @   sf   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zddd„Zddd„Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚFileBasedBufferr   Nc                 C   sn   || _ |d urj| ¡ }| ¡ }| d¡ | t¡}|s8qD| |¡ q(t| ¡ | ƒ| _| |¡ | |¡ d S ©Nr   )	ÚfileÚgetfileÚtellÚseekÚreadÚ
COPY_BYTESÚwriteÚintÚremain)Úselfr   Úfrom_bufferÚ	from_fileÚread_posÚdata© r   úL/var/www/html/requester/venv/lib/python3.9/site-packages/waitress/buffers.pyÚ__init__   s    


zFileBasedBuffer.__init__c                 C   s   | j S ©N)r   ©r   r   r   r   Ú__len__+   s    zFileBasedBuffer.__len__c                 C   s   dS )NTr   r   r   r   r   Ú__bool__.   s    zFileBasedBuffer.__bool__c                 C   sB   | j }| ¡ }| dd¡ | |¡ | |¡ | jt|ƒ | _d S ©Nr   é   )r   r   r	   r   r   Úlen)r   Úsr   r   r   r   r   Úappend1   s    

zFileBasedBuffer.appendéÿÿÿÿFc                 C   sT   | j }|s| ¡ }|dk r$| ¡ }n
| |¡}|rF|  jt|ƒ8  _n
| |¡ |S r   )r   r   r
   r   r   r	   ©r   ÚnumbytesÚskipr   r   Úresr   r   r   Úget9   s    


zFileBasedBuffer.getc                 C   s:   | j |k rtd|| j f ƒ‚| j |d¡ | j | | _ d S )Nz)Can't skip %d bytes in buffer of %d bytesé   )r   Ú
ValueErrorr   r	   )r   r"   Úallow_pruner   r   r   r#   H   s    
ÿzFileBasedBuffer.skipc                 C   s
   t ƒ ‚d S r   ©ÚNotImplementedErrorr   r   r   r   ÚnewfileP   s    zFileBasedBuffer.newfilec                 C   sp   | j }| jdkrB| ¡ }| dd¡ | ¡ }| |¡ |dkrBd S |  ¡ }| t¡}|sZqf| |¡ qJ|| _ d S r   )r   r   r   r	   r+   r
   r   r   )r   r   r   ÚszÚnfr   r   r   r   ÚpruneS   s    


zFileBasedBuffer.prunec                 C   s   | j S r   )r   r   r   r   r   r   e   s    zFileBasedBuffer.getfilec                 C   s    t | jdƒr| j ¡  d| _d S )NÚcloser   )Úhasattrr   r/   r   r   r   r   r   r/   h   s    
zFileBasedBuffer.close)N)r    F)r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r%   r#   r+   r.   r   r/   r   r   r   r   r      s   


r   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚTempfileBasedBufferNc                 C   s   t  | |  ¡ |¡ d S r   )r   r   r+   ©r   r   r   r   r   r   o   s    zTempfileBasedBuffer.__init__c                 C   s   ddl m} |dƒS )Nr   )ÚTemporaryFilezw+b)Útempfiler6   )r   r6   r   r   r   r+   r   s    zTempfileBasedBuffer.newfile)N©r1   r2   r3   r   r+   r   r   r   r   r4   n   s   
r4   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚBytesIOBasedBufferNc                 C   s&   |d urt  | tƒ |¡ ntƒ | _d S r   )r   r   r   r   r5   r   r   r   r   y   s    zBytesIOBasedBuffer.__init__c                 C   s   t ƒ S r   r   r   r   r   r   r+   €   s    zBytesIOBasedBuffer.newfile)Nr8   r   r   r   r   r9   x   s   
r9   c                 C   s&   t | dƒr|  ¡ S t | dƒo$t | dƒS )NÚseekabler	   r   )r0   r:   )Úfpr   r   r   Ú_is_seekable„   s    
r<   c                   @   sF   e Zd Zddd„Zddd„Zdd	d
„Zdd„ Zdd„ ZeZdd„ Z	dS )ÚReadOnlyFileBasedBufferé €  c                 C   sD   || _ || _t| j ƒr@t| j dƒr,| j j| _| j j| _| j j| _d S )Nr:   )r   Ú
block_sizer<   r0   r:   r	   r   )r   r   r?   r   r   r   r      s    


z ReadOnlyFileBasedBuffer.__init__Nc                 C   sb   t | jƒr\| j ¡ }| j dd¡ | j ¡ }| j |¡ || }|d u rP|| _nt||ƒ| _| jS r   )r<   r   r   r	   r   Úmin)r   ÚsizeZ	start_posZend_posÚfsizer   r   r   Úprepare›   s    


zReadOnlyFileBasedBuffer.preparer    Fc                 C   sZ   |dks|| j kr| j }| j}|s*| ¡ }| |¡}|rL|  j t|ƒ8  _ n
| |¡ |S )Nr    )r   r   r   r
   r   r	   r!   r   r   r   r%   ¨   s    

zReadOnlyFileBasedBuffer.getc                 C   s   | S r   r   r   r   r   r   Ú__iter__¶   s    z ReadOnlyFileBasedBuffer.__iter__c                 C   s   | j  | j¡}|st‚|S r   )r   r
   r?   ÚStopIteration)r   Úvalr   r   r   Únext¹   s    zReadOnlyFileBasedBuffer.nextc                 C   s   t ‚d S r   r)   )r   r   r   r   r   r   Á   s    zReadOnlyFileBasedBuffer.append)r>   )N)r    F)
r1   r2   r3   r   rC   r%   rD   rG   Ú__next__r   r   r   r   r   r=   Š   s   


r=   c                   @   s€   e 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d„ Zdd„ Zddd„Zddd„Zdd„ Zdd„ Zdd„ ZdS ) ÚOverflowableBufferzÏ
    This buffer implementation has four stages:
    - No data
    - Bytes-based buffer
    - BytesIO-based buffer
    - Temporary file storage
    The first two stages are fastest for simple transfers.
    FNó    c                 C   s
   || _ d S r   )Úoverflow)r   rK   r   r   r   r   Ó   s    zOverflowableBuffer.__init__c                 C   s$   | j }|d ur| ¡ S | j ¡ S d S r   )Úbufr   Ústrbuf©r   rL   r   r   r   r   ×   s    zOverflowableBuffer.__len__c                 C   s   |   ¡ dkS r   )r   r   r   r   r   r   à   s    zOverflowableBuffer.__bool__c                 C   sF   | j }t|ƒ| jkr|  ¡  n|  ¡  | j}|rB| | j ¡ d| _ |S ©NrJ   )rM   r   rK   Ú_set_large_bufferÚ_set_small_bufferrL   r   )r   rM   rL   r   r   r   Ú_create_bufferå   s    
z!OverflowableBuffer._create_bufferc                 C   s,   | j }t|ƒ| _ t|dƒr"| ¡  d| _d S )Nr/   F)rL   r9   r0   r/   Ú
overflowed©r   Zoldbufr   r   r   rQ   ñ   s
    

z$OverflowableBuffer._set_small_bufferc                 C   s,   | j }t|ƒ| _ t|dƒr"| ¡  d| _d S )Nr/   T)rL   r4   r0   r/   rS   rT   r   r   r   rP   û   s
    

z$OverflowableBuffer._set_large_bufferc                 C   sl   | j }|d u r>| j}t|ƒt|ƒ tk r6|| | _d S |  ¡ }| |¡ | ¡ }| jsh|| jkrh|  	¡  d S r   )
rL   rM   r   ÚSTRBUF_LIMITrR   r   r   rS   rK   rP   )r   r   rL   rM   r,   r   r   r   r     s    


zOverflowableBuffer.appendr    c                 C   s0   | j }|d u r$| j}|s|S |  ¡ }| ||¡S r   )rL   rM   rR   r%   )r   r"   r#   rL   rM   r   r   r   r%     s    zOverflowableBuffer.getc                 C   sB   | j }|d u r2|r*|t| jƒkr*d| _d S |  ¡ }| ||¡ d S rO   )rL   r   rM   rR   r#   )r   r"   r(   rL   r   r   r   r#     s    zOverflowableBuffer.skipc                 C   sD   | j }|du rd| _dS | ¡  | jr@| ¡ }|| jk r@|  ¡  dS )zt
        A potentially expensive operation that removes all data
        already retrieved from the buffer.
        NrJ   )rL   rM   r.   rS   r   rK   rQ   )r   rL   r,   r   r   r   r.   *  s    
zOverflowableBuffer.prunec                 C   s   | j }|d u r|  ¡ }| ¡ S r   )rL   rR   r   rN   r   r   r   r   <  s    zOverflowableBuffer.getfilec                 C   s   | j }|d ur| ¡  d S r   )rL   r/   rN   r   r   r   r/   B  s    zOverflowableBuffer.close)r    F)F)r1   r2   r3   Ú__doc__rS   rL   rM   r   r   r   rR   rQ   rP   r   r%   r#   r.   r   r/   r   r   r   r   rI   Å   s    		


	
rI   N)rV   Úior   r   rU   r   r4   r9   r<   r=   rI   r   r   r   r   Ú<module>   s   U
;