mirror of
https://github.com/davidhalter/typeshed.git
synced 2026-07-10 02:19:18 +08:00
Clean up and fix email message types (#13532)
* Unify the `_MessageT` type var in `email._policybase`. * Use explicit type arguments for `Message` type in `_MessageT` type var. In particular, change bound from `Message[str, str]` to `Message[Any, Any]`. * Change `__init__()` overloads of `Parser` and `BytesParser` to accept `Message` objects that are not `Message[str, str]` if `_class` is not also given.
This commit is contained in:
@@ -1,20 +1,21 @@
|
||||
from _typeshed import SupportsRead
|
||||
from collections.abc import Callable
|
||||
from email._policybase import _MessageT
|
||||
from email.feedparser import BytesFeedParser as BytesFeedParser, FeedParser as FeedParser
|
||||
from email.message import Message
|
||||
from email.policy import Policy
|
||||
from io import _WrappedBuffer
|
||||
from typing import Generic, TypeVar, overload
|
||||
from typing import Generic, overload
|
||||
|
||||
__all__ = ["Parser", "HeaderParser", "BytesParser", "BytesHeaderParser", "FeedParser", "BytesFeedParser"]
|
||||
|
||||
_MessageT = TypeVar("_MessageT", bound=Message, default=Message)
|
||||
|
||||
class Parser(Generic[_MessageT]):
|
||||
@overload
|
||||
def __init__(self: Parser[Message[str, str]], _class: None = None, *, policy: Policy[Message[str, str]] = ...) -> None: ...
|
||||
def __init__(self: Parser[Message[str, str]], _class: None = None) -> None: ...
|
||||
@overload
|
||||
def __init__(self, _class: Callable[[], _MessageT], *, policy: Policy[_MessageT] = ...) -> None: ...
|
||||
def __init__(self, _class: None = None, *, policy: Policy[_MessageT]) -> None: ...
|
||||
@overload
|
||||
def __init__(self, _class: Callable[[], _MessageT] | None, *, policy: Policy[_MessageT] = ...) -> None: ...
|
||||
def parse(self, fp: SupportsRead[str], headersonly: bool = False) -> _MessageT: ...
|
||||
def parsestr(self, text: str, headersonly: bool = False) -> _MessageT: ...
|
||||
|
||||
@@ -25,9 +26,9 @@ class HeaderParser(Parser[_MessageT]):
|
||||
class BytesParser(Generic[_MessageT]):
|
||||
parser: Parser[_MessageT]
|
||||
@overload
|
||||
def __init__(
|
||||
self: BytesParser[Message[str, str]], _class: None = None, *, policy: Policy[Message[str, str]] = ...
|
||||
) -> None: ...
|
||||
def __init__(self: BytesParser[Message[str, str]], _class: None = None) -> None: ...
|
||||
@overload
|
||||
def __init__(self, _class: None = None, *, policy: Policy[_MessageT]) -> None: ...
|
||||
@overload
|
||||
def __init__(self, _class: Callable[[], _MessageT], *, policy: Policy[_MessageT] = ...) -> None: ...
|
||||
def parse(self, fp: _WrappedBuffer, headersonly: bool = False) -> _MessageT: ...
|
||||
|
||||
Reference in New Issue
Block a user