From 4ed850e83583a64e7d998f4f93f071bdbbb1dd21 Mon Sep 17 00:00:00 2001 From: "willmcgugan@gmail.com" Date: Sat, 18 Oct 2014 11:03:26 +0000 Subject: opener fix git-svn-id: http://pyfilesystem.googlecode.com/svn/trunk@900 67cdc799-7952-0410-af00-57a81ceafa0f --- fs/filelike.py | 2 +- fs/opener.py | 25 +++++++++++++++---------- 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): -- cgit v1.2.1