summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/filelike.py2
-rw-r--r--fs/opener.py25
2 files changed, 16 insertions, 11 deletions
diff --git a/fs/filelike.py b/fs/filelike.py
index 6714746..54b6519 100644
--- a/fs/filelike.py
+++ b/fs/filelike.py
@@ -465,7 +465,7 @@ class FileLikeBase(object):
sizeSoFar = len(newData)
while sizeSoFar < size:
newData = self._read(size-sizeSoFar)
- if newData is None:
+ if not newData:
break
data.append(newData)
sizeSoFar += len(newData)
diff --git a/fs/opener.py b/fs/opener.py
index 54cebe3..8500eac 100644
--- a/fs/opener.py
+++ b/fs/opener.py
@@ -121,14 +121,19 @@ def _split_url_path(url):
url = '%s://%s' % (scheme, netloc)
return url, path
-class _FSClosingFile(FileWrapper):
- """A file like object that closes its parent FS when closed itself"""
- def close(self):
- fs = getattr(self, '_closefs', None)
- ret = super(_FSClosingFile, self).close()
- if fs is not None:
- fs.close
- return ret
+
+def _FSClosingFile(fs, file_object, mode):
+ original_close = file_object.close
+
+ def close():
+ try:
+ fs.close()
+ except:
+ pass
+ return original_close()
+ file_object.close = close
+ return file_object
+
class OpenerRegistry(object):
@@ -267,8 +272,8 @@ class OpenerRegistry(object):
fs, path = self.parse(fs_url, writeable=writeable)
file_object = fs.open(path, mode)
- file_object = _FSClosingFile(file_object, mode)
- file_object.fs = fs
+ file_object = _FSClosingFile(fs, file_object, mode)
+ #file_object.fs = fs
return file_object
def getcontents(self, fs_url, mode='rb', encoding=None, errors=None, newline=None):