Skip to content

Several type annotations in _interpreters and _interpqueues are wrong #13351

Closed

Description

@agronholm
  1. _interpreters.exec() is annotated as returning None, while on error it actually returns a namespace (though this fact is largely undocumented)
  2. _interpreters.exec() is annotated as only taking str as the code argument, though it's documented to also accept code objects:

Functions (and code objects) are also supported, with some restrictions.
The code/function must not take any arguments or be a closure
(i.e. have cell vars). Methods and other callables are not supported.

  1. _interpqueues.create() takes 3 mandatory arguments (create(maxsize, fmt, unboundop) -> qid), but the type stub says it takes 2
  2. _interpqueues.get() returns a 3-tuple (item, fmt, unboundop), not 2-tuple as annotated in typeshed
  3. _interpqueues.put takes 4 arguments (qid, item, fmt, unboundop), not 3 as annotated in typeshed (admittedly its own docstring is also wrong!)

I believe the annotations may have been correct at the time they were added, but changes have been made to them in the CPython repository since then.

Activity

  1. AlexWaygood commented on Dec 31, 2024

    @AlexWaygood
    Member

    PR(s) welcome!

    (PRs to improve introspectability in CPython would also be welcome -- I'm guessiong these would probably have all been caught by our tests if inspect.signature() produced good results for these functions!)

  2. max-muoto commented on Jan 2, 2025

    @max-muoto
    Contributor

    Thanks for documenting this @agronholm! I originally annotated these back during the beta period, I'll go through again and make sure these are up to date and put up a PR.

  3. max-muoto commented on Jan 2, 2025

    @max-muoto
    Contributor

    Just put up a PR fixing these: #13355

  4. ZeroIntensity commented on Jan 2, 2025

    @ZeroIntensity
    Member

    _interpreters.exec() is annotated as returning None, while on error it actually returns a namespace (though this fact is largely undocumented)

    It's namespace | None. It only returns a namespace if an exception occurred.

  5. agronholm commented on Jan 2, 2025

    @agronholm
    ContributorAuthor

    _interpreters.exec() is annotated as returning None, while on error it actually returns a namespace (though this fact is largely undocumented)

    It's namespace | None. It only returns a namespace if an exception occurred.

    Isn't that what I said too?

  6. ZeroIntensity commented on Jan 2, 2025

    @ZeroIntensity
    Member

    Ah, I misinterpreted/misread it--I saw "on error" as "erroneously." Sorry 😆

  7. max-muoto commented on Jan 29, 2025

    @max-muoto
    Contributor

    We should be able to close this out. CC: @AlexWaygood

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions