Source code for hauberk.actions

# -*- coding: utf-8 -*-  # noqa: D400
"""
hauberk.actions
~~~~~~~~~~~~~~~

Actions are triggered after a series of rules have been met.

"""

import logging

from hauberk.flags import ImapFlags

logger = logging.getLogger(__name__)


[docs]class Read(): """Read message action. This action marks a message as read. """ def __call__(self, client, msgid, dry): """Add SEEN flag to message. :param client: ImapClient :param msgid: Message Id :param dry: Dry run. If true don't commit change """ logger.info("Marking message %s as read", msgid) if not dry: client.add_flags(msgid, [ImapFlags.SEEN.value]) def __repr__(self): # pragma: no cover # noqa: D401, D105 """String representation.""" return "{}".format(self.__class__.__name__)
[docs]class Move(): """Move message to a new folder. :param folder: Folder to move message to """ def __init__(self, folder): self.folder = folder def __call__(self, client, msgid, dry): """Move message from inbox to folder. :param client: ImapClient :param msgid: Message Id :param dry: Dry run. If true don't commit change """ logger.info("Moving message %s to folder %s", msgid, self.folder) if not dry: client.move(msgid, self.folder) def __repr__(self): # pragma: no cover # noqa: D401, D105 return "{}: Folder={}".format(self.__class__.__name__, self.folder)
[docs]class Delete(): """Delete message. This action marks a message as read. """ def __call__(self, client, msgid, dry): """Delete message. :param client: ImapClient :param msgid: Message Id :param dry: Dry run. If true don't commit change """ logger.info("Deleting message %s", msgid) if not dry: client.delete_messages(msgid) def __repr__(self): # pragma: no cover # noqa: D401, D105 return "{}".format(self.__class__.__name__)
[docs]class Archive(): """Archive message.""" pass
[docs]class Respond(): """Auto respond.""" pass
[docs]class Notify(): """Notify through external means. This is just a placeholder right now """ # def __init__(self, notifiers): def __call__(self, client, msgid, dry): """Notify via a log message. :param client: ImapClient :param msgid: Message Id :param dry: Dry run. If true don't commit change """ logger.info("Sending text for message %s", msgid) def __repr__(self): # pragma: no cover # noqa: D401, D105 return "{}".format(self.__class__.__name__)
[docs]class Trash(): """Mark item as read and move to trash. This combines the actions for Read and Move('Trash') """ def __call__(self, client, msgid, dry): """Call read and move :param client: ImapClient :param msgid: Message Id :param dry: Dry run. If true don't commit change """ logger.info("Marking message %s as read", msgid) Read()(client, msgid, dry) Move('Trash')(client, msgid, dry) def __repr__(self): # pragma: no cover # noqa: D401, D105 """String representation.""" return "{}".format(self.__class__.__name__)