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-06-22 07:30:34 (GMT)
commit8f186bc8a931f14fdab0efdec9b084fde8f2ecfe (patch)
treec65971264471d7d5395ea2c17d9304c768021f18
parent2111710c5f18fa0409fa181e5bebf660fc7823cb (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 58120fb..0eeca9b 100644
--- a/fsemulation.py
+++ b/fsemulation.py
@@ -701,12 +701,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
@@ -714,7 +715,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))
@@ -897,6 +898,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)
@@ -973,7 +980,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: