Skip to content
Closed
Changes from all 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
4 changes: 3 additions & 1 deletion stubs/python-dateutil/dateutil/rrule.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@ class rrulebase:
def count(self) -> int | None: ...
def before(self, dt: datetime.datetime, inc: bool = False) -> datetime.datetime | None: ...
def after(self, dt: datetime.datetime, inc: bool = False) -> datetime.datetime | None: ...
def xafter(self, dt: datetime.datetime, count: int | None = None, inc: bool = False) -> Generator[datetime.datetime]: ...
def xafter(
self, dt: datetime.datetime, count: int | None = None, inc: bool = False
) -> Generator[datetime.datetime, None, None]: ...
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, this shouldn't be needed - the defaults for send and return type vars is already None, so omitting them is the preferred form:

typeshed/stdlib/typing.pyi

Lines 543 to 544 in 24827c4

_SendT_contra = TypeVar("_SendT_contra", contravariant=True, default=None)
_ReturnT_co = TypeVar("_ReturnT_co", covariant=True, default=None)

Did you run into a specific problem that this helps with?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes:

[    3s] + python3.11 -m mypy dateutil-stubs
[    5s] dateutil-stubs/rrule.pyi:67: error: "Generator" expects 3 type arguments, but 1 given  [type-arg]
[    5s] dateutil-stubs/tz/win.pyi:2: error: Module "ctypes" has no attribute "_NameTypes"  [attr-defined]

(for the second issue I also opened a PR)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What version of mypy are you using? I'm guessing it's an older version that ships with an outdated copy of the stdlib stubs? Does it work if you use a later version (I think circa 1.15+ based on when those types were last touched in typeshed)?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

python311-mypy-1.8.0

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, all the other places in this project specify all 3 parameters.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that would be the problem. mypy 1.8.0 uses older version of the stdlib stubs that wouldn't be compatible with the current python-dateutil stubs (which I'm assuming you forked to create dateutil-stubs).

If you want to type check the current stubs, you'll need to either use a more recent version of mypy or use --custom-typeshed-dir with a checkout of a more recent copy of the typeshed stdlib stubs.

Copy link
Copy Markdown
Collaborator

@brianschubert brianschubert Mar 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, all the other places in this project specify all 3 parameters.

I'm sure there's some stragglers left over from before type var defaults were introduced :). We might update these in bulk eventually, but they don't really cause any problems at the moment since both forms are treated equivalently by type checkers. At least for new stubs the single argument form is preferred.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm fine with keeping this as a patch on my side. Thanks for the pointers about mypy!

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll go ahead and close this out then. Thanks for the PR in any case!

If you do find any other issues with the dateutil stubs, patches here are always welcome!

def between(
self, after: datetime.datetime, before: datetime.datetime, inc: bool = False, count: int = 1
) -> list[datetime.datetime]: ...
Expand Down
Loading