Skip to content

Commit 43f18bc

Browse files
Mateusz Kurekambv
Mateusz Kurek
authored andcommitted
Use specific types in dateutil.relativedelta stubs
Improve operator methods for dateutil.relativedelta stubs: * `__add__` operator method could return other types than `relativedelta` (`datetime.date` or `datetime.datetime`) * use specific types of operators args instead of Any * mypy currently does not handle `Union` in op methods (see python/mypy#2129, python/mypy#1442, python/mypy#1264 for details), so I've overloaded it directly
1 parent 8a86803 commit 43f18bc

File tree

1 file changed

+36
-10
lines changed

1 file changed

+36
-10
lines changed

third_party/3/dateutil/relativedelta.pyi

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Optional, Union
1+
from typing import Optional, overload, Union
22
from datetime import date, datetime, timedelta
33

44
__all__ = ... # type: List[str]
@@ -51,17 +51,43 @@ class relativedelta(object):
5151

5252
def normalized(self) -> 'relativedelta': ...
5353

54-
def __add__(
55-
self,
56-
other: Union['relativedelta', timedelta, date, datetime]) -> 'relativedelta': ...
54+
# TODO: use Union when mypy will handle it properly in overloaded operator
55+
# methods (#2129, #1442, #1264 in mypy)
56+
@overload
57+
def __add__(self, other: 'relativedelta') -> 'relativedelta': ...
5758

58-
def __radd__(
59-
self,
60-
other: Any) -> 'relativedelta': ...
59+
@overload
60+
def __add__(self, other: timedelta) -> 'relativedelta': ...
6161

62-
def __rsub__(
63-
self,
64-
other: Any) -> 'relativedelta': ...
62+
@overload
63+
def __add__(self, other: date) -> date: ...
64+
65+
@overload
66+
def __add__(self, other: datetime) -> datetime: ...
67+
68+
@overload
69+
def __radd__(self, other: 'relativedelta') -> 'relativedelta': ...
70+
71+
@overload
72+
def __radd__(self, other: timedelta) -> 'relativedelta': ...
73+
74+
@overload
75+
def __radd__(self, other: date) -> date: ...
76+
77+
@overload
78+
def __radd__(self, other: datetime) -> datetime: ...
79+
80+
@overload
81+
def __rsub__(self, other: 'relativedelta') -> 'relativedelta': ...
82+
83+
@overload
84+
def __rsub__(self, other: timedelta) -> 'relativedelta': ...
85+
86+
@overload
87+
def __rsub__(self, other: date) -> date: ...
88+
89+
@overload
90+
def __rsub__(self, other: datetime) -> datetime: ...
6591

6692
def __sub__(self, other: 'relativedelta') -> 'relativedelta': ...
6793

0 commit comments

Comments
 (0)