classification
Title: Doc: Namespace Packages: Inconsistent documentation of __loader__ being None
Type: enhancement Stage: patch review
Components: Documentation Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: barry Nosy List: barry, brett.cannon, cheryl.sabella, docs@python, eric.smith, eric.snow, maggyero, mdk, miss-islington, ncoghlan
Priority: normal Keywords: patch

Created on 2018-11-06 22:29 by mdk, last changed 2020-10-24 03:04 by maggyero.

Pull Requests
URL Status Linked Edit
PR 10376 merged maggyero, 2018-11-07 14:43
PR 10016 open maggyero, 2018-11-07 14:47
PR 15190 merged maggyero, 2019-08-09 08:29
PR 22872 merged miss-islington, 2020-10-21 21:17
PR 22873 merged miss-islington, 2020-10-21 21:17
Messages (12)
msg329392 - (view) Author: Julien Palard (mdk) * (Python committer) Date: 2018-11-06 22:29
The documentation states that a __loader__ of a namespace package should be None:

- [1] "For namespace packages this should be set to None."
- [2] "To indicate to the import machinery that the spec represents a namespace portion. the path entry finder sets “loader” on the spec to None".

But this looks wrong [3], looks like it has been changed in [4]/[5].

I think one should rely on __file__ being None on namespace packages (which make sense as they span over multiple directories) instead of __loader__ being None (a side effect of the import machinery ?).


[1]: https://docs.python.org/3/library/importlib.html#importlib.machinery.ModuleSpec.loader
[2]: https://docs.python.org/3/reference/import.html#path-entry-finder-protocol
[3]: https://stackoverflow.com/questions/52869541/namespace-package-spec-loader-and-loader-attributes-not-set-to-none
[4]: https://bugs.python.org/issue32303
[5]: https://github.com/python/cpython/pull/5481/files#diff-a6592cec2ebc8dba9bbf7d396370b138L319
msg329419 - (view) Author: Géry (maggyero) * Date: 2018-11-07 15:13
It looks like Barry Warsaw has not been fully updated the documentation after making the __spec__.loader attribute match with the __loader__ attribute, and the __spec__.file attribute match with the __file__ attribute for namespace packages.

Here is a pull request to update the library documentation of importlib (your first link [1]) with the current Barry's implementation:
https://github.com/python/cpython/pull/10016

Here is another pull request to update the reference documentation of the import system (your second link [2], but for a different paragraph, as I think the "To indicate to the import machinery that the spec represents a namespace portion the path entry finder sets “loader” on the spec to None" sentence is correct, since the `_bootstrap.ModuleSpec.loader` attribute of a namespace package remains `None` until the call to the `importlib._bootstrap._init_module_attrs` function):
https://github.com/python/cpython/pull/10376
msg339814 - (view) Author: Cheryl Sabella (cheryl.sabella) * (Python committer) Date: 2019-04-09 23:00
@barry, you started a review of PR10016 and I believe all your requested changes have been made, so please review again when you get a chance.  Please also take a look at PR10376.  Thanks!
msg341173 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2019-05-01 00:56
I've approved both PRs, however I am rather uncomfortable about the code snippet in import.rst.  Géry's change is a good one AFAICT, and thanks for the contribution!  I would feel much better about the long term correctness of this code snippet if we had a doctest to run over it.  But that's for another time.
msg346316 - (view) Author: Géry (maggyero) * Date: 2019-06-23 11:18
@Julien, @Barry

Now that the PRs are merged, I think that we can close this issue.
msg346317 - (view) Author: Géry (maggyero) * Date: 2019-06-23 11:34
Oops, sorry, only one of the two PRs has been merged.
msg379227 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2020-10-21 18:29
Apologies for the long delay in reviewing this bug.  I'm looking at it now, however since Python 3.7 is in security-only mode, this will only apply to 3.10, 3.9, and 3.8.
msg379253 - (view) Author: miss-islington (miss-islington) Date: 2020-10-21 21:17
New changeset 27f1bd8787d24ac53cc3dc6ea5eb00b8a3499839 by Géry Ogam in branch 'master':
bpo-35181: Correct importlib documentation for some module attributes (GH-15190)
https://github.com/python/cpython/commit/27f1bd8787d24ac53cc3dc6ea5eb00b8a3499839
msg379254 - (view) Author: miss-islington (miss-islington) Date: 2020-10-21 21:27
New changeset 916ac9520108831d2099b13992a45884b112b193 by Miss Skeleton (bot) in branch '3.8':
bpo-35181: Correct importlib documentation for some module attributes (GH-15190)
https://github.com/python/cpython/commit/916ac9520108831d2099b13992a45884b112b193
msg379256 - (view) Author: miss-islington (miss-islington) Date: 2020-10-21 21:39
New changeset 6e842bcdf8a47fe081c9f2edc2b8875e1f3e2f18 by Miss Skeleton (bot) in branch '3.9':
bpo-35181: Correct importlib documentation for some module attributes (GH-15190)
https://github.com/python/cpython/commit/6e842bcdf8a47fe081c9f2edc2b8875e1f3e2f18
msg379260 - (view) Author: Barry A. Warsaw (barry) * (Python committer) Date: 2020-10-21 21:57
@maggyero - I haven't merged PR 10016, but I left some additional comments.  Are you still interested in shepherding this PR?
msg379512 - (view) Author: Géry (maggyero) * Date: 2020-10-24 03:04
Thanks @barry for reviewing and merging PR 15190

> I haven't merged PR 10016, but I left some additional comments.  Are you still interested in shepherding this PR?

Also thanks for helping me with @ericsnowcurrently advancing this last PR. Yes I am still interested, I have reviewed all the comments and updated the whole thing, doing my best to keep the two descriptions of the module attributes and spec attributes consistent since this PEP updates both descriptions.
History
Date User Action Args
2020-10-24 03:04:47maggyerosetmessages: + msg379512
2020-10-21 21:57:10barrysetmessages: + msg379260
2020-10-21 21:39:50miss-islingtonsetmessages: + msg379256
2020-10-21 21:27:18miss-islingtonsetmessages: + msg379254
2020-10-21 21:17:58miss-islingtonsetpull_requests: + pull_request21815
2020-10-21 21:17:50miss-islingtonsetpull_requests: + pull_request21814
2020-10-21 21:17:39miss-islingtonsetnosy: + miss-islington
messages: + msg379253
2020-10-21 18:29:31barrysetmessages: + msg379227
versions: + Python 3.9, Python 3.10, - Python 3.7
2019-08-09 08:29:56maggyerosetpull_requests: + pull_request14922
2019-06-23 11:34:10maggyerosetmessages: + msg346317
2019-06-23 11:18:32maggyerosetmessages: + msg346316
2019-05-01 00:56:00barrysetmessages: + msg341173
2019-04-26 22:57:57brett.cannonsetassignee: docs@python -> barry
2019-04-09 23:00:30cheryl.sabellasetversions: + Python 3.8
nosy: + cheryl.sabella

messages: + msg339814

type: enhancement
2018-11-22 23:55:13maggyerosetnosy: + eric.smith
2018-11-07 15:13:59maggyerosetnosy: + brett.cannon, ncoghlan, eric.snow, maggyero
messages: + msg329419
2018-11-07 14:47:06maggyerosetpull_requests: + pull_request9678
2018-11-07 14:43:39maggyerosetkeywords: + patch
stage: patch review
pull_requests: + pull_request9677
2018-11-06 23:41:53barrysetnosy: + barry
2018-11-06 22:29:09mdkcreate