
    D_	ho$                         S r SSKJr  SrSr " S S5      r " S S\5      r " S	 S
\5      rS r " S S\5      r	 " S S5      r
g)zBuffers
    BytesIOi   i    c                   `    \ rS rSrSrSS jrS rS rS rSS jr	SS	 jr
S
 rS rS rS rSrg)FileBasedBuffer   r   Nc                 b   Xl         Ub  UR                  5       nUR                  5       nUR                  S5         UR	                  [
        5      nU(       d  OUR                  U5        M0  [        UR                  5       U-
  5      U l        UR                  U5        UR                  U5        g g Nr   )	filegetfiletellseekread
COPY_BYTESwriteintremain)selfr
   from_buffer	from_fileread_posdatas         N/var/www/html/fileupload/venv/lib/python3.13/site-packages/waitress/buffers.py__init__FileBasedBuffer.__init__   s    	"#++-I ~~'HNN1 ~~j1

4 	 
 diikH45DKNN8$IIh #    c                     U R                   $ N)r   r   s    r   __len__FileBasedBuffer.__len__+   s    {{r   c                     g)NT r   s    r   __bool__FileBasedBuffer.__bool__.   s    r   c                     U R                   nUR                  5       nUR                  SS5        UR                  U5        UR                  U5        U R                  [        U5      -   U l        g Nr      )r
   r   r   r   r   len)r   sr
   r   s       r   appendFileBasedBuffer.append1   sN    yy99;		!Q

1		(kkCF*r   c                    U R                   nU(       d  UR                  5       nUS:  a  UR                  5       nOUR                  U5      nU(       a   U =R                  [	        U5      -  sl        U$ UR                  W5        U$ r	   )r
   r   r   r   r(   r   r   numbytesskipr
   r   ress         r   getFileBasedBuffer.get9   sh    yyyy{Ha<))+C))H%CKK3s8#K 
 IIh
r   c                     U R                   U:  a  [        SXR                   4-  5      eU R                  R                  US5        U R                   U-
  U l         g )Nz)Can't skip %d bytes in buffer of %d bytes   )r   
ValueErrorr
   r   )r   r.   allow_prunes      r   r/   FileBasedBuffer.skipH   sN    ;;!;x>UU  			x#kkH,r   c                     [        5       er   NotImplementedErrorr   s    r   newfileFileBasedBuffer.newfileP   s    !##r   c                 ^   U R                   nU R                  S:X  aJ  UR                  5       nUR                  SS5        UR                  5       nUR                  U5        US:X  a  g U R	                  5       n UR                  [        5      nU(       d  OUR                  U5        M0  X@l         g r&   )r
   r   r   r   r;   r   r   r   )r   r
   r   sznfr   s         r   pruneFileBasedBuffer.pruneS   s    yy;;!yy{HIIaOBIIhQw\\^99Z(DHHTN	 
 	r   c                     U R                   $ r   r
   r   s    r   r   FileBasedBuffer.getfilee   s    yyr   c                 |    [        U R                  S5      (       a  U R                  R                  5         SU l        g )Ncloser   )hasattrr
   rF   r   r   s    r   rF   FileBasedBuffer.closeh   s(    499g&&IIOOr   )r
   r   r   F)r   )__name__
__module____qualname____firstlineno__r   r   r   r#   r*   r1   r/   r;   r@   r   rF   __static_attributes__r"   r   r   r   r      s9    F +-$$r   r   c                   $    \ rS rSrSS jrS rSrg)TempfileBasedBuffern   Nc                 L    [         R                  X R                  5       U5        g r   )r   r   r;   r   r   s     r   r   TempfileBasedBuffer.__init__o   s      ||~{Cr   c                     SSK Jn  U" S5      $ )Nr   )TemporaryFilezw+b)tempfilerW   )r   rW   s     r   r;   TempfileBasedBuffer.newfiler   s    *U##r   r"   r   rK   rL   rM   rN   r   r;   rO   r"   r   r   rQ   rQ   n   s    D$r   rQ   c                   $    \ rS rSrSS jrS rSrg)BytesIOBasedBufferx   Nc                 h    Ub   [         R                  U [        5       U5        g [        5       U l        g r   )r   r   r   r
   rT   s     r   r   BytesIOBasedBuffer.__init__y   s'    "$$T79kB  	DIr   c                     [        5       $ r   r   r   s    r   r;   BytesIOBasedBuffer.newfile   s
    yr   rC   r   rZ   r"   r   r   r\   r\   x   s    "r   r\   c                     [        U S5      (       a  U R                  5       $ [        U S5      =(       a    [        U S5      $ )Nseekabler   r   )rG   rc   )fps    r   _is_seekablere      s4    r:{{}2v672v#66r   c                   H    \ rS rSrS
S jrSS jrSS jrS rS r\r	S r
S	rg)ReadOnlyFileBasedBuffer   c                 *   Xl         X l        [        U R                   5      (       am  [        U R                   S5      (       a  U R                   R                  U l        U R                   R
                  U l        U R                   R                  U l        g g )Nrc   )r
   
block_sizere   rG   rc   r   r   )r   r
   rj   s      r   r    ReadOnlyFileBasedBuffer.__init__   sb    	$
 		""tyy*-- $		 2 2		DI		DI #r   Nc                 v   [        U R                  5      (       a  U R                  R                  5       nU R                  R                  SS5        U R                  R                  5       nU R                  R                  U5        X2-
  nUc  X@l        U R                  $ [        XA5      U l        U R                  $ r&   )re   r
   r   r   r   min)r   size	start_posend_posfsizes        r   prepareReadOnlyFileBasedBuffer.prepare   s    		""		(IIINN1a iinn&GIINN9%'E|# {{ "%.{{r   c                     US:X  d  XR                   :  a  U R                   nU R                  nU(       d  UR                  5       nUR                  U5      nU(       a   U =R                   [	        U5      -  sl         U$ UR                  W5        U$ )NrJ   )r   r
   r   r   r(   r   r-   s         r   r1   ReadOnlyFileBasedBuffer.get   so    r>X3{{Hyyyy{Hii!KK3s8#K 
 IIh
r   c                     U $ r   r"   r   s    r   __iter__ ReadOnlyFileBasedBuffer.__iter__   s    r   c                 j    U R                   R                  U R                  5      nU(       d  [        eU$ r   )r
   r   rj   StopIteration)r   vals     r   nextReadOnlyFileBasedBuffer.next   s&    iinnT__-
r   c                     [         er   r9   )r   r)   s     r   r*   ReadOnlyFileBasedBuffer.append   s    !!r   )rj   r
   r   r   rc   r   )i   r   rI   )rK   rL   rM   rN   r   rr   r1   rw   r|   __next__r*   rO   r"   r   r   rg   rg      s'    ' H"r   rg   c                   t    \ rS rSrSrSrSrSrS rS r	S r
S	 rS
 rS rS rSS jrSS jrS rS rS rSrg)OverflowableBuffer   z
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                     Xl         g r   )overflow)r   r   s     r   r   OverflowableBuffer.__init__   s     r   c                 t    U R                   nUb  UR                  5       $ U R                  R                  5       $ r   )bufr   strbufr   r   s     r   r   OverflowableBuffer.__len__   s1    hh? ;;= ;;&&((r   c                 (    U R                  5       S:  $ r	   )r   r   s    r   r#   OverflowableBuffer.__bool__   s     ||~!!r   c                     U R                   n[        U5      U R                  :  a  U R                  5         OU R	                  5         U R
                  nU(       a"  UR                  U R                   5        SU l         U$ Nr   )r   r(   r   _set_large_buffer_set_small_bufferr   r*   )r   r   r   s      r   _create_buffer!OverflowableBuffer._create_buffer   s[    v;$--'""$""$hhJJt{{#DK
r   c                     U R                   n[        U5      U l         [        US5      (       a  UR                  5         SU l        g )NrF   F)r   r\   rG   rF   
overflowedr   oldbufs     r   r   $OverflowableBuffer._set_small_buffer   s6    %f- 67##LLNr   c                     U R                   n[        U5      U l         [        US5      (       a  UR                  5         SU l        g )NrF   T)r   rQ   rG   rF   r   r   s     r   r   $OverflowableBuffer._set_large_buffer   s6    &v. 67##LLNr   c                 R   U R                   nUcE  U R                  n[        U5      [        U5      -   [        :  a
  X1-   U l        g U R	                  5       nUR                  U5        UR                  5       nU R                  (       d!  X@R                  :  a  U R                  5         g g g r   )
r   r   r(   STRBUF_LIMITr   r*   r   r   r   r   )r   r)   r   r   r>   s        r   r*   OverflowableBuffer.append  s    hh;[[F6{SV#l2$j%%'C

1 [[]]]"&&( # r   c                     U R                   nUc%  U R                  nU(       d  U$ U R                  5       nUR                  X5      $ r   )r   r   r   r1   )r   r.   r/   r   r   s        r   r1   OverflowableBuffer.get  s>    hh;[[F%%'Cwwx&&r   c                     U R                   nUc8  U(       a!  U[        U R                  5      :X  a  SU l        g U R                  5       nUR	                  X5        g r   )r   r(   r   r   r/   )r   r.   r6   r   s       r   r/   OverflowableBuffer.skip  sI    hh;x3t{{+;; "%%'C'r   c                     U R                   nUc  SU l        gUR                  5         U R                  (       a1  UR	                  5       nX R
                  :  a  U R                  5         ggg)z\
A potentially expensive operation that removes all data
already retrieved from the buffer.
Nr   )r   r   r@   r   r   r   r   )r   r   r>   s      r   r@   OverflowableBuffer.prune*  sY    
 hh;DK		?? BMM!&&( "	 r   c                 `    U R                   nUc  U R                  5       nUR                  5       $ r   )r   r   r   r   s     r   r   OverflowableBuffer.getfile<  s*    hh;%%'C{{}r   c                 D    U R                   nUb  UR                  5         g g r   )r   rF   r   s     r   rF   OverflowableBuffer.closeB  s    hh?IIK r   )r   r   r   r   rI   )F)rK   rL   rM   rN   __doc__r   r   r   r   r   r#   r   r   r   r*   r1   r/   r@   r   rF   rO   r"   r   r   r   r      sT     J
CF!)"

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