Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Silbe <sascha-pgp@silbe.org>2013-06-22 07:30:34 (GMT)
committer Sascha Silbe <sascha-pgp@silbe.org>2013-11-16 20:12:34 (GMT)
commitd7f76bcbf19e465e4f1bcae17e89f39153fdff3e (patch)
treeab60fab2c29a8e3bdeb233f4a044848c928c3674
parent41afb73b7ecb5e5e3e3d0c0d8916554367170c59 (diff)
fsemulation: add support for "search" directories
Add support for exporting arbitrary search results as a directory. The directory can be requested using the new API FSEmulation.search() and will expect to live directly below the root directory (for symlinking purposes). Like with all other directories, the root query will be taken into account.
-rw-r--r--fsemulation.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/fsemulation.py b/fsemulation.py
index beade38..7b8c088 100644
--- a/fsemulation.py
+++ b/fsemulation.py
@@ -734,12 +734,13 @@ class Directory(FSEntry):
class ByTitleDirectory(Directory):
def __init__(self, file_system, level, parent):
Directory.__init__(self, file_system, level, 0550, parent)
+ self._query = None
def listdir(self):
for name in Directory.listdir(self):
yield name
- for object_id in self._ds.list_object_ids():
+ for object_id in self._ds.list_object_ids(self._query):
name = self._fs.lookup_title_name(object_id)
yield name
@@ -747,7 +748,7 @@ class ByTitleDirectory(Directory):
for name, entry in Directory.readdir(self):
yield name, entry
- for object_id, metadata in self._ds.list_metadata():
+ for object_id, metadata in self._ds.list_metadata(self._query):
name = self._fs.lookup_title_name(object_id, metadata)
yield (name, self._get_symlink(object_id, metadata))
@@ -930,6 +931,12 @@ class ByTagsDirectory(Directory):
return tags
+class SearchResultDirectory(ByTitleDirectory):
+ def __init__(self, file_system, level, parent, query):
+ ByTitleDirectory.__init__(self, file_system, level, parent)
+ self._query = query
+
+
class RootDirectory(Directory):
def __init__(self, file_system, mode):
Directory.__init__(self, file_system, 0, mode, None)
@@ -1006,7 +1013,10 @@ class FSEmulation(object):
return entry
- # internal API (for FSEntry derivatives)
+ def search(self, query):
+ return SearchResultDirectory(self, 1, self._root_dir, query)
+
+ # internal API
def resolve_title_name(self, name):
if name not in self._title_name_to_object_id: