diff options
author | willmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f> | 2011-04-30 14:46:27 +0000 |
---|---|---|
committer | willmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f> | 2011-04-30 14:46:27 +0000 |
commit | dd808d7046169d9f980eb1c74b3f9c9d678d9802 (patch) | |
tree | b7fc34970eeecd879dd71dafa578ba9bd3acb247 /fs/multifs.py | |
parent | bdcfff9831879e0f41d9c53f27cd00b8f4c4ba28 (diff) | |
download | pyfilesystem-git-dd808d7046169d9f980eb1c74b3f9c9d678d9802.tar.gz |
implemented auto closing for multi/mount fs
Diffstat (limited to 'fs/multifs.py')
-rw-r--r-- | fs/multifs.py | 25 |
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. |