From e7901308aee6d9e99d25c4ed1bdc4c2fc7d8a618 Mon Sep 17 00:00:00 2001 From: Martin Rusev Date: Wed, 31 Jul 2013 13:34:39 +0300 Subject: [PATCH] Query builder --- README.md | 8 +++++++- imbox/__init__.py | 14 +++----------- imbox/query.py | 20 ++++++++++++++++++++ setup.py | 2 +- 4 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 imbox/query.py diff --git a/README.md b/README.md index dfd1b66..aced522 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Imbox - Python IMAP for Humans ======= -Python library for reading IMAP mailboxes and converting the email content to human readable data +Python library for reading IMAP mailboxes and converting email content to machine readable data Installation ============ @@ -32,6 +32,12 @@ all_messages = imbox.messages() # Unread messages unread_messages = imbox.messages(unread=True) +# Messages sent FROM +messages_from = imbox.mesages(sent_from='martin@amon.cx') + +# Messages sent TO +messages_from = imbox.mesages(sent_to='martin@amon.cx') + for message in all_messages: ........ diff --git a/imbox/__init__.py b/imbox/__init__.py index b4f417c..26f0e14 100644 --- a/imbox/__init__.py +++ b/imbox/__init__.py @@ -1,5 +1,6 @@ from imbox.imap import ImapTransport from imbox.parser import parse_email +from imbox.query import build_search_query class Imbox(object): @@ -9,7 +10,7 @@ class Imbox(object): self.connection = server.connect(username, password) def fetch_by_uid(self, uid): - message, data = self.connection.uid('fetch', uid, '(BODY.PEEK[])') # Don't mark the messages as read + message, data = self.connection.uid('fetch', uid, '(BODY.PEEK[])') # Don't mark the messages as read, save bandwidth with PEEK raw_email = data[0][1] email_object = parse_email(raw_email) @@ -24,16 +25,7 @@ class Imbox(object): def messages(self, *args, **kwargs): - query = "ALL" - - # Parse keyword arguments - unread = kwargs.get('unread', False) - folder = kwargs.get('folder', False) - sent_from = kwargs.get('sent_from', False) - sent_to = kwargs.get('sent_to', False) - - if unread != False: - query = "UNSEEN" + query = build_search_query(**kwargs) message, data = self.connection.uid('search', None, query) diff --git a/imbox/query.py b/imbox/query.py new file mode 100644 index 0000000..4fa0195 --- /dev/null +++ b/imbox/query.py @@ -0,0 +1,20 @@ +def build_search_query(**kwargs): + + # Parse keyword arguments + unread = kwargs.get('unread', False) + sent_from = kwargs.get('sent_from', False) + sent_to = kwargs.get('sent_to', False) + + query = "(ALL)" + + if unread != False: + query = "(UNSEEN)" + + if sent_from: + query = '{0} (FROM "{1}")'.format(query, sent_from) + + if sent_to: + query = '{0} (TO "{1}")'.format(query, sent_to) + + + return str(query) \ No newline at end of file diff --git a/setup.py b/setup.py index 7731b45..fa37960 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup import os -version = '0.5' +version = '0.5.1' def read(filename):