From b42a7c644313117a9c8ed2c053efaac2ee3e7e91 Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Thu, 17 Mar 2022 15:19:58 -0700 Subject: [PATCH 1/4] pytz: utcoffset only returns None if dt is None https://github.com/stub42/pytz/blob/master/src/pytz/tzinfo.py#L396 --- stubs/pytz/pytz/tzinfo.pyi | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stubs/pytz/pytz/tzinfo.pyi b/stubs/pytz/pytz/tzinfo.pyi index c2c68526870d..1ca08f7426f9 100644 --- a/stubs/pytz/pytz/tzinfo.pyi +++ b/stubs/pytz/pytz/tzinfo.pyi @@ -1,6 +1,6 @@ import datetime from abc import abstractmethod -from typing import Any +from typing import Any, overload class BaseTzInfo(datetime.tzinfo): zone: str | None # Actually None but should be set on concrete subclasses @@ -31,5 +31,8 @@ class DstTzInfo(BaseTzInfo): def localize(self, dt: datetime.datetime, is_dst: bool | None = ...) -> datetime.datetime: ... def normalize(self, dt: datetime.datetime) -> datetime.datetime: ... def tzname(self, dt: datetime.datetime | None, is_dst: bool | None = ...) -> str: ... - def utcoffset(self, dt: datetime.datetime | None, is_dst: bool | None = ...) -> datetime.timedelta | None: ... + @overload + def utcoffset(self, dt: None, is_dst: bool | None = ...) -> None: ... + @overload + def utcoffset(self, dt: datetime.datetime, is_dst: bool | None = ...) -> datetime.timedelta: ... def dst(self, dt: datetime.datetime | None, is_dst: bool | None = ...) -> datetime.timedelta | None: ... From daf0e0d1a0377c2b95c9c4347ea4c06e05851f0a Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Thu, 17 Mar 2022 15:22:34 -0700 Subject: [PATCH 2/4] Stricter signature on the superclass --- stubs/pytz/pytz/tzinfo.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/pytz/pytz/tzinfo.pyi b/stubs/pytz/pytz/tzinfo.pyi index 1ca08f7426f9..684db1702194 100644 --- a/stubs/pytz/pytz/tzinfo.pyi +++ b/stubs/pytz/pytz/tzinfo.pyi @@ -13,7 +13,7 @@ class BaseTzInfo(datetime.tzinfo): @abstractmethod def tzname(self, dt: datetime.datetime | None) -> str: ... @abstractmethod - def utcoffset(self, dt: datetime.datetime | None) -> datetime.timedelta | None: ... + def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta: ... @abstractmethod def dst(self, dt: datetime.datetime | None) -> datetime.timedelta | None: ... From eecf348ca27b8051ee4dc3e9ead83d8e0c26d03e Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 18 Mar 2022 18:42:13 -0700 Subject: [PATCH 3/4] no need to change the base class --- stubs/pytz/pytz/tzinfo.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/pytz/pytz/tzinfo.pyi b/stubs/pytz/pytz/tzinfo.pyi index 684db1702194..1ca08f7426f9 100644 --- a/stubs/pytz/pytz/tzinfo.pyi +++ b/stubs/pytz/pytz/tzinfo.pyi @@ -13,7 +13,7 @@ class BaseTzInfo(datetime.tzinfo): @abstractmethod def tzname(self, dt: datetime.datetime | None) -> str: ... @abstractmethod - def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta: ... + def utcoffset(self, dt: datetime.datetime | None) -> datetime.timedelta | None: ... @abstractmethod def dst(self, dt: datetime.datetime | None) -> datetime.timedelta | None: ... From 2a5e2d1d6055393695acb6c6f73307cba894318a Mon Sep 17 00:00:00 2001 From: Jelle Zijlstra Date: Fri, 18 Mar 2022 18:55:33 -0700 Subject: [PATCH 4/4] type ignore --- stubs/pytz/pytz/tzinfo.pyi | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stubs/pytz/pytz/tzinfo.pyi b/stubs/pytz/pytz/tzinfo.pyi index 1ca08f7426f9..a744a7ad8386 100644 --- a/stubs/pytz/pytz/tzinfo.pyi +++ b/stubs/pytz/pytz/tzinfo.pyi @@ -31,7 +31,8 @@ class DstTzInfo(BaseTzInfo): def localize(self, dt: datetime.datetime, is_dst: bool | None = ...) -> datetime.datetime: ... def normalize(self, dt: datetime.datetime) -> datetime.datetime: ... def tzname(self, dt: datetime.datetime | None, is_dst: bool | None = ...) -> str: ... - @overload + # https://github.com/python/mypy/issues/12379 + @overload # type: ignore[override] def utcoffset(self, dt: None, is_dst: bool | None = ...) -> None: ... @overload def utcoffset(self, dt: datetime.datetime, is_dst: bool | None = ...) -> datetime.timedelta: ...