
    7io$                         d Z ddlmZ dZdZ G d d      Z G d de      Z G d	 d
e      Zd Z G d de      Z	 G d d      Z
y)zBuffers
    BytesIOi   i    c                   R    e Zd ZdZddZd Zd Zd ZddZddZ	d	 Z
d
 Zd Zd Zy)FileBasedBufferr   Nc                 V   || _         ||j                         }|j                         }|j                  d       	 |j	                  t
              }|sn|j                  |       *t        |j                         |z
        | _        |j                  |       |j                  |       y y Nr   )	filegetfiletellseekread
COPY_BYTESwriteintremain)selfr	   from_buffer	from_fileread_posdatas         C/var/www/html/venv/lib/python3.12/site-packages/waitress/buffers.py__init__zFileBasedBuffer.__init__   s    	"#++-I ~~'HNN1 ~~j1

4 	 
 diikH45DKNN8$IIh #    c                     | j                   S N)r   r   s    r   __len__zFileBasedBuffer.__len__+   s    {{r   c                      y)NT r   s    r   __bool__zFileBasedBuffer.__bool__.   s    r   c                     | j                   }|j                         }|j                  dd       |j                  |       |j                  |       | j                  t        |      z   | _        y Nr      )r	   r   r   r   r   len)r   sr	   r   s       r   appendzFileBasedBuffer.append1   sN    yy99;		!Q

1		(kkCF*r   c                     | j                   }|s|j                         }|dk  r|j                         }n|j                  |      }|r | xj                  t	        |      z  c_        |S |j                         |S r   )r	   r   r   r   r$   r   r   numbytesskipr	   r   ress         r   getzFileBasedBuffer.get9   sh    yyyy{Ha<))+C))H%CKK3s8#K 
 IIh
r   c                     | j                   |k  rt        d|| j                   fz        | j                  j                  |d       | j                   |z
  | _         y )Nz)Can't skip %d bytes in buffer of %d bytes   )r   
ValueErrorr	   r   )r   r)   allow_prunes      r   r*   zFileBasedBuffer.skipH   sP    ;;!;x>UU  			x#kkH,r   c                     t               r   NotImplementedErrorr   s    r   newfilezFileBasedBuffer.newfileP   s    !##r   c                 P   | j                   }| j                  dk(  rI|j                         }|j                  dd       |j                         }|j                  |       |dk(  ry | j	                         }	 |j                  t              }|s		 || _         y |j                  |       2r"   )r	   r   r   r   r4   r   r   r   )r   r	   r   sznfr   s         r   prunezFileBasedBuffer.pruneS   s    yy;;!yy{HIIaOBIIhQw\\^99Z(D	 HHTN	 r   c                     | j                   S r   )r	   r   s    r   r
   zFileBasedBuffer.getfilee   s    yyr   c                 r    t        | j                  d      r| j                  j                          d| _        y )Ncloser   )hasattrr	   r;   r   r   s    r   r;   zFileBasedBuffer.closeh   s%    499g&IIOOr   r   F)r   )__name__
__module____qualname__r   r   r   r    r&   r,   r*   r4   r8   r
   r;   r   r   r   r   r      s9    F +-$$r   r   c                       e Zd ZddZd Zy)TempfileBasedBufferNc                 N    t         j                  | | j                         |       y r   )r   r   r4   r   r   s     r   r   zTempfileBasedBuffer.__init__o   s      t||~{Cr   c                     ddl m}  |d      S )Nr   )TemporaryFilezw+b)tempfilerG   )r   rG   s     r   r4   zTempfileBasedBuffer.newfiler   s    *U##r   r   r?   r@   rA   r   r4   r   r   r   rC   rC   n   s    D$r   rC   c                       e Zd ZddZd Zy)BytesIOBasedBufferNc                 f    | t         j                  | t               |       y t               | _        y r   )r   r   r   r	   rE   s     r   r   zBytesIOBasedBuffer.__init__y   s'    "$$T79kB  	DIr   c                     t               S r   r   r   s    r   r4   zBytesIOBasedBuffer.newfile   s
    yr   r   rI   r   r   r   rK   rK   x   s    "r   rK   c                 n    t        | d      r| j                         S t        | d      xr t        | d      S )Nseekabler   r   )r<   rO   )fps    r   _is_seekablerQ      s1    r:{{}2v672v#66r   c                   :    e Zd ZddZd	dZd
dZd Zd ZeZd Z	y)ReadOnlyFileBasedBufferc                    || _         || _        t        | j                         rht        | j                   d      r| j                   j                  | _        | j                   j
                  | _        | j                   j                  | _        y y )NrO   )r	   
