Skip to content

Commit

Permalink
bpo-39957: Change Signature.parameters to OrderedDict (GH-18988)
Browse files Browse the repository at this point in the history
  • Loading branch information
Gelbpunkt authored Mar 18, 2020
1 parent 29356e0 commit 611836a
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
8 changes: 4 additions & 4 deletions Lib/inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -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`).
Expand Down Expand Up @@ -2763,10 +2763,10 @@ def __init__(self, parameters=None, *, return_annotation=_empty,
"""

if parameters is None:
params = {}
params = OrderedDict()
else:
if __validate_parameters__:
params = {}
params = OrderedDict()
top_kind = _POSITIONAL_ONLY
kind_defaults = False

Expand Down Expand Up @@ -2805,7 +2805,7 @@ def __init__(self, parameters=None, *, return_annotation=_empty,

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
Expand Down
7 changes: 6 additions & 1 deletion Lib/test/test_inspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -2077,7 +2077,7 @@ def test_signature_object(self):
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
Expand Down Expand Up @@ -3181,6 +3181,11 @@ def test_signature_definition_order_preserved_on_kwonly(self):
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):
Expand Down

0 comments on commit 611836a

Please sign in to comment.