3 from _typeshed import Self, StrOrBytesPath
4 from types import TracebackType
21 from typing_extensions import Literal
23 if sys.version_info >= (3, 9):
24 from types import GenericAlias
27 _MessageT = TypeVar("_MessageT", bound=Message)
28 _MessageData = Union[email.message.Message, bytes, str, IO[str], IO[bytes]]
30 class _HasIteritems(Protocol):
31 def iteritems(self) -> Iterator[tuple[str, _MessageData]]: ...
33 class _HasItems(Protocol):
34 def items(self) -> Iterator[tuple[str, _MessageData]]: ...
38 class Mailbox(Generic[_MessageT]):
40 _path: bytes | str # undocumented
41 _factory: Callable[[IO[Any]], _MessageT] | None # undocumented
43 self, path: StrOrBytesPath, factory: Callable[[IO[Any]], _MessageT] | None = ..., create: bool = ...
45 def add(self, message: _MessageData) -> str: ...
46 def remove(self, key: str) -> None: ...
47 def __delitem__(self, key: str) -> None: ...
48 def discard(self, key: str) -> None: ...
49 def __setitem__(self, key: str, message: _MessageData) -> None: ...
51 def get(self, key: str, default: None = ...) -> _MessageT | None: ...
53 def get(self, key: str, default: _T) -> _MessageT | _T: ...
54 def __getitem__(self, key: str) -> _MessageT: ...
55 def get_message(self, key: str) -> _MessageT: ...
56 def get_string(self, key: str) -> str: ...
57 def get_bytes(self, key: str) -> bytes: ...
58 # As '_ProxyFile' doesn't implement the full IO spec, and BytesIO is incompatible with it, get_file return is Any here
59 def get_file(self, key: str) -> Any: ...
60 def iterkeys(self) -> Iterator[str]: ...
61 def keys(self) -> list[str]: ...
62 def itervalues(self) -> Iterator[_MessageT]: ...
63 def __iter__(self) -> Iterator[_MessageT]: ...
64 def values(self) -> list[_MessageT]: ...
65 def iteritems(self) -> Iterator[tuple[str, _MessageT]]: ...
66 def items(self) -> list[tuple[str, _MessageT]]: ...
67 def __contains__(self, key: str) -> bool: ...
68 def __len__(self) -> int: ...
69 def clear(self) -> None: ...
71 def pop(self, key: str, default: None = ...) -> _MessageT | None: ...
73 def pop(self, key: str, default: _T = ...) -> _MessageT | _T: ...
74 def popitem(self) -> tuple[str, _MessageT]: ...
75 def update(self, arg: _HasIteritems | _HasItems | Iterable[tuple[str, _MessageData]] | None = ...) -> None: ...
76 def flush(self) -> None: ...
77 def lock(self) -> None: ...
78 def unlock(self) -> None: ...
79 def close(self) -> None: ...
80 if sys.version_info >= (3, 9):
81 def __class_getitem__(cls, item: Any) -> GenericAlias: ...
83 class Maildir(Mailbox[MaildirMessage]):
87 self, dirname: StrOrBytesPath, factory: Callable[[IO[Any]], MaildirMessage] | None = ..., create: bool = ...
89 def get_file(self, key: str) -> _ProxyFile[bytes]: ...
90 def list_folders(self) -> list[str]: ...
91 def get_folder(self, folder: str) -> Maildir: ...
92 def add_folder(self, folder: str) -> Maildir: ...
93 def remove_folder(self, folder: str) -> None: ...
94 def clean(self) -> None: ...
95 def next(self) -> str | None: ...
97 class _singlefileMailbox(Mailbox[_MessageT]): ...
99 class _mboxMMDF(_singlefileMailbox[_MessageT]):
100 def get_file(self, key: str, from_: bool = ...) -> _PartialFile[bytes]: ...
101 def get_bytes(self, key: str, from_: bool = ...) -> bytes: ...
102 def get_string(self, key: str, from_: bool = ...) -> str: ...
104 class mbox(_mboxMMDF[mboxMessage]):
106 self, path: StrOrBytesPath, factory: Callable[[IO[Any]], mboxMessage] | None = ..., create: bool = ...
109 class MMDF(_mboxMMDF[MMDFMessage]):
111 self, path: StrOrBytesPath, factory: Callable[[IO[Any]], MMDFMessage] | None = ..., create: bool = ...
114 class MH(Mailbox[MHMessage]):
116 self, path: StrOrBytesPath, factory: Callable[[IO[Any]], MHMessage] | None = ..., create: bool = ...
118 def get_file(self, key: str) -> _ProxyFile[bytes]: ...
119 def list_folders(self) -> list[str]: ...
120 def get_folder(self, folder: StrOrBytesPath) -> MH: ...
121 def add_folder(self, folder: StrOrBytesPath) -> MH: ...
122 def remove_folder(self, folder: StrOrBytesPath) -> None: ...
123 def get_sequences(self) -> dict[str, list[int]]: ...
124 def set_sequences(self, sequences: Mapping[str, Sequence[int]]) -> None: ...
125 def pack(self) -> None: ...
127 class Babyl(_singlefileMailbox[BabylMessage]):
129 self, path: StrOrBytesPath, factory: Callable[[IO[Any]], BabylMessage] | None = ..., create: bool = ...
131 def get_file(self, key: str) -> IO[bytes]: ...
132 def get_labels(self) -> list[str]: ...
134 class Message(email.message.Message):
135 def __init__(self, message: _MessageData | None = ...) -> None: ...
137 class MaildirMessage(Message):
138 def get_subdir(self) -> str: ...
139 def set_subdir(self, subdir: Literal["new", "cur"]) -> None: ...
140 def get_flags(self) -> str: ...
141 def set_flags(self, flags: Iterable[str]) -> None: ...
142 def add_flag(self, flag: str) -> None: ...
143 def remove_flag(self, flag: str) -> None: ...
144 def get_date(self) -> int: ...
145 def set_date(self, date: float) -> None: ...
146 def get_info(self) -> str: ...
147 def set_info(self, info: str) -> None: ...
149 class _mboxMMDFMessage(Message):
150 def get_from(self) -> str: ...
151 def set_from(self, from_: str, time_: bool | tuple[int, int, int, int, int, int, int, int, int] | None = ...) -> None: ...
152 def get_flags(self) -> str: ...
153 def set_flags(self, flags: Iterable[str]) -> None: ...
154 def add_flag(self, flag: str) -> None: ...
155 def remove_flag(self, flag: str) -> None: ...
157 class mboxMessage(_mboxMMDFMessage): ...
159 class MHMessage(Message):
160 def get_sequences(self) -> list[str]: ...
161 def set_sequences(self, sequences: Iterable[str]) -> None: ...
162 def add_sequence(self, sequence: str) -> None: ...
163 def remove_sequence(self, sequence: str) -> None: ...
165 class BabylMessage(Message):
166 def get_labels(self) -> list[str]: ...
167 def set_labels(self, labels: Iterable[str]) -> None: ...
168 def add_label(self, label: str) -> None: ...
169 def remove_label(self, label: str) -> None: ...
170 def get_visible(self) -> Message: ...
171 def set_visible(self, visible: _MessageData) -> None: ...
172 def update_visible(self) -> None: ...
174 class MMDFMessage(_mboxMMDFMessage): ...
176 class _ProxyFile(Generic[AnyStr]):
177 def __init__(self, f: IO[AnyStr], pos: int | None = ...) -> None: ...
178 def read(self, size: int | None = ...) -> AnyStr: ...
179 def read1(self, size: int | None = ...) -> AnyStr: ...
180 def readline(self, size: int | None = ...) -> AnyStr: ...
181 def readlines(self, sizehint: int | None = ...) -> list[AnyStr]: ...
182 def __iter__(self) -> Iterator[AnyStr]: ...
183 def tell(self) -> int: ...
184 def seek(self, offset: int, whence: int = ...) -> None: ...
185 def close(self) -> None: ...
186 def __enter__(self: Self) -> Self: ...
187 def __exit__(self, exc_type: Type[BaseException] | None, exc: BaseException | None, tb: TracebackType | None) -> None: ...
188 def readable(self) -> bool: ...
189 def writable(self) -> bool: ...
190 def seekable(self) -> bool: ...
191 def flush(self) -> None: ...
193 def closed(self) -> bool: ...
194 if sys.version_info >= (3, 9):
195 def __class_getitem__(cls, item: Any) -> GenericAlias: ...
197 class _PartialFile(_ProxyFile[AnyStr]):
198 def __init__(self, f: IO[AnyStr], start: int | None = ..., stop: int | None = ...) -> None: ...
200 class Error(Exception): ...
201 class NoSuchMailboxError(Error): ...
202 class NotEmptyError(Error): ...
203 class ExternalClashError(Error): ...
204 class FormatError(Error): ...