platypush/platypush/plugins/mail/_plugin/_in.py

126 lines
3.5 KiB
Python

from abc import ABC, abstractmethod
from typing import Dict, Iterable, List, Union
from .._model import Mail
from ._base import BaseMailPlugin
class MailInPlugin(BaseMailPlugin, ABC):
"""
Base class for mail in plugins.
"""
@abstractmethod
def get_folders(self, **_) -> list:
raise NotImplementedError()
@abstractmethod
def get_sub_folders(self, **_) -> list:
raise NotImplementedError()
@abstractmethod
def search(
self, criteria: Union[str, Iterable[str]], folder: str, **_
) -> List[Mail]:
raise NotImplementedError()
@abstractmethod
def search_unseen_messages(self, folder: str) -> List[Mail]:
raise NotImplementedError()
@abstractmethod
def search_flagged_messages(self, folder: str, **_) -> List[Mail]:
raise NotImplementedError()
@abstractmethod
def search_starred_messages(self, folder: str, **_) -> List[Mail]:
raise NotImplementedError()
@abstractmethod
def sort(
self,
folder: str,
sort_criteria: Union[str, Iterable[str]],
criteria: Union[str, Iterable[str]],
) -> list:
raise NotImplementedError()
@abstractmethod
def get_messages(self, *ids, with_body: bool = True, **_) -> Dict[int, Mail]:
raise NotImplementedError()
def get_message(
self, id, with_body: bool = True, **_ # pylint: disable=redefined-builtin
) -> Mail:
msgs = self.get_messages(id, with_body=with_body)
msg = msgs.get(id)
assert msg, f"Message {id} not found"
return msg
@abstractmethod
def create_folder(self, folder: str, **_):
raise NotImplementedError()
@abstractmethod
def rename_folder(self, old_name: str, new_name: str, **_):
raise NotImplementedError()
@abstractmethod
def delete_folder(self, folder: str, **_):
raise NotImplementedError()
@abstractmethod
def add_flags(
self, messages: list, flags: Union[str, Iterable[str]], folder: str, **_
):
raise NotImplementedError()
@abstractmethod
def set_flags(
self, messages: list, flags: Union[str, Iterable[str]], folder: str, **_
):
raise NotImplementedError()
@abstractmethod
def remove_flags(
self, messages: list, flags: Union[str, Iterable[str]], folder: str, **_
):
raise NotImplementedError()
@abstractmethod
def delete_messages(self, messages: list, folder: str, **_):
raise NotImplementedError()
@abstractmethod
def restore_messages(self, messages: list, folder: str, **_):
raise NotImplementedError()
@abstractmethod
def copy_messages(self, messages: list, dest_folder: str, source_folder: str, **_):
raise NotImplementedError()
@abstractmethod
def move_messages(self, messages: list, dest_folder: str, source_folder: str, **_):
raise NotImplementedError()
@abstractmethod
def expunge_messages(self, folder: str, messages: list, **_):
raise NotImplementedError()
@abstractmethod
def flag_messages(self, messages: list, folder: str, **_):
raise NotImplementedError()
@abstractmethod
def unflag_messages(self, messages: List[int], folder: str = 'INBOX', **_):
raise NotImplementedError()
def flag_message(self, message: int, folder: str, **_):
return self.flag_messages([message], folder=folder)
def unflag_message(self, message: int, folder: str, **_):
return self.unflag_messages([message], folder=folder)
# vim:sw=4:ts=4:et: