From 90d7d92e15ca14280708cc41f9153fba0cd5e281 Mon Sep 17 00:00:00 2001 From: minasss Date: Sun, 12 Oct 2014 19:14:49 +0200 Subject: [PATCH] date__gt, date__lt can be datetime.date objects; added tests for build_search_query --- imbox/query.py | 33 +++++++++++++++++++++++++-------- tests/query_tests.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 tests/query_tests.py diff --git a/imbox/query.py b/imbox/query.py index 7372cc6..c1095bf 100644 --- a/imbox/query.py +++ b/imbox/query.py @@ -1,6 +1,16 @@ +import datetime # TODO - Validate query arguments +IMAP_MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + + +def format_date(date): + + return "%s-%s-%s" % (date.day, IMAP_MONTHS[date.month - 1], date.year) + + def build_search_query(**kwargs): # Parse keyword arguments @@ -8,23 +18,30 @@ def build_search_query(**kwargs): sent_from = kwargs.get('sent_from', False) sent_to = kwargs.get('sent_to', False) date__gt = kwargs.get('date__gt', False) + if type(date__gt) is datetime.date: + date__gt = format_date(date__gt) date__lt = kwargs.get('date__lt', False) + if type(date__lt) is datetime.date: + date__lt = format_date(date__lt) - query = "(ALL)" + query = [] - if unread is not False: - query = "(UNSEEN)" + if unread: + query.append("(UNSEEN)") if sent_from: - query = '{0} (FROM "{1}")'.format(query, sent_from) + query.append('(FROM "%s")' % sent_from) if sent_to: - query = '{0} (TO "{1}")'.format(query, sent_to) + query.append('(TO "%s")' % sent_to) if date__gt: - query = '{0} (SINCE "{1}")'.format(query, date__gt) + query.append('(SINCE "%s")' % date__gt) if date__lt: - query = '{0} (BEFORE "{1}")'.format(query, date__lt) + query.append('(BEFORE "%s")' % date__lt) - return str(query) + if query: + return " ".join(query) + + return "(ALL)" diff --git a/tests/query_tests.py b/tests/query_tests.py new file mode 100644 index 0000000..40b0b84 --- /dev/null +++ b/tests/query_tests.py @@ -0,0 +1,36 @@ +import unittest +from imbox.query import build_search_query +from datetime import date + + +class TestQuery(unittest.TestCase): + + def test_all(self): + + res = build_search_query() + self.assertEqual(res, "(ALL)") + + def test_unread(self): + + res = build_search_query(unread=True) + self.assertEqual(res, "(UNSEEN)") + + def test_sent_from(self): + + res = build_search_query(sent_from='test@example.com') + self.assertEqual(res, "(FROM \"test@example.com\")") + + def test_sent_to(self): + + res = build_search_query(sent_to='test@example.com') + self.assertEqual(res, "(TO \"test@example.com\")") + + def test_date__gt(self): + + res = build_search_query(date__gt=date(2014, 12, 31)) + self.assertEqual(res, "(SINCE \"31-Dec-2014\")") + + def test_date__lt(self): + + res = build_search_query(date__lt=date(2014, 1, 1)) + self.assertEqual(res, "(BEFORE \"1-Jan-2014\")")