126 lines
3.5 KiB
Python
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:
|