block_sizerQ   r<   rO   r   r   )r   r	   rU   s      r   r   z ReadOnlyFileBasedBuffer.__init__   s`    	$
 		"tyy*- $		 2 2		DI		DI #r   Nc                 p   t        | j                        r| j                  j                         }| j                  j                  dd       | j                  j                         }| j                  j                  |       ||z
  }||| _        | j                  S t        ||      | _        | j                  S r"   )rQ   r	   r   r   r   min)r   size	start_posend_posfsizes        r   preparezReadOnlyFileBasedBuffer.prepare   s    		"		(IIINN1a iinn&GIINN9%i'E|# {{ "%.{{r   c                 
   |dk(  s|| j                   kD  r| j                   }| j                  }|s|j                         }|j                  |      }|r | xj                   t	        |      z  c_         |S |j                         |S )Nr>   )r   r	   r   r   r$   r   r(   s         r   r,   zReadOnlyFileBasedBuffer.get   sq    r>X3{{Hyyyy{Hii!KK3s8#K 
 IIh
r   c                     | S r   r   r   s    r   __iter__z ReadOnlyFileBasedBuffer.__iter__   s    r   c                 `    | j                   j                  | j                        }|st        |S r   )r	   r   rU   StopIteration)r   vals     r   nextzReadOnlyFileBasedBuffer.next   s&    iinnT__-
r   c                     t         r   r2   )r   r%   s     r   r&   zReadOnlyFileBasedBuffer.append   s    !!r   )i   r   r=   )
r?   r@   rA   r   r\   r,   r_   rc   __next__r&   r   r   r   rS   rS      s'    ' H"r   rS   c                   h    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d	 Zd
 Zd ZddZddZd Zd Zd Zy)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.
    FNr   c                     || _         y r   )overflow)r   ri   s     r   r   zOverflowableBuffer.__init__   s	     r   c                 r    | j                   }||j                         S | j                  j                         S r   )bufr   strbufr   rk   s     r   r   zOverflowableBuffer.__len__   s1    hh? ;;= ;;&&((r   c                 (    | j                         dkD  S r   )r   r   s    r   r    zOverflowableBuffer.__bool__   s     ||~!!r   c                     | j                   }t        |      | j                  k\  r| j                          n| j	                          | j
                  }|r"|j                  | j                          d| _         |S Nr   )rl   r$   ri   _set_large_buffer_set_small_bufferrk   r&   )r   rl   rk   s      r   _create_bufferz!OverflowableBuffer._create_buffer   s[    v;$--'""$""$hhJJt{{#DK
r   c                     | j                   }t        |      | _         t        |d      r|j                          d| _        y )Nr;   F)rk   rK   r<   r;   
overflowedr   oldbufs     r   rr   z$OverflowableBuffer._set_small_buffer   s3    %f- 67#LLNr   c                     | j                   }t        |      | _         t        |d      r|j                          d| _        y )Nr;   T)rk   rC   r<   r;   ru   rv   s     r   rq   z$OverflowableBuffer._set_large_buffer   s3    &v. 67#LLNr   c                 F   | j                   }|E| j                  }t        |      t        |      z   t        k  r||z   | _        y | j	                         }|j                  |       |j                         }| j                  s!|| j                  k\  r| j                          y y y r   )
rk   rl   r$   STRBUF_LIMITrs   r&   r   ru   ri   rq   )r   r%   rk   rl   r6   s        r   r&   zOverflowableBuffer.append  s    hh;[[F6{SV#l2$qj%%'C

1 [[]T]]"&&( # r   c                     | j                   }| | j                  }|s|S | j                         }|j                  ||      S r   )rk   rl   rs   r,   )r   r)   r*   rk   rl   s        r   r,   zOverflowableBuffer.get  s@    hh;[[F%%'Cwwx&&r   c                     | j                   }|2|r |t        | j                        k(  rd| _        y | j                         }|j	                  ||       y rp   )rk   r$   rl   rs   r*   )r   r)   r0   rk   s       r   r*   zOverflowableBuffer.skip  sK    hh;x3t{{+;; "%%'C;'r   c                     | j                   }|d| _        y|j                          | j                  r1|j	                         }|| j
                  k  r| j                          yyy)zt
        A potentially expensive operation that removes all data
        already retrieved from the buffer.
        Nr   )rk   rl   r8   ru   r   ri   rr   )r   rk   r6   s      r   r8   zOverflowableBuffer.prune*  s[    
 hh;DK		?? BDMM!&&( "	 r   c                 ^    | j                   }|| j                         }|j                         S r   )rk   rs   r
   rm   s     r   r
   zOverflowableBuffer.getfile<  s*    hh;%%'C{{}r   c                 B    | j                   }||j                          y y r   )rk   r;   rm   s     r   r;   zOverflowableBuffer.closeB  s    hh?IIK r   r=   )F)r?   r@   rA   __doc__ru   rk   rl   r   r   r    rs   rr   rq   r&   r,   r*   r8   r
   r;   r   r   r   rg   rg      sT     J
CF!)"

 ) '
()$r   rg   N)r   ior   r   rz   r   rC   rK   rQ   rS   rg   r   r   r   <module>r      s^     
 R Rj$/ $	 	78"o 8"v@ @r   