Skip to content

Commit d17c6ca

Browse files
Benedikt's review
1 parent 59e97cb commit d17c6ca

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

Lib/pydoc.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -576,26 +576,28 @@ def getdocloc(self, object, basedir=sysconfig.get_path('stdlib')):
576576
docloc = None
577577
return docloc
578578

579-
def get_version(self, object):
579+
def _get_version(self, object):
580580
if self._is_stdlib_module(object):
581581
with warnings.catch_warnings():
582582
warnings.simplefilter("ignore", DeprecationWarning)
583583
if hasattr(object, '__version__'):
584584
return str(object.__version__)
585-
else:
586-
return None
587585
else:
588586
if hasattr(object, '__version__'):
589587
return str(object.__version__)
590-
else:
591-
return None
588+
return None
592589

593590
def _is_stdlib_module(self, object, basedir=sysconfig.get_path('stdlib')):
594591
try:
595592
file = inspect.getabsfile(object)
596593
except TypeError:
597594
file = '(built-in)'
598595

596+
if sysconfig.is_python_build():
597+
srcdir = sysconfig.get_config_var('srcdir')
598+
if srcdir:
599+
basedir = os.path.join(srcdir, 'Lib')
600+
599601
basedir = os.path.normcase(basedir)
600602
return (isinstance(object, type(os)) and
601603
(object.__name__ in ('errno', 'exceptions', 'gc',
@@ -864,7 +866,7 @@ def docmodule(self, object, name=None, mod=None, *ignored):
864866
filelink = '(built-in)'
865867
info = []
866868

867-
if (version := self.get_version(object)) is not None:
869+
if version := self._get_version(object):
868870
if version[:11] == '$' + 'Revision: ' and version[-1:] == '$':
869871
version = version[11:-1].strip()
870872
info.append('version %s' % self.escape(version))
@@ -1399,7 +1401,7 @@ def docmodule(self, object, name=None, mod=None, *ignored):
13991401
contents.append(self.docother(value, key, name, maxlen=70))
14001402
result = result + self.section('DATA', '\n'.join(contents))
14011403

1402-
if (version := self.get_version(object)) is not None:
1404+
if version := self._get_version(object):
14031405
if version[:11] == '$' + 'Revision: ' and version[-1:] == '$':
14041406
version = version[11:-1].strip()
14051407
result = result + self.section('VERSION', version)

Lib/test/test_pydoc/test_pydoc.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2305,6 +2305,33 @@ def test_sys_path_adjustment_when_curdir_already_included(self):
23052305
trailing_argv0dir = trailing_curdir + [self.argv0dir]
23062306
self.assertIsNone(self._get_revised_path(trailing_argv0dir))
23072307

2308+
def test__get_version(self):
2309+
import warnings
2310+
import json
2311+
2312+
class Module:
2313+
__name__ = 'fauxmod'
2314+
2315+
def __getattr__(self, name):
2316+
if name == "__version__":
2317+
from warnings import _deprecated
2318+
_deprecated("__version__", remove=(3, 20))
2319+
return "1"
2320+
2321+
module = Module()
2322+
doc = pydoc.Doc()
2323+
with warnings.catch_warnings(record=True) as w:
2324+
warnings.simplefilter("always")
2325+
version = doc._get_version(json)
2326+
self.assertEqual(version, "2.0.9")
2327+
self.assertEqual(len(w), 0)
2328+
2329+
with warnings.catch_warnings(record=True) as w:
2330+
warnings.simplefilter("always")
2331+
version = doc._get_version(module)
2332+
self.assertEqual(version, "1")
2333+
self.assertEqual(len(w), 2)
2334+
23082335

23092336
def setUpModule():
23102337
thread_info = threading_helper.threading_setup()

0 commit comments

Comments
 (0)