Created
March 29, 2011 21:15
-
-
Save hgdeoro/893328 to your computer and use it in GitHub Desktop.
File-like object for reading random data (usefull for testing)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
def rnd_byte(): | |
return chr(random.randint(0, 255)) | |
class FakeReadOnlyBinaryFile: | |
""" | |
File-like object for reading random data. The ammount of data to generate | |
is specified when the object is created. | |
Usage: | |
file_like_object = FakeReadOnlyBinaryFile(1024 * 1024) | |
The file_like_object will provide 1MiB of random data. | |
""" | |
def __init__(self, size): | |
self.size = size | |
self.read_count = 0 | |
# http://docs.python.org/release/2.5.2/lib/bltin-file-objects.html | |
def close(self): | |
pass # no-op | |
def flush(self): | |
pass # no-op | |
def next(self): | |
return self.readline() | |
def read(self, size=-1): | |
if self.read_count >= self.size: | |
return '' | |
if size == -1: | |
size = self.size - self.read_count | |
if size+self.read_count > self.size: | |
size = self.size - self.read_count | |
self.read_count = self.read_count + size | |
byte_list = [rnd_byte() for random_int in range(0, size)] | |
return ''.join(byte_list) | |
def readline(self): | |
return self.read().replace('\n', '\x00') | |
def readlines(self): | |
return self.read().split() | |
def xreadlines(self): | |
raise(IOError("xreadlines() isn't implemented")) | |
def seek(self, offset, whence=None): | |
raise(IOError("seek() isn't implemented")) | |
def tell(self): | |
raise(IOError("tell() isn't implemented")) | |
def truncate(self, size=None): | |
raise(IOError("File not open for writing")) | |
def write(self): | |
raise(IOError("File not open for writing")) | |
def writelines(self): | |
raise(IOError("File not open for writing")) | |
#def fileno(self): | |
# pass | |
#def isatty(self): | |
# pass | |
if __name__ == '__main__': | |
import pprint | |
f = FakeReadOnlyBinaryFile(256) | |
pprint.pprint(f.read(1024)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment