date__gt, date__lt can be datetime.date objects; added tests for build_search_query

This commit is contained in:
minasss
2014-10-12 19:14:49 +02:00
parent b5acdeca19
commit 90d7d92e15
2 changed files with 61 additions and 8 deletions

View File

@@ -1,6 +1,16 @@
import datetime
# TODO - Validate query arguments # 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): def build_search_query(**kwargs):
# Parse keyword arguments # Parse keyword arguments
@@ -8,23 +18,30 @@ def build_search_query(**kwargs):
sent_from = kwargs.get('sent_from', False) sent_from = kwargs.get('sent_from', False)
sent_to = kwargs.get('sent_to', False) sent_to = kwargs.get('sent_to', False)
date__gt = kwargs.get('date__gt', 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) 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: if unread:
query = "(UNSEEN)" query.append("(UNSEEN)")
if sent_from: if sent_from:
query = '{0} (FROM "{1}")'.format(query, sent_from) query.append('(FROM "%s")' % sent_from)
if sent_to: if sent_to:
query = '{0} (TO "{1}")'.format(query, sent_to) query.append('(TO "%s")' % sent_to)
if date__gt: if date__gt:
query = '{0} (SINCE "{1}")'.format(query, date__gt) query.append('(SINCE "%s")' % date__gt)
if date__lt: 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)"

36
tests/query_tests.py Normal file
View File

@@ -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\")")