Skip to content

Commit cd9c006

Browse files
committed
Complete typing for win32timezone as upstream
1 parent fc0607a commit cd9c006

File tree

1 file changed

+66
-41
lines changed

1 file changed

+66
-41
lines changed
Lines changed: 66 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,109 @@
11
import datetime
22
from _operator import _SupportsComparison
33
from _typeshed import Incomplete, SupportsKeysAndGetItem
4-
from collections.abc import Iterable
5-
from typing import TypeVar
4+
from collections.abc import Callable, Iterable, Mapping
5+
from logging import Logger
6+
from typing import ClassVar, TypeVar, overload
67
from typing_extensions import Self
78

89
_RangeMapKT = TypeVar("_RangeMapKT", bound=_SupportsComparison)
910

1011
_T = TypeVar("_T")
1112
_VT = TypeVar("_VT")
1213

13-
log: Incomplete
14+
log: Logger
1415

1516
class _SimpleStruct:
1617
def __init__(self, *args, **kw) -> None: ...
17-
def field_names(self): ...
18-
def __eq__(self, other): ...
19-
def __ne__(self, other): ...
18+
def field_names(self) -> list[str]: ...
19+
def __eq__(self, other: object) -> bool: ...
20+
def __ne__(self, other: object) -> bool: ...
2021

2122
class SYSTEMTIME(_SimpleStruct): ...
2223
class TIME_ZONE_INFORMATION(_SimpleStruct): ...
2324
class DYNAMIC_TIME_ZONE_INFORMATION(_SimpleStruct): ...
2425

2526
class TimeZoneDefinition(DYNAMIC_TIME_ZONE_INFORMATION):
2627
def __init__(self, *args, **kwargs) -> None: ...
28+
# TIME_ZONE_INFORMATION fields as obtained by __getattribute__
29+
bias: datetime.timedelta
30+
standard_name: str
31+
standard_start: SYSTEMTIME
32+
standard_bias: datetime.timedelta
33+
daylight_name: str
34+
daylight_start: SYSTEMTIME
35+
daylight_bias: datetime.timedelta
2736
def __getattribute__(self, attr: str): ...
2837
@classmethod
29-
def current(cls): ...
38+
def current(cls) -> tuple[int, Self]: ...
3039
def set(self) -> None: ...
31-
def copy(self): ...
32-
def locate_daylight_start(self, year): ...
33-
def locate_standard_start(self, year): ...
40+
def copy(self) -> Self: ...
41+
def locate_daylight_start(self, year) -> datetime.datetime: ...
42+
def locate_standard_start(self, year) -> datetime.datetime: ...
3443

3544
class TimeZoneInfo(datetime.tzinfo):
36-
tzRegKey: str
37-
timeZoneName: Incomplete
38-
fixedStandardTime: Incomplete
45+
tzRegKey: ClassVar[str]
46+
timeZoneName: str
47+
fixedStandardTime: bool
3948
def __init__(self, param: str | TimeZoneDefinition, fix_standard_time: bool = False) -> None: ...
40-
def tzname(self, dt): ...
41-
def getWinInfo(self, targetYear): ...
42-
def utcoffset(self, dt): ...
43-
def dst(self, dt): ...
44-
def GetDSTStartTime(self, year): ...
45-
def GetDSTEndTime(self, year): ...
46-
def __le__(self, other) -> bool: ...
47-
def __eq__(self, other) -> bool: ...
48-
def __ne__(self, other) -> bool: ...
49+
@overload # type: ignore[override] # Split definition into overrides
50+
def tzname(self, dt: datetime.datetime) -> str: ...
51+
@overload
52+
def tzname(self, dt: None) -> None: ...
53+
def getWinInfo(self, targetYear: int) -> TimeZoneDefinition: ...
54+
@overload # type: ignore[override] # False-positive, our overload covers all base types
55+
def utcoffset(self, dt: None) -> None: ...
56+
@overload
57+
def utcoffset(self, dt: datetime.datetime) -> datetime.timedelta: ...
58+
@overload # type: ignore[override] # False-positive, our overload covers all base types
59+
def dst(self, dt: None) -> None: ...
60+
@overload
61+
def dst(self, dt: datetime.datetime) -> datetime.timedelta: ...
62+
def GetDSTStartTime(self, year: int) -> datetime.datetime: ...
63+
def GetDSTEndTime(self, year: int) -> datetime.datetime: ...
64+
def __eq__(self, other: object) -> bool: ...
65+
def __ne__(self, other: object) -> bool: ...
4966
@classmethod
50-
def local(cls): ...
67+
def local(cls) -> Self: ...
5168
@classmethod
52-
def utc(cls): ...
69+
def utc(cls) -> Self: ...
5370
@staticmethod
54-
def get_sorted_time_zone_names(): ...
71+
def get_sorted_time_zone_names() -> list[str]: ...
5572
@staticmethod
56-
def get_all_time_zones(): ...
73+
def get_all_time_zones() -> list[TimeZoneInfo]: ...
5774
@staticmethod
5875
def get_sorted_time_zones(key: Incomplete | None = ...): ...
5976

60-
def utcnow(): ...
61-
def now(): ...
62-
def GetTZCapabilities(): ...
77+
def utcnow() -> datetime.datetime: ...
78+
def now() -> datetime.datetime: ...
79+
def GetTZCapabilities() -> dict[str, bool]: ...
6380

6481
class DLLHandleCache:
65-
def __getitem__(self, filename): ...
82+
def __getitem__(self, filename: str) -> int: ...
6683

67-
DLLCache: Incomplete
84+
DLLCache: DLLHandleCache
6885

69-
def resolveMUITimeZone(spec): ...
86+
def resolveMUITimeZone(spec: str) -> str | None: ...
7087

7188
class RangeMap(dict[_RangeMapKT, _VT]):
72-
sort_params: Incomplete
73-
match: Incomplete
74-
def __init__(self, source, sort_params=..., key_match_comparator=...) -> None: ...
89+
sort_params: Mapping[str, Incomplete]
90+
match: Callable[[_RangeMapKT, _RangeMapKT], bool]
91+
def __init__(
92+
self,
93+
source: SupportsKeysAndGetItem[_RangeMapKT, _VT] | Iterable[tuple[_RangeMapKT, _VT]],
94+
sort_params: Mapping[str, Incomplete] = {},
95+
key_match_comparator: Callable[[_RangeMapKT, _RangeMapKT], bool] = ...,
96+
) -> None: ...
7597
@classmethod
7698
def left(cls, source: SupportsKeysAndGetItem[_RangeMapKT, _VT] | Iterable[tuple[_RangeMapKT, _VT]]) -> Self: ...
77-
def __getitem__(self, item): ...
78-
def get(self, key, default: Incomplete | None = ...): ...
79-
def bounds(self): ...
80-
undefined_value: Incomplete
99+
def __getitem__(self, item: _RangeMapKT) -> _VT: ...
100+
@overload # type: ignore[override] # Signature simplified over dict and Mapping
101+
def get(self, key: _RangeMapKT, default: _T) -> _VT | _T: ...
102+
@overload
103+
def get(self, key: _RangeMapKT, default: None = None) -> _VT | None: ...
104+
def bounds(self) -> tuple[_RangeMapKT, _RangeMapKT]: ...
105+
undefined_value = type("RangeValueUndefined", (), {})()
81106

82107
class Item(int): ...
83-
first_item: Incomplete
84-
last_item: Incomplete
108+
first_item: Item
109+
last_item: Item

0 commit comments

Comments
 (0)