Mercurial > public > weighmail
view weighmail/core.py @ 10:8a523e580854
Added a test for the core weighmail function.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 20 May 2012 13:05:12 -0500 |
parents | 470bfed5411e |
children |
line wrap: on
line source
def weighmail(imap, folder, labels, observer=None): """Applies labels to message that meet size criteria. imap - IMAPClient folder - folder name to operate on labels - list of Label tuples observer - will call back to report progress """ imap.select_folder(folder) for label in labels: apply_label(imap, label, observer) if observer is not None: observer.done() def get_criteria(label): """Returns the RFC 3501 criteria string for the given label""" l = 'LARGER %d' % label.min if label.min is not None else '' s = 'SMALLER %d' % label.max if label.max is not None else '' return '{larger} {smaller}'.format(larger=l, smaller=s).strip() def apply_label(imap, label, observer=None): """Searches for messages that meet the label's criteria and applies the label to them. """ criteria = get_criteria(label) if observer is not None: observer.searching(label.name) msgs = imap.search(criteria) if len(msgs) > 0: if observer is not None: observer.labeling(label.name, len(msgs)) imap.add_gmail_labels(msgs, [label.name]) if observer is not None: observer.done_labeling(label.name, len(msgs))