summaryrefslogtreecommitdiff
path: root/fs/opener.py
diff options
context:
space:
mode:
Diffstat (limited to 'fs/opener.py')
-rw-r--r--fs/opener.py25
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):