Searching¶
The dantalian.findlib
module implements tag queries. See Tagging
for more information about tags.
Queries are represented as a tree of SearchNodes
.
Example usage:
from dantalian import findlib
# Find files which are tagged foo and bar
paths = findlib.search(findlib.parse_query('AND foo bar END'))
-
dantalian.findlib.
search
(search_node)¶ Return a list of result paths for a given search query.
-
dantalian.findlib.
parse_query
(rootpath, query)¶ Parse a query string into a query node tree.
Parent node syntax:
NODE foo [bar...] END
where NODE is AND, OR, or MINUS
Tokens beginning with a backslash are used directly in
DirNode`s. Everything else parses to a :class:`DirNode
.Tagnames are converted to paths using the given rootpath.
Query strings look like:
'AND foo bar OR spam eggs END AND \AND \OR \END \\\END END END'
which parses to:
AndNode([ DirNode('foo'), DirNode('bar'), OrNode([ DirNode('spam'), DirNode('eggs'), ]), AndNode([ DirNode('AND'), DirNode('OR'), DirNode('END'), DirNode('\\END'), ]), ])
Query nodes¶
Query nodes are used to represent a search query. Query node trees can be
built manually using the node classes or by using parse_query()
-
class
dantalian.findlib.
SearchNode
¶ An abstract interface for all query nodes.
-
get_results
(self)¶ Abstract method. Returns the results of query represented by the current node.
Returns: A dictionary mapping inode objects to paths.
-
-
class
dantalian.findlib.
GroupNode
(children)¶ Abstract class for query nodes that have a list of child nodes, i.e. non-leaf nodes.
Parameters: children (list) – List of children nodes.
-
class
dantalian.findlib.
AndNode
(children)¶ Query node that merges the results of its children nodes by set intersection.
Parameters: children (list) – List of children nodes.
-
class
dantalian.findlib.
OrNode
(children)¶ Query node that merges the results of its children nodes by set union.
Parameters: children (list) – List of children nodes.
-
class
dantalian.findlib.
MinusNode
(children)¶ Query node that merges the results of its children nodes by set difference: the results of its first child minus the results of the rest of its children.
Parameters: children (list) – List of children nodes.
-
class
dantalian.findlib.
DirNode
(dirpath)¶ Query node that returns a directory’s contents as results. These are the leaf nodes in a query search tree.