Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions stubs/python-dateutil/@tests/stubtest_allowlist.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
dateutil.parser._tzparser.__init__
dateutil.parser.parserinfo.convertyear
dateutil.rrule.weekday.__init__
dateutil.tz.tz.tzoffset.instance
dateutil.tz.tz.tzstr.instance
Expand Down
3 changes: 3 additions & 0 deletions stubs/python-dateutil/@tests/stubtest_allowlist_darwin.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Cannot import these Windows packages at stubtest runtime:
dateutil.tzwin
dateutil.tz.win
3 changes: 3 additions & 0 deletions stubs/python-dateutil/@tests/stubtest_allowlist_linux.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Cannot import these Windows packages at stubtest runtime:
dateutil.tzwin
dateutil.tz.win
4 changes: 0 additions & 4 deletions stubs/python-dateutil/METADATA.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,2 @@
version = "2.9.*"
upstream_repository = "https://github.com/dateutil/dateutil"
partial_stub = true

[tool.stubtest]
ignore_missing_stub = true
5 changes: 5 additions & 0 deletions stubs/python-dateutil/dateutil/__init__.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from dateutil import easter, parser, relativedelta, rrule, tz, utils, zoneinfo

__all__ = ["easter", "parser", "relativedelta", "rrule", "tz", "utils", "zoneinfo"]

def __dir__() -> list[str]: ...
6 changes: 6 additions & 0 deletions stubs/python-dateutil/dateutil/_version.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from typing import Final

__version__: Final[str]
version: Final[str]
__version_tuple__: Final[tuple[int, int, int]]
version_tuple: Final[tuple[int, int, int]]
10 changes: 6 additions & 4 deletions stubs/python-dateutil/dateutil/easter.pyi
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from datetime import date
from typing import Literal
from typing import Final, Literal

EASTER_JULIAN: Literal[1]
EASTER_ORTHODOX: Literal[2]
EASTER_WESTERN: Literal[3]
__all__ = ["easter", "EASTER_JULIAN", "EASTER_ORTHODOX", "EASTER_WESTERN"]

EASTER_JULIAN: Final = 1
EASTER_ORTHODOX: Final = 2
EASTER_WESTERN: Final = 3

def easter(year: int, method: Literal[1, 2, 3] = 3) -> date: ...
76 changes: 10 additions & 66 deletions stubs/python-dateutil/dateutil/parser/__init__.pyi
Original file line number Diff line number Diff line change
@@ -1,68 +1,12 @@
from collections.abc import Callable, Mapping
from datetime import datetime, tzinfo
from typing import IO, Any
from typing_extensions import TypeAlias

from ._parser import (
DEFAULTPARSER as DEFAULTPARSER,
DEFAULTTZPARSER as DEFAULTTZPARSER,
ParserError as ParserError,
UnknownTimezoneWarning as UnknownTimezoneWarning,
parse as parse,
parser as parser,
parserinfo as parserinfo,
)
from .isoparser import isoparse as isoparse, isoparser as isoparser

_FileOrStr: TypeAlias = bytes | str | IO[str] | IO[Any]
_TzData: TypeAlias = tzinfo | int | str | None
_TzInfo: TypeAlias = Mapping[str, _TzData] | Callable[[str, int], _TzData]

class parserinfo:
JUMP: list[str]
WEEKDAYS: list[tuple[str, ...]]
MONTHS: list[tuple[str, ...]]
HMS: list[tuple[str, str, str]]
AMPM: list[tuple[str, str]]
UTCZONE: list[str]
PERTAIN: list[str]
TZOFFSET: dict[str, int]
def __init__(self, dayfirst: bool = False, yearfirst: bool = False) -> None: ...
def jump(self, name: str) -> bool: ...
def weekday(self, name: str) -> int | None: ...
def month(self, name: str) -> int | None: ...
def hms(self, name: str) -> int | None: ...
def ampm(self, name: str) -> int | None: ...
def pertain(self, name: str) -> bool: ...
def utczone(self, name: str) -> bool: ...
def tzoffset(self, name: str) -> int | None: ...
def convertyear(self, year: int) -> int: ...
def validate(self, res: datetime) -> bool: ...

class parser:
def __init__(self, info: parserinfo | None = None) -> None: ...
def parse(
self,
timestr: _FileOrStr,
default: datetime | None = None,
ignoretz: bool = False,
tzinfos: _TzInfo | None = None,
*,
dayfirst: bool | None = ...,
yearfirst: bool | None = ...,
fuzzy: bool = ...,
fuzzy_with_tokens: bool = ...,
) -> datetime: ...

DEFAULTPARSER: parser

def parse(
timestr: _FileOrStr,
parserinfo: parserinfo | None = None,
*,
dayfirst: bool | None = ...,
yearfirst: bool | None = ...,
ignoretz: bool = ...,
fuzzy: bool = ...,
fuzzy_with_tokens: bool = ...,
default: datetime | None = ...,
tzinfos: _TzInfo | None = ...,
) -> datetime: ...

class _tzparser: ...

DEFAULTTZPARSER: _tzparser

