summaryrefslogtreecommitdiff
path: root/fs/multifs.py
diff options
context:
space:
mode:
authorwillmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f>2011-04-30 14:46:27 +0000
committerwillmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f>2011-04-30 14:46:27 +0000
commitdd808d7046169d9f980eb1c74b3f9c9d678d9802 (patch)
treeb7fc34970eeecd879dd71dafa578ba9bd3acb247 /fs/multifs.py
parentbdcfff9831879e0f41d9c53f27cd00b8f4c4ba28 (diff)
downloadpyfilesystem-git-dd808d7046169d9f980eb1c74b3f9c9d678d9802.tar.gz
implemented auto closing for multi/mount fs
Diffstat (limited to 'fs/multifs.py')
-rw-r--r--fs/multifs.py25
1 files changed, 22 insertions, 3 deletions
diff --git a/fs/multifs.py b/fs/multifs.py
index 11dbaf5..b0b5c33 100644
--- a/fs/multifs.py
+++ b/fs/multifs.py
@@ -83,12 +83,18 @@ class MultiFS(FS):
'case_insensitive_paths' : False
}
- def __init__(self):
+ def __init__(self, auto_close=True):
+ """
+
+ :param auto_close: If True the child filesystems will be closed when the MultiFS is closed
+
+ """
super(MultiFS, self).__init__(thread_synchronize=_thread_synchronize_default)
+ self.auto_close = auto_close
self.fs_sequence = []
self.fs_lookup = {}
- self.write_fs = None
+ self.write_fs = None
@synchronize
def __str__(self):
@@ -100,7 +106,20 @@ class MultiFS(FS):
def __unicode__(self):
return u"<MultiFS: %s>" % ", ".join(unicode(fs) for fs in self.fs_sequence)
-
+ @synchronize
+ def close(self):
+ # Explicitly close if requested
+ if self.auto_close:
+ for fs in self.fs_sequence:
+ fs.close()
+ if self.write_fs is not None:
+ self.write_fs.close()
+ # Discard any references
+ del self.fs_sequence[:]
+ self.fs_lookup.clear()
+ self.write_fs = None
+ super(MultiFS, self).close()
+
@synchronize
def addfs(self, name, fs, write=False):
"""Adds a filesystem to the MultiFS.