Class SlidingBuffer (2.14.0)


A non-rewindable buffer that frees memory of chunks already consumed.

This class is necessary because google-resumable-media-python expects tell() to work relative to the start of the file, not relative to a place in an intermediate buffer. Using this class, we present an external interface with consistent seek and tell behavior without having to actually store bytes already sent.

Behavior of this class differs from an ordinary BytesIO buffer. write() will always append to the end of the file only and not change the seek position otherwise. flush() will delete all data already read (data to the left of the seek position). tell() will report the seek position of the buffer including all deleted data. Additionally the class implements len() which will report the size of the actual underlying buffer.

This class does not attempt to implement the entire Python I/O interface.




Determine the size of the buffer by seeking to the end.



Delete already-read data (all data to the left of the position).



Read and move the cursor.



Seek to a position (backwards only) within the internal buffer.

This implementation of seek() verifies that the seek destination is contained in _buffer. It will raise ValueError if the destination byte has already been purged from the buffer.

The "whence" argument is not supported in this implementation.



Report how many bytes have been read from the buffer in total.



Append to the end of the buffer without changing the position.