Make mailbox.MailDir abstract (#7201)

This commit is contained in:
Alex Waygood
2022-02-15 14:47:17 +00:00
committed by GitHub
parent 96b06adf2c
commit 4ab5033e5b

View File

@@ -1,6 +1,7 @@
import email.message
import sys
from _typeshed import Self, StrOrBytesPath
from abc import ABCMeta, abstractmethod
from types import TracebackType
from typing import IO, Any, AnyStr, Callable, Generic, Iterable, Iterator, Mapping, Protocol, Sequence, TypeVar, Union, overload
from typing_extensions import Literal
@@ -27,21 +28,28 @@ class Mailbox(Generic[_MessageT]):
def __init__(
self, path: StrOrBytesPath, factory: Callable[[IO[Any]], _MessageT] | None = ..., create: bool = ...
) -> None: ...
@abstractmethod
def add(self, message: _MessageData) -> str: ...
@abstractmethod
def remove(self, key: str) -> None: ...
def __delitem__(self, key: str) -> None: ...
def discard(self, key: str) -> None: ...
@abstractmethod
def __setitem__(self, key: str, message: _MessageData) -> None: ...
@overload
def get(self, key: str, default: None = ...) -> _MessageT | None: ...
@overload
def get(self, key: str, default: _T) -> _MessageT | _T: ...
def __getitem__(self, key: str) -> _MessageT: ...
@abstractmethod
def get_message(self, key: str) -> _MessageT: ...
def get_string(self, key: str) -> str: ...
@abstractmethod
def get_bytes(self, key: str) -> bytes: ...
# As '_ProxyFile' doesn't implement the full IO spec, and BytesIO is incompatible with it, get_file return is Any here
@abstractmethod
def get_file(self, key: str) -> Any: ...
@abstractmethod
def iterkeys(self) -> Iterator[str]: ...
def keys(self) -> list[str]: ...
def itervalues(self) -> Iterator[_MessageT]: ...
@@ -49,7 +57,9 @@ class Mailbox(Generic[_MessageT]):
def values(self) -> list[_MessageT]: ...
def iteritems(self) -> Iterator[tuple[str, _MessageT]]: ...
def items(self) -> list[tuple[str, _MessageT]]: ...
@abstractmethod
def __contains__(self, key: str) -> bool: ...
@abstractmethod
def __len__(self) -> int: ...
def clear(self) -> None: ...
@overload
@@ -58,9 +68,13 @@ class Mailbox(Generic[_MessageT]):
def pop(self, key: str, default: _T = ...) -> _MessageT | _T: ...
def popitem(self) -> tuple[str, _MessageT]: ...
def update(self, arg: _HasIteritems | _HasItems | Iterable[tuple[str, _MessageData]] | None = ...) -> None: ...
@abstractmethod
def flush(self) -> None: ...
@abstractmethod
def lock(self) -> None: ...
@abstractmethod
def unlock(self) -> None: ...
@abstractmethod
def close(self) -> None: ...
if sys.version_info >= (3, 9):
def __class_getitem__(cls, item: Any) -> GenericAlias: ...
@@ -71,7 +85,19 @@ class Maildir(Mailbox[MaildirMessage]):
def __init__(
self, dirname: StrOrBytesPath, factory: Callable[[IO[Any]], MaildirMessage] | None = ..., create: bool = ...
) -> None: ...
def add(self, message: _MessageData) -> str: ...
def remove(self, key: str) -> None: ...
def __setitem__(self, key: str, message: _MessageData) -> None: ...
def get_message(self, key: str) -> MaildirMessage: ...
def get_bytes(self, key: str) -> bytes: ...
def get_file(self, key: str) -> _ProxyFile[bytes]: ...
def iterkeys(self) -> Iterator[str]: ...
def __contains__(self, key: str) -> bool: ...
def __len__(self) -> int: ...
def flush(self) -> None: ...
def lock(self) -> None: ...
def unlock(self) -> None: ...
def close(self) -> None: ...
def list_folders(self) -> list[str]: ...
def get_folder(self, folder: str) -> Maildir: ...
def add_folder(self, folder: str) -> Maildir: ...
@@ -79,9 +105,20 @@ class Maildir(Mailbox[MaildirMessage]):
def clean(self) -> None: ...
def next(self) -> str | None: ...
class _singlefileMailbox(Mailbox[_MessageT]): ...
class _singlefileMailbox(Mailbox[_MessageT], metaclass=ABCMeta):
def add(self, message: _MessageData) -> str: ...
def remove(self, key: str) -> None: ...
def __setitem__(self, key: str, message: _MessageData) -> None: ...
def iterkeys(self) -> Iterator[str]: ...
def __contains__(self, key: str) -> bool: ...
def __len__(self) -> int: ...
def lock(self) -> None: ...
def unlock(self) -> None: ...
def flush(self) -> None: ...
def close(self) -> None: ...
class _mboxMMDF(_singlefileMailbox[_MessageT]):
def get_message(self, key: str) -> _MessageT: ...
def get_file(self, key: str, from_: bool = ...) -> _PartialFile[bytes]: ...
def get_bytes(self, key: str, from_: bool = ...) -> bytes: ...
def get_string(self, key: str, from_: bool = ...) -> str: ...
@@ -100,7 +137,19 @@ class MH(Mailbox[MHMessage]):
def __init__(
self, path: StrOrBytesPath, factory: Callable[[IO[Any]], MHMessage] | None = ..., create: bool = ...
) -> None: ...
def add(self, message: _MessageData) -> str: ...
def remove(self, key: str) -> None: ...
def __setitem__(self, key: str, message: _MessageData) -> None: ...
def get_message(self, key: str) -> MHMessage: ...
def get_bytes(self, key: str) -> bytes: ...
def get_file(self, key: str) -> _ProxyFile[bytes]: ...
def iterkeys(self) -> Iterator[str]: ...
def __contains__(self, key: str) -> bool: ...
def __len__(self) -> int: ...
def flush(self) -> None: ...
def lock(self) -> None: ...
def unlock(self) -> None: ...
def close(self) -> None: ...
def list_folders(self) -> list[str]: ...
def get_folder(self, folder: StrOrBytesPath) -> MH: ...
def add_folder(self, folder: StrOrBytesPath) -> MH: ...
@@ -113,6 +162,8 @@ class Babyl(_singlefileMailbox[BabylMessage]):
def __init__(
self, path: StrOrBytesPath, factory: Callable[[IO[Any]], BabylMessage] | None = ..., create: bool = ...
) -> None: ...
def get_message(self, key: str) -> BabylMessage: ...
def get_bytes(self, key: str) -> bytes: ...
def get_file(self, key: str) -> IO[bytes]: ...
def get_labels(self) -> list[str]: ...