]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-26120: do not exclude __future__ import in pydoc of the __future__ module itself...
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>
Tue, 29 Mar 2022 22:07:15 +0000 (23:07 +0100)
committerGitHub <noreply@github.com>
Tue, 29 Mar 2022 22:07:15 +0000 (23:07 +0100)
Lib/pydoc.py
Lib/test/test_pydoc.py

index 7ae390852fa01bb723974cfc12adc2d6e6513d38..18b476ee660dc6a3fd2d6a230ee8bd3f0b856668 100755 (executable)
@@ -292,7 +292,7 @@ def visiblename(name, all=None, obj=None):
     if name.startswith('_') and hasattr(obj, '_fields'):
         return True
     # Ignore __future__ imports.
-    if name in _future_feature_names:
+    if obj is not __future__ and name in _future_feature_names:
         if isinstance(getattr(obj, name, None), __future__._Feature):
             return False
     if all is not None:
index e2dab1207172d78ff5cae3fbe38a62f95920ad2d..9c900c3e8ee0afb479ce76b9ba12a19a7f2c74ba 100644 (file)
@@ -850,6 +850,23 @@ class B(A)
         for expected_line in expected_lines:
             self.assertIn(expected_line, as_text)
 
+    def test__future__imports(self):
+        # __future__ features are excluded from module help,
+        # except when it's the __future__ module itself
+        import __future__
+        future_text, _ = get_pydoc_text(__future__)
+        future_html, _ = get_pydoc_html(__future__)
+        pydoc_mod_text, _ = get_pydoc_text(pydoc_mod)
+        pydoc_mod_html, _ = get_pydoc_html(pydoc_mod)
+
+        for feature in __future__.all_feature_names:
+            txt = f"{feature} = _Feature"
+            html = f"<strong>{feature}</strong> = _Feature"
+            self.assertIn(txt, future_text)
+            self.assertIn(html, future_html)
+            self.assertNotIn(txt, pydoc_mod_text)
+            self.assertNotIn(html, pydoc_mod_html)
+
 
 class PydocImportTest(PydocBaseTest):