|
"""This module implements a `Buffer` class for handling in-memory data storage, downloading streams, |
|
and redirecting content to standard output (stdout).""" |
|
|
|
import sys |
|
import io |
|
|
|
|
|
class Buffer: |
|
def __init__(self): |
|
""" |
|
Initializes the in-memory buffer to store data. |
|
""" |
|
self.buffer = io.BytesIO() |
|
|
|
def download_in_buffer(self, source): |
|
""" |
|
Downloads data directly into the buffer. Accepts objects with the `stream_to_buffer` |
|
method or strings. |
|
|
|
Args: |
|
source: Object or data to be written to the buffer. |
|
""" |
|
if hasattr(source, 'stream_to_buffer') and callable(source.stream_to_buffer): |
|
source.stream_to_buffer(self.buffer) |
|
elif isinstance(source, str): |
|
self.buffer.write(source.encode('utf-8')) |
|
else: |
|
raise TypeError("The provided object is not compatible for downloading into the buffer.") |
|
|
|
def redirect_to_stdout(self): |
|
""" |
|
Redirects the buffer's content to stdout. |
|
""" |
|
self.buffer.seek(0) |
|
sys.stdout.buffer.write(self.buffer.read()) |
|
|
|
def read(self): |
|
""" |
|
Reads the buffer's content. |
|
""" |
|
self.buffer.seek(0) |
|
return self.buffer.read() |
|
|
|
def clear(self): |
|
""" |
|
Clears the buffer for reuse. |
|
""" |
|
self.buffer = io.BytesIO() |