class ParserError(ValueError): ...
class UnknownTimezoneWarning(RuntimeWarning): ...
__all__ = ["parse", "parser", "parserinfo", "isoparse", "isoparser", "ParserError", "UnknownTimezoneWarning"]
134 changes: 134 additions & 0 deletions stubs/python-dateutil/dateutil/parser/_parser.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
import re
from _typeshed import SupportsRead
from collections.abc import Callable, Mapping
from datetime import _TzInfo, datetime
from io import StringIO
from typing import IO, Any
from typing_extensions import Self, TypeAlias

_FileOrStr: TypeAlias = bytes | str | IO[str] | IO[Any]
_TzData: TypeAlias = _TzInfo | int | str | None
_TzInfos: TypeAlias = Mapping[str, _TzData] | Callable[[str, int], _TzData]

__all__ = ["parse", "parserinfo", "ParserError"]

class _timelex:
_split_decimal: re.Pattern[str]
instream: StringIO | SupportsRead
charstack: list[str]
tokenstack: list[str]
eof: bool
def __init__(self, instream: str | bytes | bytearray | SupportsRead) -> None: ...
def get_token(self) -> str | None: ...
def __iter__(self) -> Self: ...
def __next__(self) -> str: ...
def next(self) -> str: ...
@classmethod
def split(cls, s: str) -> list[str]: ...
@classmethod
def isword(cls, nextchar: str) -> bool: ...
@classmethod
def isnum(cls, nextchar: str) -> bool: ...
@classmethod
def isspace(cls, nextchar: str) -> bool: ...

class _resultbase:
def __init__(self) -> None: ...
def _repr(self, classname: str) -> str: ...
def __len__(self) -> int: ...

class parserinfo:
JUMP: list[str]
WEEKDAYS: list[tuple[str, str]]
MONTHS: list[tuple[str, str] | tuple[str, str, str]]
HMS: list[tuple[str, str, str]]
AMPM: list[tuple[str, str]]
UTCZONE: list[str]
PERTAIN: list[str]
TZOFFSET: dict[str, int]
def __init__(self, dayfirst: bool = False, yearfirst: bool = False) -> None: ...
def jump(self, name: str) -> bool: ...
def weekday(self, name: str) -> int | None: ...
def month(self, name: str) -> int | None: ...
def hms(self, name: str) -> int | None: ...
def ampm(self, name: str) -> int | None: ...
def pertain(self, name: str) -> bool: ...
def utczone(self, name: str) -> bool: ...
def tzoffset(self, name: str) -> int | None: ...
def convertyear(self, year: int, century_specified: bool = False) -> int: ...
def validate(self, res: datetime) -> bool: ...

class _ymd(list):
century_specified: bool
dstridx: int | None
mstridx: int | None
ystridx: int | None
def __init__(self, *args, **kwargs) -> None: ...
@property
def has_year(self) -> bool: ...
@property
def has_month(self) -> bool: ...
@property
def has_day(self) -> bool: ...
def could_be_day(self, value): ...
def append(self, val, label=None): ...
def _resolve_from_stridxs(self, strids): ...
def resolve_ymd(self, yearfirst: bool | None, dayfirst: bool | None): ...

class parser:
info: parserinfo
def __init__(self, info: parserinfo | None = None) -> None: ...
def parse(
self,
timestr: _FileOrStr,
default: datetime | None = None,
ignoretz: bool = False,
tzinfos: _TzInfos | None = None,
*,
dayfirst: bool | None = ...,
yearfirst: bool | None = ...,
fuzzy: bool = ...,
fuzzy_with_tokens: bool = ...,
) -> datetime: ...

DEFAULTPARSER: parser

def parse(
timestr: _FileOrStr,
parserinfo: parserinfo | None = None,
*,
dayfirst: bool | None = ...,
yearfirst: bool | None = ...,
ignoretz: bool = ...,
fuzzy: bool = ...,
fuzzy_with_tokens: bool = ...,
default: datetime | None = ...,
tzinfos: _TzInfos | None = ...,
) -> datetime: ...

class _tzparser:
class _result(_resultbase):
stdabbr: str | None
stdoffset: int | None
dstabbr: str | None
dstoffset: int | None
start: _attr
end: _attr

class _attr(_resultbase):
month: int | None
week: int | None
weekday: int | None
yday: int | None
jyday: int | None
day: int | None
time: int | None

def __init__(self): ...

def parse(self, tzstr: str | re.Pattern[str]) -> _result | None: ...

DEFAULTTZPARSER: _tzparser

class ParserError(ValueError): ...
class UnknownTimezoneWarning(RuntimeWarning): ...
2 changes: 2 additions & 0 deletions stubs/python-dateutil/dateutil/parser/isoparser.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ from typing_extensions import TypeAlias
_Readable: TypeAlias = SupportsRead[str | bytes]
_TakesAscii: TypeAlias = str | bytes | _Readable

__all__ = ["isoparse", "isoparser"]

class isoparser:
def __init__(self, sep: str | bytes | None = None): ...
def isoparse(self, dt_str: _TakesAscii) -> datetime: ...
Expand Down
2 changes: 2 additions & 0 deletions stubs/python-dateutil/dateutil/relativedelta.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ FR: weekday
SA: weekday
SU: weekday

__all__ = ["relativedelta", "MO", "TU", "WE", "TH", "FR", "SA", "SU"]

class relativedelta:
years: int
months: int
Expand Down
Loading