Merge pull request #109 from balsagoth/feature/query_improve

add date__on to query and some other improvments
This commit is contained in:
Martin Rusev
2017-11-30 23:00:27 +01:00
committed by GitHub
3 changed files with 21 additions and 15 deletions

View File

@@ -56,6 +56,9 @@ Usage
# Messages received after specific date # Messages received after specific date
messages_from = imbox.messages(date__gt=datetime.date(2013, 7, 30)) messages_from = imbox.messages(date__gt=datetime.date(2013, 7, 30))
# Messages received on a specific date
messages_from = imbox.messages(date__on=datetime.date(2013, 7, 30))
# Messages from a specific folder # Messages from a specific folder
messages_folder = imbox.messages(folder='Social') messages_folder = imbox.messages(folder='Social')

View File

@@ -4,13 +4,12 @@ import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
IMAP_MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
def format_date(date): def format_date(date):
if isinstance(date, datetime.date):
return "%s-%s-%s" % (date.day, IMAP_MONTHS[date.month - 1], date.year) return date.strftime('%d-%b-%Y')
else:
return date
def build_search_query(**kwargs): def build_search_query(**kwargs):
@@ -22,11 +21,8 @@ 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__on = kwargs.get('date__on', False)
date__lt = format_date(date__lt)
subject = kwargs.get('subject') subject = kwargs.get('subject')
query = [] query = []
@@ -47,10 +43,13 @@ def build_search_query(**kwargs):
query.append('(TO "%s")' % sent_to) query.append('(TO "%s")' % sent_to)
if date__gt: if date__gt:
query.append('(SINCE "%s")' % date__gt) query.append('(SINCE "%s")' % format_date(date__gt))
if date__lt: if date__lt:
query.append('(BEFORE "%s")' % date__lt) query.append('(BEFORE "%s")' % format_date(date__lt))
if date__on:
query.append('(ON "%s")' % format_date(date__on))
if subject is not None: if subject is not None:
query.append('(SUBJECT "%s")' % subject) query.append('(SUBJECT "%s")' % subject)

View File

@@ -28,19 +28,23 @@ class TestQuery(unittest.TestCase):
def test_sent_from(self): def test_sent_from(self):
res = build_search_query(sent_from='test@example.com') res = build_search_query(sent_from='test@example.com')
self.assertEqual(res, "(FROM \"test@example.com\")") self.assertEqual(res, '(FROM "test@example.com")')
def test_sent_to(self): def test_sent_to(self):
res = build_search_query(sent_to='test@example.com') res = build_search_query(sent_to='test@example.com')
self.assertEqual(res, "(TO \"test@example.com\")") self.assertEqual(res, '(TO "test@example.com")')
def test_date__gt(self): def test_date__gt(self):
res = build_search_query(date__gt=date(2014, 12, 31)) res = build_search_query(date__gt=date(2014, 12, 31))
self.assertEqual(res, "(SINCE \"31-Dec-2014\")") self.assertEqual(res, '(SINCE "31-Dec-2014")')
def test_date__lt(self): def test_date__lt(self):
res = build_search_query(date__lt=date(2014, 1, 1)) res = build_search_query(date__lt=date(2014, 1, 1))
self.assertEqual(res, "(BEFORE \"1-Jan-2014\")") self.assertEqual(res, '(BEFORE "01-Jan-2014")')
def test_date__on(self):
res = build_search_query(date__on=date(2014, 1, 1))
self.assertEqual(res, '(ON "01-Jan-2014")')