
    
                     *    S r SSKJr   " S S\5      rg)zSmall helper class to provide a small slice of a stream.

This class reads ahead to detect if we are at the end of the stream.
    )
exceptionsc                   d    \ rS rSrSrS rS rS r\S 5       r	\S 5       r
\S 5       rSS
 jrSrg	)BufferedStream   zABuffers a stream, reading ahead to determine if we're at the end.c                     Xl         X l        SU l        U R                   R                  U5      U l        [        U R                  5      U:  U l        U R                  [        U R                  5      -   U l        g )Nr   )_BufferedStream__stream_BufferedStream__start_pos_BufferedStream__buffer_posread_BufferedStream__buffered_datalen_BufferedStream__stream_at_end_BufferedStream__end_pos)selfstreamstartsizes       3lib/third_party/apitools/base/py/buffered_stream.py__init__BufferedStream.__init__   sa     #}}11$7"4#7#784?))C0D0D,EE    c           	      x    SU R                   < SU R                  < SU R                  < SU R                  < S3	$ )NzBuffered stream z from position -z with z bytes remaining)r   r	   r   _bytes_remainingr   s    r   __str__BufferedStream.__str__&   s,    %)]]D4D4D%)^^T5J5JL 	Mr   c                 ,    [        U R                  5      $ N)r   r   r   s    r   __len__BufferedStream.__len__+   s    4''((r   c                     U R                   $ r   )r   r   s    r   stream_exhaustedBufferedStream.stream_exhausted.   s    ###r   c                     U R                   $ r   )r   r   s    r   stream_end_position"BufferedStream.stream_end_position2   s    ~~r   c                 F    [        U R                  5      U R                  -
  $ r   )r   r   r
   r   s    r   r   BufferedStream._bytes_remaining6   s    4''(4+<+<<<r   Nc                    Ub  US:  aS  [         R                  " SU< SU R                  < SU R                  < SU R                  < SU R
                  < S35      eSnU R
                  (       aP  [        XR
                  5      nU R                  U R                  U R                  U-    nU =R                  U-  sl        U$ )	zReads from the buffer.r   zIllegal read of size z- requested on BufferedStream. Wrapped stream z is at position r   z, z bytes remaining. )	r   NotYetImplementedErrorr   r	   r   r   minr   r
   )r   r   datas      r   r   BufferedStream.read:   s    <4!833 t}}d&6&6&&	() )   t223D''!!$"3"3d":<D%r   )__buffer_pos__buffered_data	__end_pos__start_pos__stream__stream_at_endr   )__name__
__module____qualname____firstlineno____doc__r   r   r    propertyr#   r&   r   r   __static_attributes__ r   r   r   r      sW    KFM
) $ $   = =r   r   N)r:   apitools.base.pyr   objectr   r=   r   r   <module>r@      s   "
 (0V 0r   