From 08021b567f1f427f1b9ec49acb9fcf8fd858fbca Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Tue, 16 Nov 2021 18:04:09 +0000 Subject: [PATCH 1/2] Add missing `__reduce__` and `__reduce_ex__` methods to `datetime` classes --- stdlib/datetime.pyi | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/stdlib/datetime.pyi b/stdlib/datetime.pyi index 12e53921e946..d929651cfa7b 100644 --- a/stdlib/datetime.pyi +++ b/stdlib/datetime.pyi @@ -1,7 +1,8 @@ import sys +from _typeshed import Self from time import struct_time from typing import ClassVar, NamedTuple, SupportsAbs, Type, TypeVar, overload -from typing_extensions import final +from typing_extensions import SupportsIndex, final _S = TypeVar("_S") @@ -13,6 +14,7 @@ class tzinfo: def utcoffset(self, dt: datetime | None) -> timedelta | None: ... def dst(self, dt: datetime | None) -> timedelta | None: ... def fromutc(self, dt: datetime) -> datetime: ... + def __reduce__(self: Self) -> tuple[Type[Self], tuple[Self]]: ... # Alias required to avoid name conflicts with date(time).tzinfo. _tzinfo = tzinfo @@ -75,6 +77,11 @@ class date: def __sub__(self, other: timedelta) -> date: ... @overload def __sub__(self, other: date) -> timedelta: ... + def __reduce__(self: Self) -> tuple[Type[Self], tuple[bytes]]: ... + if sys.version_info >= (3, 8): + def __reduce_ex__(self: Self, __protocol: SupportsIndex) -> tuple[Type[Self], tuple[bytes]]: ... + else: + def __reduce_ex__(self: Self, __protocol: int) -> tuple[Type[Self], tuple[bytes]]: ... def __hash__(self) -> int: ... def weekday(self) -> int: ... def isoweekday(self) -> int: ... @@ -114,6 +121,11 @@ class time: def __ge__(self, other: time) -> bool: ... def __gt__(self, other: time) -> bool: ... def __hash__(self) -> int: ... + def __reduce__(self: Self) -> tuple[Type[Self], tuple[bytes]]: ... + if sys.version_info >= (3, 8): + def __reduce_ex__(self: Self, __protocol: SupportsIndex) -> tuple[Type[Self], tuple[bytes]]: ... + else: + def __reduce_ex__(self: Self, __protocol: int) -> tuple[Type[Self], tuple[bytes]]: ... def isoformat(self, timespec: str = ...) -> str: ... if sys.version_info >= (3, 7): @classmethod @@ -183,6 +195,7 @@ class timedelta(SupportsAbs[timedelta]): def __gt__(self, other: timedelta) -> bool: ... def __bool__(self) -> bool: ... def __hash__(self) -> int: ... + def __reduce__(self: Self) -> tuple[type[Self], tuple[int, int, int]]: ... class datetime(date): min: ClassVar[datetime] From f5a58a2a3becb17131bd4edbd3f1bc4049d66ac0 Mon Sep 17 00:00:00 2001 From: Alex Waygood Date: Tue, 16 Nov 2021 18:08:40 +0000 Subject: [PATCH 2/2] Capital-T Type --- stdlib/datetime.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/datetime.pyi b/stdlib/datetime.pyi index d929651cfa7b..6fd241930a0c 100644 --- a/stdlib/datetime.pyi +++ b/stdlib/datetime.pyi @@ -195,7 +195,7 @@ class timedelta(SupportsAbs[timedelta]): def __gt__(self, other: timedelta) -> bool: ... def __bool__(self) -> bool: ... def __hash__(self) -> int: ... - def __reduce__(self: Self) -> tuple[type[Self], tuple[int, int, int]]: ... + def __reduce__(self: Self) -> tuple[Type[Self], tuple[int, int, int]]: ... class datetime(date): min: ClassVar[datetime]