make Python 2 and 3 dateutil stubs identical (#1735)

So that they can be merged into 2and3. This PR also adds a few missing
elements to parser.pyi and corrects some mistakes in the Python 3 stub.

Refer to https://github.com/dateutil/dateutil/tree/master/dateutil
This commit is contained in:
Jelle Zijlstra
2017-11-13 07:06:34 -08:00
committed by Matthias Kramm
parent 84d0cbf776
commit 8e75701eda
8 changed files with 94 additions and 128 deletions

View File

@@ -1,8 +1,9 @@
from typing import List, Tuple, Optional, Callable, Union, IO, Any, Dict
from typing import List, Tuple, Optional, Callable, Union, IO, Any, Dict, Mapping, Text
from datetime import datetime, tzinfo
__all__ = ... # type: List[str]
_FileOrStr = Union[bytes, Text, IO[str], IO[Any]]
__all__ = ... # type: List[str]
class parserinfo(object):
JUMP = ... # type: List[str]
@@ -15,25 +16,30 @@ class parserinfo(object):
TZOFFSET = ... # type: Dict[str, int]
def __init__(self, dayfirst: bool=..., yearfirst: bool=...) -> None: ...
def jump(self, name: unicode) -> bool: ...
def weekday(self, name: unicode) -> Union[int, None]: ...
def month(self, name: unicode) -> Union[int, None]: ...
def hms(self, name: unicode) -> Union[int, None]: ...
def ampm(self, name: unicode) -> Union[int, None]: ...
def pertain(self, name: unicode) -> bool: ...
def utczone(self, name: unicode) -> bool: ...
def tzoffset(self, name: unicode) -> Union[int, None]: ...
def jump(self, name: Text) -> bool: ...
def weekday(self, name: Text) -> Optional[int]: ...
def month(self, name: Text) -> Optional[int]: ...
def hms(self, name: Text) -> Optional[int]: ...
def ampm(self, name: Text) -> Optional[int]: ...
def pertain(self, name: Text) -> bool: ...
def utczone(self, name: Text) -> bool: ...
def tzoffset(self, name: Text) -> Optional[int]: ...
def convertyear(self, year: int) -> int: ...
def validate(self, res: datetime) -> bool: ...
class parser(object):
def __init__(self, info: Optional[parserinfo] = ...) -> None: ...
def parse(self, timestr: Union[str, unicode, IO[unicode]],
def parse(self, timestr: _FileOrStr,
default: Optional[datetime] = ...,
ignoretz: bool = ..., tzinfos: Optional[Dict[Union[str, unicode], tzinfo]] = ...,
ignoretz: bool = ..., tzinfos: Optional[Mapping[Text, tzinfo]] = ...,
**kwargs: Any) -> datetime: ...
DEFAULTPARSER = ... # type: parser
def parse(timestr: Union[str, unicode, IO[unicode]],
parserinfo: Optional[parserinfo] = ...,
**kwargs: Any) -> datetime: ...
def parse(timestr: _FileOrStr, parserinfo: Optional[parserinfo] = ..., **kwargs: Any) -> datetime: ...
class _tzparser: ...
DEFAULTTZPARSER = ... # type: _tzparser
class InvalidDatetimeError(ValueError): ...
class InvalidDateError(InvalidDatetimeError): ...
class InvalidTimeError(InvalidDatetimeError): ...

View File

@@ -45,15 +45,13 @@ class relativedelta(object):
hour: Optional[int]=..., minute: Optional[int]=...,
second: Optional[int]=...,
microsecond: Optional[int]=...) -> None: ...
@property
def weeks(self) -> int: ...
@weeks.setter
def weeks(self, value: int) -> None: ...
def normalized(self: _SelfT) -> _SelfT: ...
# TODO: use Union when mypy will handle it properly in overloaded operator
# methods (#2129, #1442, #1264 in mypy)
@overload
def __add__(self: _SelfT, other: relativedelta) -> _SelfT: ...
@overload
@@ -61,31 +59,25 @@ class relativedelta(object):
@overload
def __add__(self, other: _DateT) -> _DateT: ...
@overload
def __radd__(self: _SelfT, other: relativedelta) -> _SelfT: ...
@overload
def __radd__(self: _SelfT, other: timedelta) -> _SelfT: ...
@overload
def __radd__(self, other: _DateT) -> _DateT: ...
@overload
def __rsub__(self: _SelfT, other: relativedelta) -> _SelfT: ...
@overload
def __rsub__(self: _SelfT, other: timedelta) -> _SelfT: ...
@overload
def __rsub__(self, other: _DateT) -> _DateT: ...
def __sub__(self: _SelfT, other: relativedelta) -> _SelfT: ...
def __neg__(self: _SelfT) -> _SelfT: ...
def __bool__(self) -> bool: ...
def __nonzero__(self) -> bool: ...
def __mul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __rmul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __eq__(self, other) -> bool: ...
def __ne__(self, other: object) -> bool: ...
def __div__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __truediv__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __repr__(self) -> str: ...

View File

@@ -2,7 +2,7 @@ from typing import Any, Optional
from datetime import datetime, tzinfo, timedelta
def tzname_in_python2(namefunc): ...
def enfold(dt, fold: int = ...): ...
def enfold(dt: datetime, fold: int = ...): ...
class _DatetimeWithFold(datetime):
@property

View File

@@ -1,9 +1,11 @@
from typing import Any, IO, List, Optional, Tuple, Union
from typing import Any, Optional, Union, IO, Text, Tuple, List
import datetime
from ._common import tzname_in_python2 as tzname_in_python2, _tzinfo as _tzinfo
from ._common import tzrangebase as tzrangebase, enfold as enfold
from ..relativedelta import relativedelta
_FileObj = Union[str, Text, IO[str], IO[Text]]
ZERO = ... # type: datetime.timedelta
EPOCH = ... # type: datetime.datetime
EPOCHORDINAL = ... # type: int
@@ -47,7 +49,7 @@ class _ttinfo:
def __ne__(self, other): ...
class tzfile(_tzinfo):
def __init__(self, fileobj: Union[unicode, str, IO[str], IO[unicode]], filename: Union[str, unicode, None] = ...) -> None: ...
def __init__(self, fileobj: _FileObj, filename: Optional[Text] = ...) -> None: ...
def is_ambiguous(self, dt: Optional[datetime.datetime], idx: Optional[int] = ...) -> bool: ...
def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ...
def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ...
@@ -60,22 +62,22 @@ class tzfile(_tzinfo):
class tzrange(tzrangebase):
hasdst = ... # type: bool
def __init__(self, stdabbr: Union[str, unicode], stdoffset: Union[int, datetime.timedelta, None] = ..., dstabbr: Union[str, unicode, None] = ..., dstoffset: Union[int, datetime.timedelta, None] = ..., start: Optional[relativedelta] = ..., end: Optional[relativedelta] = ...) -> None: ...
def __init__(self, stdabbr: Text, stdoffset: Union[int, datetime.timedelta, None] = ..., dstabbr: Optional[Text] = ..., dstoffset: Union[int, datetime.timedelta, None] = ..., start: Optional[relativedelta] = ..., end: Optional[relativedelta] = ...) -> None: ...
def transitions(self, year: int) -> Tuple[datetime.datetime, datetime.datetime]: ...
def __eq__(self, other): ...
class tzstr(tzrange):
hasdst = ... # type: bool
def __init__(self, s, posix_offset: bool = ...) -> None: ...
def __init__(self, s: Union[bytes, _FileObj], posix_offset: bool = ...) -> None: ...
class tzical:
def __init__(self, fileobj: Union[unicode, str, IO[str], IO[unicode]]) -> None: ...
def __init__(self, fileobj: _FileObj) -> None: ...
def keys(self): ...
def get(self, tzid: Optional[Any] = ...): ...
TZFILES = ... # type: List[str]
TZPATHS = ... # type: List[str]
def gettz(name: Union[str, unicode, None] = ...) -> Optional[datetime.tzinfo]: ...
def gettz(name: Optional[Text] = ...) -> Optional[datetime.tzinfo]: ...
def datetime_exists(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ...
def datetime_ambiguous(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ...

View File

@@ -1,52 +1,45 @@
from typing import List, Tuple, Optional, Callable, Union, IO, Any, Dict
from datetime import datetime
from typing import List, Tuple, Optional, Callable, Union, IO, Any, Dict, Mapping, Text
from datetime import datetime, tzinfo
_FileOrStr = Union[bytes, Text, IO[str], IO[Any]]
__all__ = ... # type: List[str]
class parserinfo:
class parserinfo(object):
JUMP = ... # type: List[str]
WEEKDAYS = ... # type: List[Tuple[str, str]]
MONTHS = ... # type: List[Tuple[str, str]]
HMS = ... # type: List[Tuple[str, str, str]]
AMPM = ... # type: List[Tuple[str, str, str]]
AMPM = ... # type: List[Tuple[str, str]]
UTCZONE = ... # type: List[str]
PERTAIN = ... # type: List[str]
TZOFFSET = ... # type: Dict[str, int]
def __init__(self, dayfirst: bool=..., yearfirst: bool=...) -> None: ...
def jump(self, name: str) -> bool: ...
def weekday(self, name: str) -> str: ...
def month(self, name: str) -> str: ...
def hms(self, name: str) -> str: ...
def ampm(self, name: str) -> str: ...
def pertain(self, name: str) -> bool: ...
def utczone(self, name: str) -> bool: ...
def tzoffset(self, name: str) -> int: ...
def jump(self, name: Text) -> bool: ...
def weekday(self, name: Text) -> Optional[int]: ...
def month(self, name: Text) -> Optional[int]: ...
def hms(self, name: Text) -> Optional[int]: ...
def ampm(self, name: Text) -> Optional[int]: ...
def pertain(self, name: Text) -> bool: ...
def utczone(self, name: Text) -> bool: ...
def tzoffset(self, name: Text) -> Optional[int]: ...
def convertyear(self, year: int) -> int: ...
def validate(self, year: datetime) -> bool: ...
def validate(self, res: datetime) -> bool: ...
class parser:
def __init__(self, info: parserinfo=...) -> None: ...
def parse(
self,
timestr: Union[str, bytes, IO[Any]],
default: Optional[datetime],
ignoretz: bool=...,
tzinfos: Any =...,
) -> datetime: ...
class parser(object):
def __init__(self, info: Optional[parserinfo] = ...) -> None: ...
def parse(self, timestr: _FileOrStr,
default: Optional[datetime] = ...,
ignoretz: bool = ..., tzinfos: Optional[Mapping[Text, tzinfo]] = ...,
**kwargs: Any) -> datetime: ...
DEFAULTPARSER = ... # type: parser
def parse(timestr: Union[str, bytes, IO[Any]], parserinfo: parserinfo=..., **kwargs) -> datetime:
...
class _tzparser:
...
def parse(timestr: _FileOrStr, parserinfo: Optional[parserinfo] = ..., **kwargs: Any) -> datetime: ...
class _tzparser: ...
DEFAULTTZPARSER = ... # type: _tzparser
class InvalidDatetimeError(ValueError): ...
class InvalidDateError(InvalidDatetimeError): ...
class InvalidTimeError(InvalidDatetimeError): ...

View File

@@ -1,10 +1,13 @@
from typing import Optional, overload, Union, List
from typing import overload, Any, List, Optional, SupportsFloat, TypeVar, Union
from datetime import date, datetime, timedelta
__all__ = ... # type: List[str]
_SelfT = TypeVar('_SelfT', bound=relativedelta)
_DateT = TypeVar('_DateT', date, datetime)
class weekday:
class weekday(object):
def __init__(self, weekday: int, n: Optional[int]=...) -> None: ...
def __call__(self, n: int) -> 'weekday': ...
@@ -25,7 +28,7 @@ SA = ... # type: weekday
SU = ... # type: weekday
class relativedelta:
class relativedelta(object):
def __init__(self,
dt1: Optional[date]=...,
dt2: Optional[date]=...,
@@ -42,71 +45,39 @@ class relativedelta:
hour: Optional[int]=..., minute: Optional[int]=...,
second: Optional[int]=...,
microsecond: Optional[int]=...) -> None: ...
@property
def weeks(self) -> int: ...
@weeks.setter
def weeks(self, value: int) -> None: ...
def normalized(self) -> 'relativedelta': ...
def normalized(self: _SelfT) -> _SelfT: ...
# TODO: use Union when mypy will handle it properly in overloaded operator
# methods (#2129, #1442, #1264 in mypy)
@overload
def __add__(self, other: 'relativedelta') -> 'relativedelta': ...
def __add__(self: _SelfT, other: relativedelta) -> _SelfT: ...
@overload
def __add__(self, other: timedelta) -> 'relativedelta': ...
def __add__(self: _SelfT, other: timedelta) -> _SelfT: ...
@overload
def __add__(self, other: date) -> date: ...
def __add__(self, other: _DateT) -> _DateT: ...
@overload
def __add__(self, other: datetime) -> datetime: ...
def __radd__(self: _SelfT, other: relativedelta) -> _SelfT: ...
@overload
def __radd__(self, other: 'relativedelta') -> 'relativedelta': ...
def __radd__(self: _SelfT, other: timedelta) -> _SelfT: ...
@overload
def __radd__(self, other: timedelta) -> 'relativedelta': ...
def __radd__(self, other: _DateT) -> _DateT: ...
@overload
def __radd__(self, other: date) -> date: ...
def __rsub__(self: _SelfT, other: relativedelta) -> _SelfT: ...
@overload
def __radd__(self, other: datetime) -> datetime: ...
def __rsub__(self: _SelfT, other: timedelta) -> _SelfT: ...
@overload
def __rsub__(self, other: 'relativedelta') -> 'relativedelta': ...
@overload
def __rsub__(self, other: timedelta) -> 'relativedelta': ...
@overload
def __rsub__(self, other: date) -> date: ...
@overload
def __rsub__(self, other: datetime) -> datetime: ...
def __sub__(self, other: 'relativedelta') -> 'relativedelta': ...
def __neg__(self) -> 'relativedelta': ...
def __rsub__(self, other: _DateT) -> _DateT: ...
def __sub__(self: _SelfT, other: relativedelta) -> _SelfT: ...
def __neg__(self: _SelfT) -> _SelfT: ...
def __bool__(self) -> bool: ...
def __nonzero__(self) -> bool: ...
def __mul__(self, other: float) -> 'relativedelta': ...
def __rmul__(self, other: float) -> 'relativedelta': ...
def __mul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __rmul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __eq__(self, other) -> bool: ...
def __ne__(self, other: object) -> bool: ...
def __div__(self, other: float) -> 'relativedelta': ...
def __truediv__(self, other: float) -> 'relativedelta': ...
def __div__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __truediv__(self: _SelfT, other: SupportsFloat) -> _SelfT: ...
def __repr__(self) -> str: ...

View File

@@ -8,5 +8,5 @@ from .tz import (
tzical as tzical,
gettz as gettz,
datetime_exists as datetime_exists,
datetime_ambiguous as datetime_ambiguous
datetime_ambiguous as datetime_ambiguous,
)

View File

@@ -1,9 +1,11 @@
from typing import Any, Optional, Union, IO, Tuple, List
from typing import Any, Optional, Union, IO, Text, Tuple, List
import datetime
from ._common import tzname_in_python2 as tzname_in_python2, _tzinfo as _tzinfo
from ._common import tzrangebase as tzrangebase, enfold as enfold
from ..relativedelta import relativedelta
_FileObj = Union[str, Text, IO[str], IO[Text]]
ZERO = ... # type: datetime.timedelta
EPOCH = ... # type: datetime.datetime
EPOCHORDINAL = ... # type: int
@@ -47,7 +49,7 @@ class _ttinfo:
def __ne__(self, other): ...
class tzfile(_tzinfo):
def __init__(self, fileobj: Union[str, IO[str]], filename: Optional[str] = ...) -> None: ...
def __init__(self, fileobj: _FileObj, filename: Optional[Text] = ...) -> None: ...
def is_ambiguous(self, dt: Optional[datetime.datetime], idx: Optional[int] = ...) -> bool: ...
def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ...
def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ...
@@ -60,22 +62,22 @@ class tzfile(_tzinfo):
class tzrange(tzrangebase):
hasdst = ... # type: bool
def __init__(self, stdabbr: str, stdoffset: Union[int, datetime.timedelta, None] = ..., dstabbr: Optional[str] = ..., dstoffset: Union[int, datetime.timedelta, None] = ..., start: Optional[relativedelta] = ..., end: Optional[relativedelta] = ...) -> None: ...
def __init__(self, stdabbr: Text, stdoffset: Union[int, datetime.timedelta, None] = ..., dstabbr: Optional[Text] = ..., dstoffset: Union[int, datetime.timedelta, None] = ..., start: Optional[relativedelta] = ..., end: Optional[relativedelta] = ...) -> None: ...
def transitions(self, year: int) -> Tuple[datetime.datetime, datetime.datetime]: ...
def __eq__(self, other): ...
class tzstr(tzrange):
hasdst = ... # type: bool
def __init__(self, s: Union[bytes, str, IO[str]], posix_offset: bool = ...) -> None: ...
def __init__(self, s: Union[bytes, _FileObj], posix_offset: bool = ...) -> None: ...
class tzical:
def __init__(self, fileobj: Union[str, IO[str]]) -> None: ...
def __init__(self, fileobj: _FileObj) -> None: ...
def keys(self): ...
def get(self, tzid: Optional[Any] = ...): ...
TZFILES = ... # type: List[str]
TZPATHS = ... # type: List[str]
def gettz(name: Optional[str] = ...) -> Optional[datetime.tzinfo]: ...
def gettz(name: Optional[Text] = ...) -> Optional[datetime.tzinfo]: ...
def datetime_exists(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ...
def datetime_ambiguous(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ...