implement quoatation mangling in the notmuch binary

--HG--
extra : transplant_source : %E2I%C6%0A%05%3B%F3%27%07%96%DC%D6%91%C3%FA%8E%1B%5B%2B%3D
This commit is contained in:
Sebastian Spaeth 2010-03-16 15:40:13 +01:00
parent e026813bcb
commit d099b79fd1
2 changed files with 45 additions and 4 deletions

View file

@ -268,6 +268,9 @@ class Messages(object):
_get = nmlib.notmuch_messages_get
_get.restype = c_void_p
_collect_tags = nmlib.notmuch_messages_collect_tags
_collect_tags.restype = c_void_p
def __init__(self, msgs_p, parent=None):
"""
msg_p is a pointer to an notmuch_messages_t Structure. If it is None,
@ -290,7 +293,26 @@ class Messages(object):
#store parent, so we keep them alive as long as self is alive
self._parent = parent
logging.debug("Inited Messages derived from %s" %(str(parent)))
def collect_tags(self):
""" return the Tags() belonging to the messages
Do note that collect_tags will iterate over the messages and
therefore will not allow further iterationsl
Raises NotmuchError(STATUS.NOT_INITIALIZED) if not inited
"""
if self._msgs is None:
raise NotmuchError(STATUS.NOT_INITIALIZED)
# collect all tags (returns NULL on error)
tags_p = Messages._collect_tags (self._msgs)
#reset _msgs as we iterated over it and can do so only once
self._msgs = None
if tags_p == None:
raise NotmuchError(STATUS.NULL_POINTER)
return Tags(tags_p, self)
def __iter__(self):
""" Make Messages an iterator """
return self

25
notmuch
View file

@ -1,7 +1,8 @@
#!/usr/bin/env python
"""This is a notmuch implementation in python. It's goal is to allow running the test suite on the cnotmuch python bindings."""
import sys, os
import sys, os, re, logging
from cnotmuch.notmuch import Database, Query
PREFIX=re.compile('(\w+):(.*$)')
#TODO Handle variable: NOTMUCH-CONFIG
#-------------------------------------------------------------------------
@ -83,6 +84,18 @@ And don't forget to run "notmuch new" whenever new mail arrives.
Have fun, and may your inbox never have much mail.
"""
#-------------------------------------------------------------------------
def quote_query_line(argv):
#mangle arguments wrapping terms with spaces in quotes
for i in xrange(0,len(argv)):
if argv[i].find(' ') >= 0:
#if we use prefix:termWithSpaces, put quotes around term
m = PREFIX.match(argv[i])
if m:
argv[i] = '%s:"%s"' % (m.group(1), m.group(2))
else:
argv[i] = '"'+argv[i]+'"'
return ' '.join(argv)
if __name__ == '__main__':
# Handle command line options
@ -104,9 +117,15 @@ if __name__ == '__main__':
elif sys.argv[1] == 'search-tags':
if len(sys.argv) == 2:
#no further search term
print("\n".join(Database().get_all_tags()))
else: print "Not implemented"
else:
#mangle arguments wrapping terms with spaces in quotes
querystr = quote_query_line(sys.argv[2:])
logging.debug("search-term "+querystr)
db = Database()
m = Query(db,querystr).search_messages()
print("\n".join([t for t in m.collect_tags()]))
else:
# unknown command