diff options
author | willmcgugan@gmail.com <willmcgugan@gmail.com@67cdc799-7952-0410-af00-57a81ceafa0f> | 2014-10-18 11:03:26 +0000 |
---|---|---|
committer | willmcgugan@gmail.com <willmcgugan@gmail.com@67cdc799-7952-0410-af00-57a81ceafa0f> | 2014-10-18 11:03:26 +0000 |
commit | 43cf5d0093cc0ea1bfbf774d22e3bbed280c7c67 (patch) | |
tree | a7e0debb96ab6e8e765a7f552047e7d9687b7132 /fs/opener.py | |
parent | 369aa5f4627a47cc4fade7cc5c440be6a9387236 (diff) | |
download | pyfilesystem-git-43cf5d0093cc0ea1bfbf774d22e3bbed280c7c67.tar.gz |
opener fix
Diffstat (limited to 'fs/opener.py')
-rw-r--r-- | fs/opener.py | 25 |
1 files changed, 15 insertions, 10 deletions
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): |