Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-101100: Consolidate documentation on ModuleType attributes #124709

Merged
merged 16 commits into from
Oct 9, 2024

Conversation

AlexWaygood
Copy link
Member

@AlexWaygood AlexWaygood commented Sep 27, 2024

Our documentation for ModuleType attributes is currently quite scattered. Some attributes are documented in the data model; some in the reference guide for the import system; some in the API entry for types.ModuleType; and some in the API entry for importlib.abc.Loader.load_module. Some attributes are documented in several of these places, but the different entries say different things about the same attribute!

This PR consolidates documentation for these attributes into a single list of attributes in the datamodel docs. This is a similar approach to the one we use for attributes on class objects, attributes on function objects, and attributes on code objects. (Unlike those links, though, I haven't used a table for all module attributes, since some of the import-system-related attributes are described over the course of several paragraphs!)

I've tried to keep this PR as small as possible. Unfortunately, in order to not break existing cross references in the documentation, a number of other files have had to be updated as part of the same PR.


📚 Documentation preview 📚: https://cpython-previews--124709.org.readthedocs.build/

@AlexWaygood
Copy link
Member Author

AlexWaygood commented Sep 27, 2024

Docs preview for the new sections in the datamodel describing module attributes: https://cpython-previews--124709.org.readthedocs.build/en/124709/reference/datamodel.html#modules

Copy link
Member

@hugovk hugovk left a comment

Choose a reason for hiding this comment

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

Thank you!

Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Comment on lines 1017 to 1021
.. versionchanged:: 3.12
The value of :attr:`!module__loader__` is expected to be the same as
:attr:`__spec__.loader <importlib.machinery.ModuleSpec.loader>`.
The use of :attr:`!module.__loader__` is deprecated and slated for
removal in Python 3.14.
Copy link
Member

Choose a reason for hiding this comment

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

Should this use a deprecated-removed?

Is it documented in What's New and deprecations/pending-removal-in-3.14.rst?

Copy link
Member Author

Choose a reason for hiding this comment

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

Should this use a deprecated-removed?

I think that makes sense!

Is it documented in What's New and deprecations/pending-removal-in-3.14.rst?

It doesn't appear so. This note is mostly copied from the note that currently exists at https://docs.python.org/3/reference/import.html#loader__, but with some more cross-reference links added.

I'll change the directive to be .. deprecated-removed, but I'm kinda tempted to say that adding a note to "What's new" is out of scope for this PR, which essentially moves documentation around and consolidates it rather than adding new documentation.

Copy link
Member Author

Choose a reason for hiding this comment

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

I took a stab at improving this a bit in 309a9cf and 2dca569!

Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Co-authored-by: Hugo van Kemenade <[email protected]>
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Copy link
Member

@warsaw warsaw left a comment

Choose a reason for hiding this comment

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

I'm not quite finished reviewing this, but because my laptop got rebooted, I'm hoping GH preserved my previous comments. I'll complete the review hopefully tomorrow.

Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
Doc/reference/datamodel.rst Show resolved Hide resolved
Doc/reference/datamodel.rst Show resolved Hide resolved
Doc/reference/datamodel.rst Outdated Show resolved Hide resolved
@bedevere-app
Copy link

bedevere-app bot commented Sep 29, 2024

When you're done making the requested changes, leave the comment: I have made the requested changes; please review again.

@AlexWaygood
Copy link
Member Author

AlexWaygood commented Oct 9, 2024

Thanks all for the excellent review comments! I'm going to land this now -- there's definitely still room for improvement, but I think it can all be done in followups.

A summary of things that could still be clarified:

  • Are __path__ and/or __file__ deprecated? There's no deprecation warning in the docs currently for either of these, so this PR doesn't add one for either. If they're not deprecated, maybe we could consider splitting the docs for these attributes into a different section (along with __name__), so that it's clear that it's still okay for users to read them and rely on them?

  • For the attributes that are definitely not deprecated, such as __name__, do we still want to recommend users to read them from the __spec__ attribute where possible? Asking users to do that from within the module globals (e.g. if __spec__.name == "__main__") feels a bit implausible, but it's maybe not unreasonable to ask users to access it from __spec__ when they're accessing it on an imported module (typing.__spec__.name rather than typing.__name__). It would still cause a lot of churn to a lot of currently working code, though!

  • importlib.abc.Loader.load_module is deprecated, but doesn't indicate when it will be removed. (I'd argue this means it probably can't be removed in 3.14 at this stage, personally... but you'll have to convince @hugovk, not me 😉)

  • The glossary definition of "loader" states:

    It must define a method named load_module().

    Which seems incorrect if load_module is going away!

