gh-100039: enhance __signature__ to work with str and callables (GH-100168)

Callables should be either class- or static-methods.
Enum now uses the classmethod version to greatly improve the help
given for enums and flags.
This commit is contained in:
Ethan Furman 2022-12-16 12:30:47 -08:00 committed by GitHub
parent 5234e1cbea
commit a5a7cea202
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 73 additions and 4 deletions

View file

@ -4259,7 +4259,7 @@ expected_help_output_with_docs = """\
Help on class Color in module %s:
class Color(enum.Enum)
| Color(value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None)
| Color(*values)
|
| Method resolution order:
| Color
@ -4315,7 +4315,7 @@ expected_help_output_without_docs = """\
Help on class Color in module %s:
class Color(enum.Enum)
| Color(value, names=None, *values, module=None, qualname=None, type=None, start=1)
| Color(*values)
|
| Method resolution order:
| Color
@ -4462,6 +4462,27 @@ class TestStdLib(unittest.TestCase):
if failed:
self.fail("result does not equal expected, see print above")
def test_inspect_signatures(self):
from inspect import signature, Signature, Parameter
self.assertEqual(
signature(Enum),
Signature([
Parameter('new_class_name', Parameter.POSITIONAL_ONLY),
Parameter('names', Parameter.POSITIONAL_OR_KEYWORD),
Parameter('module', Parameter.KEYWORD_ONLY, default=None),
Parameter('qualname', Parameter.KEYWORD_ONLY, default=None),
Parameter('type', Parameter.KEYWORD_ONLY, default=None),
Parameter('start', Parameter.KEYWORD_ONLY, default=1),
Parameter('boundary', Parameter.KEYWORD_ONLY, default=None),
]),
)
self.assertEqual(
signature(enum.FlagBoundary),
Signature([
Parameter('values', Parameter.VAR_POSITIONAL),
]),
)
def test_test_simple_enum(self):
@_simple_enum(Enum)
class SimpleColor: