From 7073bc0a49f87ed86444b69cc7332d74b3a4234d Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Tue, 9 Jan 2018 23:06:31 +0100 Subject: [PATCH] Cleanup and merge datetime.pyi (#1805) --- stdlib/2/datetime.pyi | 212 ------------------------------- stdlib/{3 => 2and3}/datetime.pyi | 106 ++++++++++------ 2 files changed, 66 insertions(+), 252 deletions(-) delete mode 100644 stdlib/2/datetime.pyi rename stdlib/{3 => 2and3}/datetime.pyi (73%) diff --git a/stdlib/2/datetime.pyi b/stdlib/2/datetime.pyi deleted file mode 100644 index 725aee3d8..000000000 --- a/stdlib/2/datetime.pyi +++ /dev/null @@ -1,212 +0,0 @@ -# Stubs for datetime - -# NOTE: These are incomplete! - -from time import struct_time -from typing import AnyStr, Optional, SupportsAbs, Tuple, Union, overload - -MINYEAR = 0 -MAXYEAR = 0 - -class tzinfo(object): - def tzname(self, dt: Optional[datetime]) -> str: ... - def utcoffset(self, dt: Optional[datetime]) -> Optional[timedelta]: ... - def dst(self, dt: Optional[datetime]) -> Optional[timedelta]: ... - def fromutc(self, dt: datetime) -> datetime: ... - -_tzinfo = tzinfo - -class date(object): - min = ... # type: date - max = ... # type: date - resolution = ... # type: timedelta - - def __init__(self, year: int, month: int, day: int) -> None: ... - - @classmethod - def fromtimestamp(cls, t: float) -> date: ... - @classmethod - def today(cls) -> date: ... - @classmethod - def fromordinal(cls, n: int) -> date: ... - - @property - def year(self) -> int: ... - @property - def month(self) -> int: ... - @property - def day(self) -> int: ... - - def ctime(self) -> str: ... - def strftime(self, fmt: Union[str, unicode]) -> str: ... - def __format__(self, fmt: AnyStr) -> AnyStr: ... - def isoformat(self) -> str: ... - def timetuple(self) -> struct_time: ... - def toordinal(self) -> int: ... - def replace(self, year: int = ..., month: int = ..., day: int = ...) -> date: ... - def __le__(self, other: date) -> bool: ... - def __lt__(self, other: date) -> bool: ... - def __ge__(self, other: date) -> bool: ... - def __gt__(self, other: date) -> bool: ... - def __add__(self, other: timedelta) -> date: ... - @overload - def __sub__(self, other: timedelta) -> date: ... - @overload - def __sub__(self, other: date) -> timedelta: ... - def __hash__(self) -> int: ... - def weekday(self) -> int: ... - def isoweekday(self) -> int: ... - def isocalendar(self) -> Tuple[int, int, int]: ... - -class time: - min = ... # type: time - max = ... # type: time - resolution = ... # type: timedelta - - def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., - tzinfo: tzinfo = ...) -> None: ... - - @property - def hour(self) -> int: ... - @property - def minute(self) -> int: ... - @property - def second(self) -> int: ... - @property - def microsecond(self) -> int: ... - @property - def tzinfo(self) -> _tzinfo: ... - - def __le__(self, other: time) -> bool: ... - def __lt__(self, other: time) -> bool: ... - def __ge__(self, other: time) -> bool: ... - def __gt__(self, other: time) -> bool: ... - def __hash__(self) -> int: ... - def isoformat(self) -> str: ... - def strftime(self, fmt: Union[str, unicode]) -> str: ... - def __format__(self, fmt: AnyStr) -> AnyStr: ... - def utcoffset(self) -> Optional[timedelta]: ... - def tzname(self) -> Optional[str]: ... - def dst(self) -> Optional[int]: ... - def replace(self, hour: int = ..., minute: int = ..., second: int = ..., - microsecond: int = ..., tzinfo: Optional[_tzinfo] = ...) -> time: ... - -_date = date -_time = time - -class timedelta(SupportsAbs[timedelta]): - min = ... # type: timedelta - max = ... # type: timedelta - resolution = ... # type: timedelta - - def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ..., - milliseconds: float = ..., minutes: float = ..., hours: float = ..., - weeks: float = ...) -> None: ... - - @property - def days(self) -> int: ... - @property - def seconds(self) -> int: ... - @property - def microseconds(self) -> int: ... - - def total_seconds(self) -> float: ... - def __add__(self, other: timedelta) -> timedelta: ... - def __radd__(self, other: timedelta) -> timedelta: ... - def __sub__(self, other: timedelta) -> timedelta: ... - def __rsub__(self, other: timedelta) -> timedelta: ... - def __neg__(self) -> timedelta: ... - def __pos__(self) -> timedelta: ... - def __abs__(self) -> timedelta: ... - def __mul__(self, other: float) -> timedelta: ... - def __rmul__(self, other: float) -> timedelta: ... - @overload - def __floordiv__(self, other: timedelta) -> int: ... - @overload - def __floordiv__(self, other: int) -> timedelta: ... - @overload - def __div__(self, other: timedelta) -> float: ... - @overload - def __div__(self, other: float) -> timedelta: ... - def __le__(self, other: timedelta) -> bool: ... - def __lt__(self, other: timedelta) -> bool: ... - def __ge__(self, other: timedelta) -> bool: ... - def __gt__(self, other: timedelta) -> bool: ... - def __hash__(self) -> int: ... - -class datetime(object): - # TODO: is actually subclass of date, but __le__, __lt__, __ge__, __gt__, __sub__ don't work with date. - min = ... # type: datetime - max = ... # type: datetime - resolution = ... # type: timedelta - - def __init__(self, year: int, month: int, day: int, hour: int = ..., - minute: int = ..., second: int = ..., microsecond: int = ..., - tzinfo: tzinfo = ...) -> None: ... - def __new__(cls, year: int, month: int, day: int, hour: int = ..., - minute: int = ..., second: int = ..., microsecond: int = ..., - tzinfo: tzinfo = ...) -> datetime: ... - - @property - def year(self) -> int: ... - @property - def month(self) -> int: ... - @property - def day(self) -> int: ... - @property - def hour(self) -> int: ... - @property - def minute(self) -> int: ... - @property - def second(self) -> int: ... - @property - def microsecond(self) -> int: ... - @property - def tzinfo(self) -> Optional[_tzinfo]: ... - - @classmethod - def fromtimestamp(cls, t: float, tz: _tzinfo = ...) -> datetime: ... - @classmethod - def utcfromtimestamp(cls, t: float) -> datetime: ... - @classmethod - def today(cls) -> datetime: ... - @classmethod - def fromordinal(cls, n: int) -> datetime: ... - @classmethod - def now(cls, tz: _tzinfo = ...) -> datetime: ... - @classmethod - def utcnow(cls) -> datetime: ... - @classmethod - def combine(cls, date: date, time: time) -> datetime: ... - def strftime(self, fmt: Union[str, unicode]) -> str: ... - def __format__(self, fmt: AnyStr) -> AnyStr: ... - def toordinal(self) -> int: ... - def timetuple(self) -> struct_time: ... - def utctimetuple(self) -> struct_time: ... - def date(self) -> _date: ... - def time(self) -> _time: ... - def timetz(self) -> _time: ... - def replace(self, year: int = ..., month: int = ..., day: int = ..., hour: int = ..., - minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: - Optional[_tzinfo] = ...) -> datetime: ... - def astimezone(self, tz: _tzinfo) -> datetime: ... - def ctime(self) -> str: ... - def isoformat(self, sep: str = ...) -> str: ... - @classmethod - def strptime(cls, date_string: Union[str, unicode], format: Union[str, unicode]) -> datetime: ... - def utcoffset(self) -> Optional[timedelta]: ... - def tzname(self) -> Optional[str]: ... - def dst(self) -> Optional[int]: ... - def __le__(self, other: datetime) -> bool: ... - def __lt__(self, other: datetime) -> bool: ... - def __ge__(self, other: datetime) -> bool: ... - def __gt__(self, other: datetime) -> bool: ... - def __add__(self, other: timedelta) -> datetime: ... - @overload - def __sub__(self, other: datetime) -> timedelta: ... - @overload - def __sub__(self, other: timedelta) -> datetime: ... - def __hash__(self) -> int: ... - def weekday(self) -> int: ... - def isoweekday(self) -> int: ... - def isocalendar(self) -> Tuple[int, int, int]: ... diff --git a/stdlib/3/datetime.pyi b/stdlib/2and3/datetime.pyi similarity index 73% rename from stdlib/3/datetime.pyi rename to stdlib/2and3/datetime.pyi index 44adfe5a6..ea742b9ce 100644 --- a/stdlib/3/datetime.pyi +++ b/stdlib/2and3/datetime.pyi @@ -1,9 +1,17 @@ import sys from time import struct_time -from typing import Optional, SupportsAbs, Tuple, overload +from typing import ( + AnyStr, Optional, SupportsAbs, Tuple, Union, overload, + ClassVar, +) -MINYEAR = 0 -MAXYEAR = 0 +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +MINYEAR: int +MAXYEAR: int class tzinfo: def tzname(self, dt: Optional[datetime]) -> str: ... @@ -11,21 +19,21 @@ class tzinfo: def dst(self, dt: Optional[datetime]) -> Optional[timedelta]: ... def fromutc(self, dt: datetime) -> datetime: ... -class timezone(tzinfo): - utc = ... # type: timezone - min = ... # type: timezone - max = ... # type: timezone +if sys.version_info >= (3, 2): + class timezone(tzinfo): + utc: ClassVar[timezone] + min: ClassVar[timezone] + max: ClassVar[timezone] - def __init__(self, offset: timedelta, name: str = ...) -> None: ... - def __hash__(self) -> int: ... + def __init__(self, offset: timedelta, name: str = ...) -> None: ... + def __hash__(self) -> int: ... _tzinfo = tzinfo -_timezone = timezone class date: - min = ... # type: date - max = ... # type: date - resolution = ... # type: timedelta + min: ClassVar[date] + max: ClassVar[date] + resolution: ClassVar[timedelta] def __init__(self, year: int, month: int, day: int) -> None: ... @@ -44,10 +52,13 @@ class date: def day(self) -> int: ... def ctime(self) -> str: ... - def strftime(self, fmt: str) -> str: ... - def __format__(self, fmt: str) -> str: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... def isoformat(self) -> str: ... - def timetuple(self) -> tuple: ... # TODO return type + def timetuple(self) -> struct_time: ... def toordinal(self) -> int: ... def replace(self, year: int = ..., month: int = ..., day: int = ...) -> date: ... def __le__(self, other: date) -> bool: ... @@ -65,9 +76,9 @@ class date: def isocalendar(self) -> Tuple[int, int, int]: ... class time: - min = ... # type: time - max = ... # type: time - resolution = ... # type: timedelta + min: ClassVar[time] + max: ClassVar[time] + resolution: ClassVar[timedelta] def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: Optional[tzinfo] = ...) -> None: ... @@ -89,8 +100,11 @@ class time: def __gt__(self, other: time) -> bool: ... def __hash__(self) -> int: ... def isoformat(self) -> str: ... - def strftime(self, fmt: str) -> str: ... - def __format__(self, fmt: str) -> str: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... def utcoffset(self) -> Optional[timedelta]: ... def tzname(self) -> Optional[str]: ... def dst(self) -> Optional[int]: ... @@ -101,9 +115,9 @@ _date = date _time = time class timedelta(SupportsAbs[timedelta]): - min = ... # type: timedelta - max = ... # type: timedelta - resolution = ... # type: timedelta + min: ClassVar[timedelta] + max: ClassVar[timedelta] + resolution: ClassVar[timedelta] def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ..., milliseconds: float = ..., minutes: float = ..., hours: float = ..., @@ -120,7 +134,7 @@ class timedelta(SupportsAbs[timedelta]): def __add__(self, other: timedelta) -> timedelta: ... def __radd__(self, other: timedelta) -> timedelta: ... def __sub__(self, other: timedelta) -> timedelta: ... - def __rsub(self, other: timedelta) -> timedelta: ... + def __rsub__(self, other: timedelta) -> timedelta: ... def __neg__(self) -> timedelta: ... def __pos__(self) -> timedelta: ... def __abs__(self) -> timedelta: ... @@ -130,24 +144,29 @@ class timedelta(SupportsAbs[timedelta]): def __floordiv__(self, other: timedelta) -> int: ... @overload def __floordiv__(self, other: int) -> timedelta: ... - @overload - def __truediv__(self, other: timedelta) -> float: ... - @overload - def __truediv__(self, other: float) -> timedelta: ... - def __mod__(self, other: timedelta) -> timedelta: ... - def __divmod__(self, other: timedelta) -> Tuple[int, timedelta]: ... + if sys.version_info >= (3,): + @overload + def __truediv__(self, other: timedelta) -> float: ... + @overload + def __truediv__(self, other: float) -> timedelta: ... + def __mod__(self, other: timedelta) -> timedelta: ... + def __divmod__(self, other: timedelta) -> Tuple[int, timedelta]: ... + else: + @overload + def __div__(self, other: timedelta) -> float: ... + @overload + def __div__(self, other: float) -> timedelta: ... def __le__(self, other: timedelta) -> bool: ... def __lt__(self, other: timedelta) -> bool: ... def __ge__(self, other: timedelta) -> bool: ... def __gt__(self, other: timedelta) -> bool: ... def __hash__(self) -> int: ... - class datetime: # TODO: Is a subclass of date, but this would make some types incompatible. - min = ... # type: datetime - max = ... # type: datetime - resolution = ... # type: timedelta + min: ClassVar[datetime] + max: ClassVar[datetime] + resolution: ClassVar[timedelta] def __init__(self, year: int, month: int, day: int, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., @@ -184,11 +203,15 @@ class datetime: def utcnow(cls) -> datetime: ... @classmethod def combine(cls, date: date, time: time) -> datetime: ... - def strftime(self, fmt: str) -> str: ... - def __format__(self, fmt: str) -> str: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... def toordinal(self) -> int: ... def timetuple(self) -> struct_time: ... - def timestamp(self) -> float: ... + if sys.version_info >= (3, 3): + def timestamp(self) -> float: ... def utctimetuple(self) -> struct_time: ... def date(self) -> _date: ... def time(self) -> _time: ... @@ -196,14 +219,17 @@ class datetime: def replace(self, year: int = ..., month: int = ..., day: int = ..., hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: Optional[_tzinfo] = ...) -> datetime: ... - def astimezone(self, tz: Optional[_tzinfo] = ...) -> datetime: ... + if sys.version_info >= (3, 3): + def astimezone(self, tz: Optional[_tzinfo] = ...) -> datetime: ... + else: + def astimezone(self, tz: _tzinfo) -> datetime: ... def ctime(self) -> str: ... if sys.version_info >= (3, 6): def isoformat(self, sep: str = ..., timespec: str = ...) -> str: ... else: def isoformat(self, sep: str = ...) -> str: ... @classmethod - def strptime(cls, date_string: str, format: str) -> datetime: ... + def strptime(cls, date_string: _Text, format: _Text) -> datetime: ... def utcoffset(self) -> Optional[timedelta]: ... def tzname(self) -> Optional[str]: ... def dst(self) -> Optional[int]: ...