From 63f32fae79e16e6dc71777bd3fcb623b2c3ff742 Mon Sep 17 00:00:00 2001 From: Irit Katriel <1055913+iritkatriel@users.noreply.github.com> Date: Tue, 29 Mar 2022 23:07:15 +0100 Subject: bpo-26120: do not exclude __future__ import in pydoc of the __future__ module itself (GH-32180) --- Lib/pydoc.py | 2 +- Lib/test/test_pydoc.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 7ae3908..18b476e 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -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: diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index e2dab12..9c900c3 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -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"{feature} = _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): -- cgit v0.12