Skip to content

Commit 337607b

Browse files
committed
fix: use correct base classes for classes in email.feedparser and email.generator
Signed-off-by: oleg.hoefling <[email protected]>
1 parent 640676b commit 337607b

File tree

2 files changed

+10
-11
lines changed

2 files changed

+10
-11
lines changed

stdlib/email/feedparser.pyi

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
from collections.abc import Callable
22
from email.message import Message
33
from email.policy import Policy
4-
from typing import Generic, TypeVar, overload
4+
from typing import Generic, Protocol, TypeVar, overload
55

66
__all__ = ["FeedParser", "BytesFeedParser"]
77

88
_MessageT = TypeVar("_MessageT", bound=Message)
9+
_T_contra = TypeVar("_T_contra", contravariant=True)
910

10-
class FeedParser(Generic[_MessageT]):
11+
class _SupportsFeed(Protocol[_T_contra]):
12+
def feed(self, data: _T_contra) -> None: ...
13+
14+
class FeedParser(Generic[_MessageT], _SupportsFeed[str]):
1115
@overload
1216
def __init__(self: FeedParser[Message], _factory: None = None, *, policy: Policy = ...) -> None: ...
1317
@overload
1418
def __init__(self, _factory: Callable[[], _MessageT], *, policy: Policy = ...) -> None: ...
15-
def feed(self, data: str) -> None: ...
1619
def close(self) -> _MessageT: ...
1720

18-
class BytesFeedParser(Generic[_MessageT]):
21+
class BytesFeedParser(FeedParser[_MessageT], _SupportsFeed[bytes | bytearray]):
1922
@overload
2023
def __init__(self: BytesFeedParser[Message], _factory: None = None, *, policy: Policy = ...) -> None: ...
2124
@overload
2225
def __init__(self, _factory: Callable[[], _MessageT], *, policy: Policy = ...) -> None: ...
23-
def feed(self, data: bytes | bytearray) -> None: ...
24-
def close(self) -> _MessageT: ...

stdlib/email/generator.pyi

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
from _typeshed import SupportsWrite
22
from email.message import Message
33
from email.policy import Policy
4+
from typing_extensions import Self
45

56
__all__ = ["Generator", "DecodedGenerator", "BytesGenerator"]
67

78
class Generator:
8-
def clone(self, fp: SupportsWrite[str]) -> Generator: ...
9+
def clone(self, fp: SupportsWrite[str]) -> Self: ...
910
def write(self, s: str) -> None: ...
1011
def __init__(
1112
self,
@@ -17,9 +18,7 @@ class Generator:
1718
) -> None: ...
1819
def flatten(self, msg: Message, unixfrom: bool = False, linesep: str | None = None) -> None: ...
1920

20-
class BytesGenerator:
21-
def clone(self, fp: SupportsWrite[bytes]) -> BytesGenerator: ...
22-
def write(self, s: str) -> None: ...
21+
class BytesGenerator(Generator):
2322
def __init__(
2423
self,
2524
outfp: SupportsWrite[bytes],
@@ -28,7 +27,6 @@ class BytesGenerator:
2827
*,
2928
policy: Policy | None = None,
3029
) -> None: ...
31-
def flatten(self, msg: Message, unixfrom: bool = False, linesep: str | None = None) -> None: ...
3230

3331
class DecodedGenerator(Generator):
3432
def __init__(

0 commit comments

Comments
 (0)