@AlexWaygood AlexWaygood enabled auto-merge (squash) October 9, 2024 10:43
@AlexWaygood AlexWaygood merged commit 3024b16 into python:main Oct 9, 2024
23 checks passed
@AlexWaygood AlexWaygood deleted the moduletype-attrs branch October 9, 2024 10:53
@miss-islington-app
Copy link

Thanks @AlexWaygood for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12, 3.13.
🐍🍒⛏🤖

@AlexWaygood AlexWaygood added needs backport to 3.13 bugs and security fixes and removed needs backport to 3.13 bugs and security fixes labels Oct 9, 2024
@miss-islington-app
Copy link

Thanks @AlexWaygood for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

@ambv ambv added needs backport to 3.12 bug and security fixes needs backport to 3.13 bugs and security fixes and removed needs backport to 3.12 bug and security fixes needs backport to 3.13 bugs and security fixes labels Oct 9, 2024
@miss-islington-app
Copy link

Thanks @AlexWaygood for the PR 🌮🎉.. I'm working now to backport this PR to: 3.12.
🐍🍒⛏🤖

@miss-islington-app
Copy link

Thanks @AlexWaygood for the PR 🌮🎉.. I'm working now to backport this PR to: 3.13.
🐍🍒⛏🤖

@miss-islington-app
Copy link

Sorry, @AlexWaygood, I could not cleanly backport this to 3.12 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker 3024b16d51bb7f74177c5a5038cc9a56fd2b26bd 3.12

@miss-islington-app
Copy link

Sorry, @AlexWaygood, I could not cleanly backport this to 3.13 due to a conflict.
Please backport using cherry_picker on command line.

cherry_picker 3024b16d51bb7f74177c5a5038cc9a56fd2b26bd 3.13

AlexWaygood added a commit to AlexWaygood/cpython that referenced this pull request Oct 9, 2024
…tributes (python#124709)

Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Barry Warsaw <[email protected]>
Co-authored-by: Jelle Zijlstra <[email protected]>
@bedevere-app
Copy link

bedevere-app bot commented Oct 9, 2024

GH-125208 is a backport of this pull request to the 3.13 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.13 bugs and security fixes label Oct 9, 2024
AlexWaygood added a commit that referenced this pull request Oct 9, 2024
#124709) (#125208)

Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Barry Warsaw <[email protected]>
Co-authored-by: Jelle Zijlstra <[email protected]>
AlexWaygood added a commit to AlexWaygood/cpython that referenced this pull request Oct 9, 2024
…ributes (python#124709)

Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Barry Warsaw <[email protected]>
Co-authored-by: Jelle Zijlstra <[email protected]>

(cherry-picked from commit 3024b16)
@bedevere-app
Copy link

bedevere-app bot commented Oct 9, 2024

GH-125211 is a backport of this pull request to the 3.12 branch.

@bedevere-app bedevere-app bot removed the needs backport to 3.12 bug and security fixes label Oct 9, 2024
AlexWaygood added a commit that referenced this pull request Oct 9, 2024
#124709) (#125211)

Co-authored-by: Hugo van Kemenade <[email protected]>
Co-authored-by: Barry Warsaw <[email protected]>
Co-authored-by: Jelle Zijlstra <[email protected]>
@zware
Copy link
Member

zware commented Oct 10, 2024

Note: this caused some reference warnings in the devguide via intersphinx by removing the .. attribute:: __file__ section; see this CI run for python/devguide@97ad694 (python/devguide#1434). Not sure it's worth changing here, just connecting the dots :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
docs Documentation in the Doc dir topic-importlib
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants