-
-
Notifications
You must be signed in to change notification settings - Fork 29.9k
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
pydoc: move __future__ imports out of the DATA block #70308
Comments
Currently, for a module that uses future imports, the DATA section of Even though it is fully-featured _Feature objects that are imported, it probably makes sense to move them out of this section. |
Reproduced on 3.11. |
I thought that _Feature starts with an underscore precisely to evade such listings. Do other "private" module data also get listed? |
It's like this: >>> import foo
>>> dir(foo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'annotations', 'x']
>>> foo.annotations
_Feature((3, 7, 0, 'beta', 1), (3, 11, 0, 'alpha', 0), 16777216) So the attribute in foo is called annotations, i.e. it's not private. |
I am positive about this idea, but we must also think about the possible negative consequences. For example, the future annotations will be included in the star-import by default and can override some global names. The fact that some names not visible in the module help can override global names can be confusing. I think it should be discussed with a wider auditory. |
That's a good point. I see that the __future__ imports appear in the dir() of the module, and indeed they are imported with 'from m import *'. But I wonder if that is actually a bug. If you try this: % cat x.py from __future__ import annotations % cat y.py print(dir())
class D:
def f(self, a: D):
return 42 % ./python.exe y.py
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'annotations']
Traceback (most recent call last):
File "/Users/iritkatriel/src/cpython-654/y.py", line 5, in <module>
class D:
^^^^^^^^
File "/Users/iritkatriel/src/cpython-654/y.py", line 6, in D
def f(self, a: D):
^
NameError: name 'D' is not defined but if you add "from __future__ import annotations" at the top of y.py, then it does run. So perhaps the future imports should be excluded by "from m import *"? |
I once proposed to exclude modules from the star import by default, but this proposition was rejected. You can try, maybe your proposition will be more acceptable. |
Module objects are not shown in the help unless they are submodules of the specified module, even if they are imported with the star import. With this precedence I think it is okay to exclude the __future__ annotations as well. |
Thank you, Serhiy! |
I am sorry that I did not test the changes manually, but it seems that __future__ annotations are now disappeared from the pydoc output for the __future__ module help. $ ./python -m pydoc __future__ It is now difficult to get a list of available features from the help. They should be kept in the DATA section for the __future__ module. |
Yet one bug: PR 30888 only changed the text output. But there is also the html output generator. |
I'm not sure - if I revert the change like this: if isinstance(getattr(obj, name, None), __future__._Feature):
- return False
+ pass # return False then test_html_doc fails: ====================================================================== Traceback (most recent call last):
File "/Users/iritkatriel/src/cpython/Lib/test/test_pydoc.py", line 414, in test_html_doc
self.assertEqual(text_lines, expected_lines)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Lists differ: ['tes[1392 chars]t]', "print_function = _Feature((2, 6, 0, 'alp[156 chars]ody'] != ['tes[1392 chars]t]', 'type_union1 = typing.Union[int, str]', '[72 chars]ody'] First differing element 55: First list contains 1 additional elements. ['test.pydoc_mod (version 1.2.3.4)',
|
Sorry, I was wrong. The changed code is common for all generators. Perhaps I tested with wrong version. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: