memoryfs.MemoryFile read() and write() methods now respect the file's open

mode. Fixes Issue113.
parent 83370fc4
...@@ -89,16 +89,22 @@ class MemoryFile(object): ...@@ -89,16 +89,22 @@ class MemoryFile(object):
pass pass
def __iter__(self): def __iter__(self):
if 'r' not in self.mode and '+' not in self.mode:
raise IOError("File not open for reading")
self.mem_file.seek(self.pos) self.mem_file.seek(self.pos)
for line in self.mem_file: for line in self.mem_file:
yield line yield line
@seek_and_lock @seek_and_lock
def next(self): def next(self):
if 'r' not in self.mode and '+' not in self.mode:
raise IOError("File not open for reading")
return self.mem_file.next() return self.mem_file.next()
@seek_and_lock @seek_and_lock
def readline(self, *args, **kwargs): def readline(self, *args, **kwargs):
if 'r' not in self.mode and '+' not in self.mode:
raise IOError("File not open for reading")
return self.mem_file.readline(*args, **kwargs) return self.mem_file.readline(*args, **kwargs)
def close(self): def close(self):
...@@ -115,6 +121,8 @@ class MemoryFile(object): ...@@ -115,6 +121,8 @@ class MemoryFile(object):
@seek_and_lock @seek_and_lock
def read(self, size=None): def read(self, size=None):
if 'r' not in self.mode and '+' not in self.mode:
raise IOError("File not open for reading")
if size is None: if size is None:
size = -1 size = -1
return self.mem_file.read(size) return self.mem_file.read(size)
...@@ -129,10 +137,14 @@ class MemoryFile(object): ...@@ -129,10 +137,14 @@ class MemoryFile(object):
@seek_and_lock @seek_and_lock
def truncate(self, *args, **kwargs): def truncate(self, *args, **kwargs):
if 'r' in self.mode and '+' not in self.mode:
raise IOError("File not open for writing")
return self.mem_file.truncate(*args, **kwargs) return self.mem_file.truncate(*args, **kwargs)
#@seek_and_lock #@seek_and_lock
def write(self, data): def write(self, data):
if 'r' in self.mode and '+' not in self.mode:
raise IOError("File not open for writing")
self.memory_fs._on_modify_memory_file(self.path) self.memory_fs._on_modify_memory_file(self.path)
self._lock.acquire() self._lock.acquire()
try: try:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment