bpo-39775: inspect: Change Signature.parameters back to OrderedDict. (GH-18684)
This commit is contained in:
parent
9f1cb1bb49
commit
2110551761
|
@ -624,18 +624,15 @@ function.
|
||||||
|
|
||||||
.. attribute:: Signature.parameters
|
.. attribute:: Signature.parameters
|
||||||
|
|
||||||
An dictionary of :class:`Parameter` objects. Parameters appear in strict
|
An ordered mapping of parameters' names to the corresponding
|
||||||
definition order, including keyword-only parameters.
|
:class:`Parameter` objects. Parameters appear in strict definition
|
||||||
|
order, including keyword-only parameters.
|
||||||
|
|
||||||
.. versionchanged:: 3.7
|
.. versionchanged:: 3.7
|
||||||
Python only explicitly guaranteed that it preserved the declaration
|
Python only explicitly guaranteed that it preserved the declaration
|
||||||
order of keyword-only parameters as of version 3.7, although in practice
|
order of keyword-only parameters as of version 3.7, although in practice
|
||||||
this order had always been preserved in Python 3.
|
this order had always been preserved in Python 3.
|
||||||
|
|
||||||
.. versionchanged:: 3.9
|
|
||||||
:attr:`parameters` is now of type :class:`dict`. Formerly, it was of
|
|
||||||
type :class:`collections.OrderedDict`.
|
|
||||||
|
|
||||||
.. attribute:: Signature.return_annotation
|
.. attribute:: Signature.return_annotation
|
||||||
|
|
||||||
The "return" annotation for the callable. If the callable has no "return"
|
The "return" annotation for the callable. If the callable has no "return"
|
||||||
|
@ -824,7 +821,7 @@ function.
|
||||||
|
|
||||||
.. attribute:: BoundArguments.arguments
|
.. attribute:: BoundArguments.arguments
|
||||||
|
|
||||||
An ordered, mutable mapping of parameters' names to arguments' values.
|
A mutable mapping of parameters' names to arguments' values.
|
||||||
Contains only explicitly bound arguments. Changes in :attr:`arguments`
|
Contains only explicitly bound arguments. Changes in :attr:`arguments`
|
||||||
will reflect in :attr:`args` and :attr:`kwargs`.
|
will reflect in :attr:`args` and :attr:`kwargs`.
|
||||||
|
|
||||||
|
|
|
@ -218,6 +218,12 @@ now raises :exc:`ImportError` instead of :exc:`ValueError` for invalid relative
|
||||||
import attempts.
|
import attempts.
|
||||||
(Contributed by Ngalim Siregar in :issue:`37444`.)
|
(Contributed by Ngalim Siregar in :issue:`37444`.)
|
||||||
|
|
||||||
|
inspect
|
||||||
|
-------
|
||||||
|
|
||||||
|
:attr:`inspect.BoundArguments.arguments` is changed from ``OrderedDict`` to regular
|
||||||
|
dict. (Contributed by Inada Naoki in :issue:`36350` and :issue:`39775`.)
|
||||||
|
|
||||||
ipaddress
|
ipaddress
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ import warnings
|
||||||
import functools
|
import functools
|
||||||
import builtins
|
import builtins
|
||||||
from operator import attrgetter
|
from operator import attrgetter
|
||||||
from collections import namedtuple
|
from collections import namedtuple, OrderedDict
|
||||||
|
|
||||||
# Create constants for the compiler flags in Include/code.h
|
# Create constants for the compiler flags in Include/code.h
|
||||||
# We try to get them from dis to avoid duplication
|
# We try to get them from dis to avoid duplication
|
||||||
|
@ -1727,7 +1727,7 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
old_params = wrapped_sig.parameters
|
old_params = wrapped_sig.parameters
|
||||||
new_params = {}
|
new_params = OrderedDict(old_params.items())
|
||||||
|
|
||||||
partial_args = partial.args or ()
|
partial_args = partial.args or ()
|
||||||
partial_keywords = partial.keywords or {}
|
partial_keywords = partial.keywords or {}
|
||||||
|
@ -1743,7 +1743,6 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
|
||||||
|
|
||||||
|
|
||||||
transform_to_kwonly = False
|
transform_to_kwonly = False
|
||||||
kwonly_params = {} # Keyword only parameters are moved to end.
|
|
||||||
for param_name, param in old_params.items():
|
for param_name, param in old_params.items():
|
||||||
try:
|
try:
|
||||||
arg_value = ba.arguments[param_name]
|
arg_value = ba.arguments[param_name]
|
||||||
|
@ -1753,6 +1752,7 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
|
||||||
if param.kind is _POSITIONAL_ONLY:
|
if param.kind is _POSITIONAL_ONLY:
|
||||||
# If positional-only parameter is bound by partial,
|
# If positional-only parameter is bound by partial,
|
||||||
# it effectively disappears from the signature
|
# it effectively disappears from the signature
|
||||||
|
new_params.pop(param_name)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if param.kind is _POSITIONAL_OR_KEYWORD:
|
if param.kind is _POSITIONAL_OR_KEYWORD:
|
||||||
|
@ -1771,26 +1771,28 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
|
||||||
# multiple values.
|
# multiple values.
|
||||||
transform_to_kwonly = True
|
transform_to_kwonly = True
|
||||||
# Set the new default value
|
# Set the new default value
|
||||||
param = param.replace(default=arg_value)
|
new_params[param_name] = param.replace(default=arg_value)
|
||||||
else:
|
else:
|
||||||
# was passed as a positional argument
|
# was passed as a positional argument
|
||||||
|
new_params.pop(param.name)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if param.kind is _KEYWORD_ONLY:
|
if param.kind is _KEYWORD_ONLY:
|
||||||
# Set the new default value
|
# Set the new default value
|
||||||
param = param.replace(default=arg_value)
|
new_params[param_name] = param.replace(default=arg_value)
|
||||||
|
|
||||||
if transform_to_kwonly:
|
if transform_to_kwonly:
|
||||||
assert param.kind is not _POSITIONAL_ONLY
|
assert param.kind is not _POSITIONAL_ONLY
|
||||||
|
|
||||||
if param.kind is _POSITIONAL_OR_KEYWORD:
|
if param.kind is _POSITIONAL_OR_KEYWORD:
|
||||||
kwonly_params[param_name] = param.replace(kind=_KEYWORD_ONLY)
|
new_param = new_params[param_name].replace(kind=_KEYWORD_ONLY)
|
||||||
|
new_params[param_name] = new_param
|
||||||
|
new_params.move_to_end(param_name)
|
||||||
elif param.kind in (_KEYWORD_ONLY, _VAR_KEYWORD):
|
elif param.kind in (_KEYWORD_ONLY, _VAR_KEYWORD):
|
||||||
kwonly_params[param_name] = param
|
new_params.move_to_end(param_name)
|
||||||
else:
|
elif param.kind is _VAR_POSITIONAL:
|
||||||
new_params[param_name] = param
|
new_params.pop(param.name)
|
||||||
|
|
||||||
new_params.update(kwonly_params)
|
|
||||||
return wrapped_sig.replace(parameters=new_params.values())
|
return wrapped_sig.replace(parameters=new_params.values())
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Change ``inspect.Signature.parameters`` back to ``collections.OrderedDict``.
|
||||||
|
This was changed to ``dict`` in Python 3.9.0a4.
|
Loading…
Reference in New Issue