mirror of
https://github.com/python/cpython.git
synced 2025-08-01 15:43:13 +00:00
[3.10] bpo-40296: Fix supporting generic aliases in pydoc (GH-30253). (GH-31976)
(cherry picked from commit cd44afc573
)
This commit is contained in:
parent
6fd9737373
commit
a5b7678a67
4 changed files with 92 additions and 10 deletions
|
@ -95,6 +95,11 @@ CLASSES
|
|||
| say_no(self)
|
||||
|\x20\x20
|
||||
| ----------------------------------------------------------------------
|
||||
| Class methods defined here:
|
||||
|\x20\x20
|
||||
| __class_getitem__(item) from builtins.type
|
||||
|\x20\x20
|
||||
| ----------------------------------------------------------------------
|
||||
| Data descriptors defined here:
|
||||
|\x20\x20
|
||||
| __dict__
|
||||
|
@ -114,6 +119,11 @@ FUNCTIONS
|
|||
|
||||
DATA
|
||||
__xyz__ = 'X, Y and Z'
|
||||
c_alias = test.pydoc_mod.C[int]
|
||||
list_alias1 = typing.List[int]
|
||||
list_alias2 = list[int]
|
||||
type_union1 = typing.Union[int, str]
|
||||
type_union2 = int | str
|
||||
|
||||
VERSION
|
||||
1.2.3.4
|
||||
|
@ -141,6 +151,15 @@ expected_html_pattern = """
|
|||
<p><tt>This is a test module for test_pydoc</tt></p>
|
||||
<p>
|
||||
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
||||
<tr bgcolor="#aa55cc">
|
||||
<td colspan=3 valign=bottom> <br>
|
||||
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
|
||||
\x20\x20\x20\x20
|
||||
<tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td>
|
||||
<td width="100%%"><table width="100%%" summary="list"><tr><td width="25%%" valign=top><a href="types.html">types</a><br>
|
||||
</td><td width="25%%" valign=top><a href="typing.html">typing</a><br>
|
||||
</td><td width="25%%" valign=top></td><td width="25%%" valign=top></td></tr></table></td></tr></table><p>
|
||||
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
||||
<tr bgcolor="#ee77aa">
|
||||
<td colspan=3 valign=bottom> <br>
|
||||
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
|
||||
|
@ -210,6 +229,10 @@ Data and other attributes defined here:<br>
|
|||
|
||||
<dl><dt><a name="C-say_no"><strong>say_no</strong></a>(self)</dt></dl>
|
||||
|
||||
<hr>
|
||||
Class methods defined here:<br>
|
||||
<dl><dt><a name="C-__class_getitem__"><strong>__class_getitem__</strong></a>(item)<font color="#909090"><font face="helvetica, arial"> from <a href="builtins.html#type">builtins.type</a></font></font></dt></dl>
|
||||
|
||||
<hr>
|
||||
Data descriptors defined here:<br>
|
||||
<dl><dt><strong>__dict__</strong></dt>
|
||||
|
@ -237,7 +260,12 @@ war</tt></dd></dl>
|
|||
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
|
||||
\x20\x20\x20\x20
|
||||
<tr><td bgcolor="#55aa55"><tt> </tt></td><td> </td>
|
||||
<td width="100%%"><strong>__xyz__</strong> = 'X, Y and Z'</td></tr></table><p>
|
||||
<td width="100%%"><strong>__xyz__</strong> = 'X, Y and Z'<br>
|
||||
<strong>c_alias</strong> = test.pydoc_mod.C[int]<br>
|
||||
<strong>list_alias1</strong> = typing.List[int]<br>
|
||||
<strong>list_alias2</strong> = list[int]<br>
|
||||
<strong>type_union1</strong> = typing.Union[int, str]<br>
|
||||
<strong>type_union2</strong> = int | str</td></tr></table><p>
|
||||
<table width="100%%" cellspacing=0 cellpadding=2 border=0 summary="section">
|
||||
<tr bgcolor="#7799ee">
|
||||
<td colspan=3 valign=bottom> <br>
|
||||
|
@ -1048,6 +1076,43 @@ class TestDescriptions(unittest.TestCase):
|
|||
expected = 'C in module %s object' % __name__
|
||||
self.assertIn(expected, pydoc.render_doc(c))
|
||||
|
||||
def test_generic_alias(self):
|
||||
self.assertEqual(pydoc.describe(typing.List[int]), '_GenericAlias')
|
||||
doc = pydoc.render_doc(typing.List[int], renderer=pydoc.plaintext)
|
||||
self.assertIn('_GenericAlias in module typing', doc)
|
||||
self.assertIn('List = class list(object)', doc)
|
||||
self.assertIn(list.__doc__.strip().splitlines()[0], doc)
|
||||
|
||||
self.assertEqual(pydoc.describe(list[int]), 'GenericAlias')
|
||||
doc = pydoc.render_doc(list[int], renderer=pydoc.plaintext)
|
||||
self.assertIn('GenericAlias in module builtins', doc)
|
||||
self.assertIn('\nclass list(object)', doc)
|
||||
self.assertIn(list.__doc__.strip().splitlines()[0], doc)
|
||||
|
||||
def test_union_type(self):
|
||||
self.assertEqual(pydoc.describe(typing.Union[int, str]), '_UnionGenericAlias')
|
||||
doc = pydoc.render_doc(typing.Union[int, str], renderer=pydoc.plaintext)
|
||||
self.assertIn('_UnionGenericAlias in module typing', doc)
|
||||
self.assertIn('Union = typing.Union', doc)
|
||||
if typing.Union.__doc__:
|
||||
self.assertIn(typing.Union.__doc__.strip().splitlines()[0], doc)
|
||||
|
||||
self.assertEqual(pydoc.describe(int | str), 'UnionType')
|
||||
doc = pydoc.render_doc(int | str, renderer=pydoc.plaintext)
|
||||
self.assertIn('UnionType in module types object', doc)
|
||||
self.assertIn('\nclass UnionType(builtins.object)', doc)
|
||||
self.assertIn(types.UnionType.__doc__.strip().splitlines()[0], doc)
|
||||
|
||||
def test_special_form(self):
|
||||
self.assertEqual(pydoc.describe(typing.Any), '_SpecialForm')
|
||||
doc = pydoc.render_doc(typing.Any, renderer=pydoc.plaintext)
|
||||
self.assertIn('_SpecialForm in module typing', doc)
|
||||
if typing.Any.__doc__:
|
||||
self.assertIn('Any = typing.Any', doc)
|
||||
self.assertIn(typing.Any.__doc__.strip().splitlines()[0], doc)
|
||||
else:
|
||||
self.assertIn('Any = class _SpecialForm(_Final)', doc)
|
||||
|
||||
def test_typing_pydoc(self):
|
||||
def foo(data: typing.List[typing.Any],
|
||||
x: int) -> typing.Iterator[typing.Tuple[int, typing.Any]]:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue