Skip to content

Commit 8b0c113

Browse files
committed
Merge branch '3.12' of https://github.com/python/cpython into 3.12
2 parents ab1a9a2 + 0d207c3 commit 8b0c113

File tree

5 files changed

+52
-30
lines changed

5 files changed

+52
-30
lines changed

Lib/pydoc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def parentname(object, modname):
210210
if necessary) or module."""
211211
if '.' in object.__qualname__:
212212
name = object.__qualname__.rpartition('.')[0]
213-
if object.__module__ != modname:
213+
if object.__module__ != modname and object.__module__ is not None:
214214
return object.__module__ + '.' + name
215215
else:
216216
return name

Lib/test/test_glob.py

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -167,46 +167,53 @@ def test_glob_directory_names(self):
167167
self.norm('aab', 'F')])
168168

169169
def test_glob_directory_with_trailing_slash(self):
170-
# Patterns ending with a slash shouldn't match non-dirs
171-
res = glob.glob(self.norm('Z*Z') + os.sep)
172-
self.assertEqual(res, [])
173-
res = glob.glob(self.norm('ZZZ') + os.sep)
174-
self.assertEqual(res, [])
175-
# When there is a wildcard pattern which ends with os.sep, glob()
176-
# doesn't blow up.
177-
res = glob.glob(self.norm('aa*') + os.sep)
178-
self.assertEqual(len(res), 2)
179-
# either of these results is reasonable
180-
self.assertIn(set(res), [
181-
{self.norm('aaa'), self.norm('aab')},
182-
{self.norm('aaa') + os.sep, self.norm('aab') + os.sep},
183-
])
170+
seps = (os.sep, os.altsep) if os.altsep else (os.sep,)
171+
for sep in seps:
172+
# Patterns ending with a slash shouldn't match non-dirs
173+
self.assertEqual(glob.glob(self.norm('Z*Z') + sep), [])
174+
self.assertEqual(glob.glob(self.norm('ZZZ') + sep), [])
175+
self.assertEqual(glob.glob(self.norm('aaa') + sep),
176+
[self.norm('aaa') + sep])
177+
# Preserving the redundant separators is an implementation detail.
178+
self.assertEqual(glob.glob(self.norm('aaa') + sep*2),
179+
[self.norm('aaa') + sep*2])
180+
# When there is a wildcard pattern which ends with a pathname
181+
# separator, glob() doesn't blow.
182+
# The result should end with the pathname separator.
183+
# Normalizing the trailing separator is an implementation detail.
184+
eq = self.assertSequencesEqual_noorder
185+
eq(glob.glob(self.norm('aa*') + sep),
186+
[self.norm('aaa') + os.sep, self.norm('aab') + os.sep])
187+
# Stripping the redundant separators is an implementation detail.
188+
eq(glob.glob(self.norm('aa*') + sep*2),
189+
[self.norm('aaa') + os.sep, self.norm('aab') + os.sep])
184190

185191
def test_glob_bytes_directory_with_trailing_slash(self):
186192
# Same as test_glob_directory_with_trailing_slash, but with a
187193
# bytes argument.
188-
res = glob.glob(os.fsencode(self.norm('Z*Z') + os.sep))
189-
self.assertEqual(res, [])
190-
res = glob.glob(os.fsencode(self.norm('ZZZ') + os.sep))
191-
self.assertEqual(res, [])
192-
res = glob.glob(os.fsencode(self.norm('aa*') + os.sep))
193-
self.assertEqual(len(res), 2)
194-
# either of these results is reasonable
195-
self.assertIn(set(res), [
196-
{os.fsencode(self.norm('aaa')),
197-
os.fsencode(self.norm('aab'))},
198-
{os.fsencode(self.norm('aaa') + os.sep),
199-
os.fsencode(self.norm('aab') + os.sep)},
200-
])
194+
seps = (os.sep, os.altsep) if os.altsep else (os.sep,)
195+
for sep in seps:
196+
self.assertEqual(glob.glob(os.fsencode(self.norm('Z*Z') + sep)), [])
197+
self.assertEqual(glob.glob(os.fsencode(self.norm('ZZZ') + sep)), [])
198+
self.assertEqual(glob.glob(os.fsencode(self.norm('aaa') + sep)),
199+
[os.fsencode(self.norm('aaa') + sep)])
200+
self.assertEqual(glob.glob(os.fsencode(self.norm('aaa') + sep*2)),
201+
[os.fsencode(self.norm('aaa') + sep*2)])
202+
eq = self.assertSequencesEqual_noorder
203+
eq(glob.glob(os.fsencode(self.norm('aa*') + sep)),
204+
[os.fsencode(self.norm('aaa') + os.sep),
205+
os.fsencode(self.norm('aab') + os.sep)])
206+
eq(glob.glob(os.fsencode(self.norm('aa*') + sep*2)),
207+
[os.fsencode(self.norm('aaa') + os.sep),
208+
os.fsencode(self.norm('aab') + os.sep)])
201209

202210
@skip_unless_symlink
203211
def test_glob_symlinks(self):
204212
eq = self.assertSequencesEqual_noorder
205213
eq(self.glob('sym3'), [self.norm('sym3')])
206214
eq(self.glob('sym3', '*'), [self.norm('sym3', 'EF'),
207215
self.norm('sym3', 'efg')])
208-
self.assertIn(self.glob('sym3' + os.sep),
209-
[[self.norm('sym3')], [self.norm('sym3') + os.sep]])
216+
eq(self.glob('sym3' + os.sep), [self.norm('sym3') + os.sep])
210217
eq(self.glob('*', '*F'),
211218
[self.norm('aaa', 'zzzF'),
212219
self.norm('aab', 'F'), self.norm('sym3', 'EF')])

Lib/test/test_pydoc/module_none.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
def func():
2+
pass
3+
func.__module__ = None
4+
5+
class A:
6+
def method(self):
7+
pass
8+
method.__module__ = None

Lib/test/test_pydoc/test_pydoc.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,6 +1592,11 @@ def a_fn_with_https_link():
15921592
html
15931593
)
15941594

1595+
def test_module_none(self):
1596+
# Issue #128772
1597+
from test.test_pydoc import module_none
1598+
pydoc.render_doc(module_none)
1599+
15951600

15961601
class PydocFodderTest(unittest.TestCase):
15971602
def tearDown(self):
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix :mod:`pydoc` for methods with the ``__module__`` attribute equal to
2+
``None``.

0 commit comments

Comments
 (0)