Skip to content

Instantly share code, notes, and snippets.

@hgdeoro
Created March 29, 2011 21:15
Show Gist options
  • Save hgdeoro/893328 to your computer and use it in GitHub Desktop.
Save hgdeoro/893328 to your computer and use it in GitHub Desktop.
File-like object for reading random data (usefull for testing)
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