summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Reidel <jens@troet.org>2020-03-18 02:22:46 (GMT)
committerGitHub <noreply@github.com>2020-03-18 02:22:46 (GMT)
commit611836a69a7a98bb106b4d315ed76a1e17266f4f (patch)
tree6278f684b11a7417b34a4335552dfd6ff1c0ccfe
parent29356e03d4f8800b04f799efe7a10e3ce8b16f61 (diff)
downloadcpython-611836a69a7a98bb106b4d315ed76a1e17266f4f.zip
cpython-611836a69a7a98bb106b4d315ed76a1e17266f4f.tar.gz
cpython-611836a69a7a98bb106b4d315ed76a1e17266f4f.tar.bz2
bpo-39957: Change Signature.parameters to OrderedDict (GH-18988)
-rw-r--r--Lib/inspect.py8
-rw-r--r--Lib/test/test_inspect.py7
2 files changed, 10 insertions, 5 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 125bd45..90435a1 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -2733,7 +2733,7 @@ class Signature:
A Signature object has the following public attributes and methods:
- * parameters : dict
+ * parameters : OrderedDict
An ordered mapping of parameters' names to the corresponding
Parameter objects (keyword-only arguments are in the same order
as listed in `code.co_varnames`).
@@ -2763,10 +2763,10 @@ class Signature:
"""
if parameters is None:
- params = {}
+ params = OrderedDict()
else:
if __validate_parameters__:
- params = {}
+ params = OrderedDict()
top_kind = _POSITIONAL_ONLY
kind_defaults = False
@@ -2805,7 +2805,7 @@ class Signature:
params[name] = param
else:
- params = {param.name: param for param in parameters}
+ params = OrderedDict((param.name, param) for param in parameters)
self._parameters = types.MappingProxyType(params)
self._return_annotation = return_annotation
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 8a2efc8..f193807 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -2077,7 +2077,7 @@ class TestSignatureObject(unittest.TestCase):
P = inspect.Parameter
self.assertEqual(str(S()), '()')
- self.assertEqual(repr(S().parameters), 'mappingproxy({})')
+ self.assertEqual(repr(S().parameters), 'mappingproxy(OrderedDict())')
def test(po, pk, pod=42, pkd=100, *args, ko, **kwargs):
pass
@@ -3181,6 +3181,11 @@ class TestSignatureObject(unittest.TestCase):
l = list(signature.parameters)
self.assertEqual(l, unsorted_keyword_only_parameters)
+ def test_signater_parameters_is_ordered(self):
+ p1 = inspect.signature(lambda x, y: None).parameters
+ p2 = inspect.signature(lambda y, x: None).parameters
+ self.assertNotEqual(p1, p2)
+
class TestParameterObject(unittest.TestCase):
def test_signature_parameter_kinds(self):