Skip to content

[dateutil] Fix Generator parameters#15574

Closed
eliroca wants to merge 1 commit intopython:mainfrom
eliroca:dateutil-rrule-fix
Closed

[dateutil] Fix Generator parameters#15574
eliroca wants to merge 1 commit intopython:mainfrom
eliroca:dateutil-rrule-fix

Conversation

@eliroca
Copy link
Copy Markdown

@eliroca eliroca commented Mar 29, 2026

No description provided.

@eliroca eliroca force-pushed the dateutil-rrule-fix branch from a33f56d to 1b386e5 Compare March 29, 2026 19:35
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!

@github-actions
Copy link
Copy Markdown
Contributor

According to mypy_primer, this change has no effect on the checked open source code. 🤖🎉

@brianschubert
Copy link
Copy Markdown
Collaborator

#15574 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants