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 | 2bb0e56edc82c7765c698a665bdad2bc4280860a (patch) | |
tree | b7fc34970eeecd879dd71dafa578ba9bd3acb247 /fs/mountfs.py | |
parent | 6a10162f5acc344b631a9b7d87dc19cc3194901d (diff) | |
download | pyfilesystem-2bb0e56edc82c7765c698a665bdad2bc4280860a.tar.gz |
implemented auto closing for multi/mount fs
git-svn-id: http://pyfilesystem.googlecode.com/svn/trunk@700 67cdc799-7952-0410-af00-57a81ceafa0f
Diffstat (limited to 'fs/mountfs.py')
-rw-r--r-- | fs/mountfs.py | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/fs/mountfs.py b/fs/mountfs.py index d4f4ce4..ee6e615 100644 --- a/fs/mountfs.py +++ b/fs/mountfs.py @@ -51,7 +51,7 @@ from fs import _thread_synchronize_default class DirMount(object): def __init__(self, path, fs): self.path = path - self.fs = fs + self.fs = fs def __str__(self): return "Mount point: <%s,%s>" % (self.path,self.fs,) @@ -71,7 +71,6 @@ class FileMount(object): class MountFS(FS): """A filesystem that delegates to other filesystems.""" - _meta = { 'virtual': True, 'read_only' : False, 'unicode_paths' : True, @@ -81,9 +80,10 @@ class MountFS(FS): DirMount = DirMount FileMount = FileMount - def __init__(self, thread_synchronize=_thread_synchronize_default): + def __init__(self, auto_close=True, thread_synchronize=_thread_synchronize_default): + self.auto_close = auto_close super(MountFS, self).__init__(thread_synchronize=thread_synchronize) - self.mount_tree = PathMap() + self.mount_tree = PathMap() def __str__(self): return "<%s [%s]>" % (self.__class__.__name__,self.mount_tree.items(),) @@ -121,6 +121,16 @@ class MountFS(FS): else: return self, "/", path + @synchronize + def close(self): + # Explicitly closes children if requested + if self.auto_close: + for mount in self.mount_tree.itervalues(): + mount.fs.close() + # Free references (which may incidently call the close method of the child filesystems) + self.mount_tree.clear() + super(MountFS, self).close() + def getsyspath(self, path, allow_none=False): fs, _mount_path, delegate_path = self._delegate(path) if fs is self or fs is None: @@ -341,7 +351,6 @@ class MountFS(FS): if object is None: raise ResourceNotFoundError(src) - # TODO! raise UnsupportedError("rename resource", path=src) @synchronize @@ -385,7 +394,7 @@ class MountFS(FS): """Mounts a host FS object on a given path. :param path: A path within the MountFS - :param fs: A filesystem object to mount + :param fs: A filesystem object to mount """ self.mount_tree[path] = MountFS.DirMount(path, fs) |