diff options
author | Sascha Silbe <sascha-pgp@silbe.org> | 2012-01-05 22:13:50 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha-pgp@silbe.org> | 2012-01-05 22:13:50 (GMT) |
commit | 3bfb2d72e10b6c5fd8bcabc951f409775c4353f9 (patch) | |
tree | 1d7aba65db89662a51b2eb911c2cf71b0fd19e0e | |
parent | 078fdc48237b17142a9f30462af9e72f49d192a0 (diff) |
fsemulation: Fix '.' and '..' directory entries
When using generators, we can't simply call the parent method. Instead we
need to iterate over the iterator it returns and yield each entry
individually.
-rw-r--r-- | fsemulation.py | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/fsemulation.py b/fsemulation.py index e1dff69..2c38449 100644 --- a/fsemulation.py +++ b/fsemulation.py @@ -594,13 +594,17 @@ class ByTitleDirectory(Directory): Directory.__init__(self, file_system, level, 0550, parent) def listdir(self): - Directory.listdir(self) + for name in Directory.listdir(self): + yield name + for object_id in self._ds.list_object_ids(): name = self._fs.lookup_title_name(object_id) yield name def readdir(self): - Directory.readdir(self) + for name, entry in Directory.readdir(self): + yield name, entry + for object_id, metadata in self._ds.list_metadata(): name = self._fs.lookup_title_name(object_id, metadata) yield (name, self._get_symlink(object_id)) @@ -627,12 +631,16 @@ class ByUidDirectory(Directory): return DSObject(self._fs, object_id) def listdir(self): - Directory.listdir(self) + for name in Directory.listdir(self): + yield name + for object_id in self._ds.list_object_ids(): yield object_id def readdir(self): - Directory.readdir(self) + for name, entry in Directory.readdir(self): + yield name, entry + for object_id in self._ds.list_object_ids(): yield (object_id, DSObject(self._fs, object_id)) @@ -650,12 +658,16 @@ class ByVersionIdDirectory(Directory): return DSObject(self._fs, object_id) def listdir(self): - Directory.listdir(self) + for name in Directory.listdir(self): + yield name + for version_id in self._ds.list_versions(self._tree_id): yield (self._tree_id, version_id) def readdir(self): - Directory.readdir(self) + for name, entry in Directory.readdir(self): + yield name, entry + for version_id in self._ds.list_versions(self._tree_id): object_id = (self._tree_id, version_id) yield (object_id, DSObject(self._fs, object_id)) @@ -672,12 +684,16 @@ class ByTreeIdDirectory(Directory): return ByVersionIdDirectory(self._fs, self._level + 1, self, tree_id) def listdir(self): - Directory.listdir(self) + for name in Directory.listdir(self): + yield name + for tree_id in self._ds.list_tree_ids(): yield tree_id def readdir(self): - Directory.readdir(self) + for name, entry in Directory.readdir(self): + yield name, entry + for tree_id in self._ds.list_tree_ids(): yield (tree_id, ByVersionIdDirectory(self._fs, self._level + 1, self, tree_id)) @@ -694,13 +710,17 @@ class RootDirectory(Directory): self._by_id_directory = ByUidDirectory(file_system, 1, self) def listdir(self): - Directory.listdir(self) + for name in Directory.listdir(self): + yield name + yield u'by-id' #yield u'by-tags' yield u'by-title' def readdir(self): - Directory.readdir(self) + for name, entry in Directory.readdir(self): + yield name, entry + yield (u'by-id', self._by_id_directory) #yield (u'by-tags', self._by_tags_directory) yield (u'by-title', self._by_title_directory) |