Skip to content

Commit 98bb239

Browse files
authored
[python-dateutil] Add missing stubs (#14326)
1 parent 185e04b commit 98bb239

20 files changed

+437
-153
lines changed

stubs/python-dateutil/@tests/stubtest_allowlist.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
dateutil.parser._tzparser.__init__
2-
dateutil.parser.parserinfo.convertyear
31
dateutil.rrule.weekday.__init__
42
dateutil.tz.tz.tzoffset.instance
53
dateutil.tz.tz.tzstr.instance
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Cannot import these Windows packages at stubtest runtime:
2+
dateutil.tzwin
3+
dateutil.tz.win
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Cannot import these Windows packages at stubtest runtime:
2+
dateutil.tzwin
3+
dateutil.tz.win

stubs/python-dateutil/METADATA.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,2 @@
11
version = "2.9.*"
22
upstream_repository = "https://github.com/dateutil/dateutil"
3-
partial_stub = true
4-
5-
[tool.stubtest]
6-
ignore_missing_stub = true
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from dateutil import easter, parser, relativedelta, rrule, tz, utils, zoneinfo
2+
3+
__all__ = ["easter", "parser", "relativedelta", "rrule", "tz", "utils", "zoneinfo"]
4+
5+
def __dir__() -> list[str]: ...
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from typing import Final
2+
3+
__version__: Final[str]
4+
version: Final[str]
5+
__version_tuple__: Final[tuple[int, int, int]]
6+
version_tuple: Final[tuple[int, int, int]]
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
from datetime import date
2-
from typing import Literal
2+
from typing import Final, Literal
33

4-
EASTER_JULIAN: Literal[1]
5-
EASTER_ORTHODOX: Literal[2]
6-
EASTER_WESTERN: Literal[3]
4+
__all__ = ["easter", "EASTER_JULIAN", "EASTER_ORTHODOX", "EASTER_WESTERN"]
5+
6+
EASTER_JULIAN: Final = 1
7+
EASTER_ORTHODOX: Final = 2
8+
EASTER_WESTERN: Final = 3
79

810
def easter(year: int, method: Literal[1, 2, 3] = 3) -> date: ...
Lines changed: 10 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,12 @@
1-
from collections.abc import Callable, Mapping
2-
from datetime import datetime, tzinfo
3-
from typing import IO, Any
4-
from typing_extensions import TypeAlias
5-
1+
from ._parser import (
2+
DEFAULTPARSER as DEFAULTPARSER,
3+
DEFAULTTZPARSER as DEFAULTTZPARSER,
4+
ParserError as ParserError,
5+
UnknownTimezoneWarning as UnknownTimezoneWarning,
6+
parse as parse,
7+
parser as parser,
8+
parserinfo as parserinfo,
9+
)
610
from .isoparser import isoparse as isoparse, isoparser as isoparser
711

8-
_FileOrStr: TypeAlias = bytes | str | IO[str] | IO[Any]
9-
_TzData: TypeAlias = tzinfo | int | str | None
10-
_TzInfo: TypeAlias = Mapping[str, _TzData] | Callable[[str, int], _TzData]
11-
12-
class parserinfo:
13-
JUMP: list[str]
14-
WEEKDAYS: list[tuple[str, ...]]
15-
MONTHS: list[tuple[str, ...]]
16-
HMS: list[tuple[str, str, str]]
17-
AMPM: list[tuple[str, str]]
18-
UTCZONE: list[str]
19-
PERTAIN: list[str]
20-
TZOFFSET: dict[str, int]
21-
def __init__(self, dayfirst: bool = False, yearfirst: bool = False) -> None: ...
22-
def jump(self, name: str) -> bool: ...
23-
def weekday(self, name: str) -> int | None: ...
24-
def month(self, name: str) -> int | None: ...
25-
def hms(self, name: str) -> int | None: ...
26-
def ampm(self, name: str) -> int | None: ...
27-
def pertain(self, name: str) -> bool: ...
28-
def utczone(self, name: str) -> bool: ...
29-
def tzoffset(self, name: str) -> int | None: ...
30-
def convertyear(self, year: int) -> int: ...
31-
def validate(self, res: datetime) -> bool: ...
32-
33-
class parser:
34-
def __init__(self, info: parserinfo | None = None) -> None: ...
35-
def parse(
36-
self,
37-
timestr: _FileOrStr,
38-
default: datetime | None = None,
39-
ignoretz: bool = False,
40-
tzinfos: _TzInfo | None = None,
41-
*,
42-
dayfirst: bool | None = ...,
43-
yearfirst: bool | None = ...,
44-
fuzzy: bool = ...,
45-
fuzzy_with_tokens: bool = ...,
46-
) -> datetime: ...
47-
48-
DEFAULTPARSER: parser
49-
50-
def parse(
51-
timestr: _FileOrStr,
52-
parserinfo: parserinfo | None = None,
53-
*,
54-
dayfirst: bool | None = ...,
55-
yearfirst: bool | None = ...,
56-
ignoretz: bool = ...,
57-
fuzzy: bool = ...,
58-
fuzzy_with_tokens: bool = ...,
59-
default: datetime | None = ...,
60-
tzinfos: _TzInfo | None = ...,
61-
) -> datetime: ...
62-
63-
class _tzparser: ...
64-
65-
DEFAULTTZPARSER: _tzparser
66-
67-
class ParserError(ValueError): ...
68-
class UnknownTimezoneWarning(RuntimeWarning): ...
12+
__all__ = ["parse", "parser", "parserinfo", "isoparse", "isoparser", "ParserError", "UnknownTimezoneWarning"]
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import re
2+
from _typeshed import Incomplete, SupportsRead
3+
from collections.abc import Callable, Mapping
4+
from datetime import _TzInfo, datetime
5+
from io import StringIO
6+
from typing import IO, Any
7+
from typing_extensions import Self, TypeAlias
8+
9+
_FileOrStr: TypeAlias = bytes | str | IO[str] | IO[Any]
10+
_TzData: TypeAlias = _TzInfo | int | str | None
11+
_TzInfos: TypeAlias = Mapping[str, _TzData] | Callable[[str, int], _TzData]
12+
13+
__all__ = ["parse", "parserinfo", "ParserError"]
14+
15+
class _timelex:
16+
_split_decimal: re.Pattern[str]
17+
instream: StringIO | SupportsRead[str]
18+
charstack: list[str]
19+
tokenstack: list[str]
20+
eof: bool
21+
def __init__(self, instream: str | bytes | bytearray | SupportsRead[str]) -> None: ...
22+
def get_token(self) -> str | None: ...
23+
def __iter__(self) -> Self: ...
24+
def __next__(self) -> str: ...
25+
def next(self) -> str: ...
26+
@classmethod
27+
def split(cls, s: str) -> list[str]: ...
28+
@classmethod
29+
def isword(cls, nextchar: str) -> bool: ...
30+
@classmethod
31+
def isnum(cls, nextchar: str) -> bool: ...
32+
@classmethod
33+
def isspace(cls, nextchar: str) -> bool: ...
34+
35+
class _resultbase:
36+
def __init__(self) -> None: ...
37+
def _repr(self, classname: str) -> str: ...
38+
def __len__(self) -> int: ...
39+
40+
class parserinfo:
41+
JUMP: list[str]
42+
WEEKDAYS: list[tuple[str, str]]
43+
MONTHS: list[tuple[str, str] | tuple[str, str, str]]
44+
HMS: list[tuple[str, str, str]]
45+
AMPM: list[tuple[str, str]]
46+
UTCZONE: list[str]
47+
PERTAIN: list[str]
48+
TZOFFSET: dict[str, int]
49+
def __init__(self, dayfirst: bool = False, yearfirst: bool = False) -> None: ...
50+
def jump(self, name: str) -> bool: ...
51+
def weekday(self, name: str) -> int | None: ...
52+
def month(self, name: str) -> int | None: ...
53+
def hms(self, name: str) -> int | None: ...
54+
def ampm(self, name: str) -> int | None: ...
55+
def pertain(self, name: str) -> bool: ...
56+
def utczone(self, name: str) -> bool: ...
57+
def tzoffset(self, name: str) -> int | None: ...
58+
def convertyear(self, year: int, century_specified: bool = False) -> int: ...
59+
def validate(self, res: datetime) -> bool: ...
60+
61+
class _ymd(list[Incomplete]):
62+
century_specified: bool
63+
dstridx: int | None
64+
mstridx: int | None
65+
ystridx: int | None
66+
def __init__(self, *args, **kwargs) -> None: ...
67+
@property
68+
def has_year(self) -> bool: ...
69+
@property
70+
def has_month(self) -> bool: ...
71+
@property
72+
def has_day(self) -> bool: ...
73+
def could_be_day(self, value): ...
74+
def append(self, val, label=None): ...
75+
def _resolve_from_stridxs(self, strids): ...
76+
def resolve_ymd(self, yearfirst: bool | None, dayfirst: bool | None): ...
77+
78+
class parser:
79+
info: parserinfo
80+
def __init__(self, info: parserinfo | None = None) -> None: ...
81+
def parse(
82+
self,
83+
timestr: _FileOrStr,
84+
default: datetime | None = None,
85+
ignoretz: bool = False,
86+
tzinfos: _TzInfos | None = None,
87+
*,
88+
dayfirst: bool | None = ...,
89+
yearfirst: bool | None = ...,
90+
fuzzy: bool = ...,
91+
fuzzy_with_tokens: bool = ...,
92+
) -> datetime: ...
93+
94+
DEFAULTPARSER: parser
95+
96+
def parse(
97+
timestr: _FileOrStr,
98+
parserinfo: parserinfo | None = None,
99+
*,
100+
dayfirst: bool | None = ...,
101+
yearfirst: bool | None = ...,
102+
ignoretz: bool = ...,
103+
fuzzy: bool = ...,
104+
fuzzy_with_tokens: bool = ...,
105+
default: datetime | None = ...,
106+
tzinfos: _TzInfos | None = ...,
107+
) -> datetime: ...
108+
109+
class _tzparser:
110+
class _result(_resultbase):
111+
stdabbr: str | None
112+
stdoffset: int | None
113+
dstabbr: str | None
114+
dstoffset: int | None
115+
start: _attr
116+
end: _attr
117+
118+
class _attr(_resultbase):
119+
month: int | None
120+
week: int | None
121+
weekday: int | None
122+
yday: int | None
123+
jyday: int | None
124+
day: int | None
125+
time: int | None
126+
127+
def __init__(self): ...
128+
129+
def parse(self, tzstr: str | re.Pattern[str]) -> _result | None: ...
130+
131+
DEFAULTTZPARSER: _tzparser
132+
133+
class ParserError(ValueError): ...
134+
class UnknownTimezoneWarning(RuntimeWarning): ...

stubs/python-dateutil/dateutil/parser/isoparser.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ from typing_extensions import TypeAlias
55
_Readable: TypeAlias = SupportsRead[str | bytes]
66
_TakesAscii: TypeAlias = str | bytes | _Readable
77

8+
__all__ = ["isoparse", "isoparser"]
9+
810
class isoparser:
911
def __init__(self, sep: str | bytes | None = None): ...
1012
def isoparse(self, dt_str: _TakesAscii) -> datetime: ...

0 commit comments

Comments
 (0)