From 3586b798cc854e49a8a90f8b65e8c1397140bd39 Mon Sep 17 00:00:00 2001 From: Lev Blit Date: Wed, 1 Oct 2025 15:55:09 +0300 Subject: [PATCH] python-dateutil: add overload to rrulestr --- .../@tests/test_cases/check_rrule.py | 13 ++++++++ stubs/python-dateutil/dateutil/rrule.pyi | 31 ++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 stubs/python-dateutil/@tests/test_cases/check_rrule.py diff --git a/stubs/python-dateutil/@tests/test_cases/check_rrule.py b/stubs/python-dateutil/@tests/test_cases/check_rrule.py new file mode 100644 index 000000000000..db0810b38cdb --- /dev/null +++ b/stubs/python-dateutil/@tests/test_cases/check_rrule.py @@ -0,0 +1,13 @@ +from typing import Union +from typing_extensions import assert_type + +from dateutil.rrule import rrule, rruleset, rrulestr + +rs1 = rrulestr("", forceset=True) +assert_type(rs1, rruleset) + +rs2 = rrulestr("", compatible=True) +assert_type(rs2, rruleset) + +rs3 = rrulestr("") +assert_type(rs3, Union[rrule, rruleset]) diff --git a/stubs/python-dateutil/dateutil/rrule.pyi b/stubs/python-dateutil/dateutil/rrule.pyi index c63010871f87..53bdbe4ba440 100644 --- a/stubs/python-dateutil/dateutil/rrule.pyi +++ b/stubs/python-dateutil/dateutil/rrule.pyi @@ -1,7 +1,7 @@ import datetime from _typeshed import Incomplete from collections.abc import Generator, Iterable, Iterator, Sequence -from typing import Final, Literal +from typing import Final, Literal, overload from typing_extensions import Self, TypeAlias from ._common import weekday as weekdaybase @@ -174,6 +174,35 @@ class rruleset(rrulebase): def exdate(self, exdate) -> None: ... class _rrulestr: + @overload + def __call__( + self, + s: str, + *, + forceset: Literal[True], + dtstart: datetime.date | None = None, + cache: bool | None = None, + unfold: bool = False, + compatible: bool = False, + ignoretz: bool = False, + tzids=None, + tzinfos=None, + ) -> rruleset: ... + @overload + def __call__( + self, + s: str, + *, + compatible: Literal[True], + dtstart: datetime.date | None = None, + cache: bool | None = None, + unfold: bool = False, + forceset: bool = False, + ignoretz: bool = False, + tzids=None, + tzinfos=None, + ) -> rruleset: ... + @overload def __call__( self, s: str,