From 4aa3006619392438b0775a2f488bbe9e7a22c468 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Fri, 8 Jun 2018 12:46:31 +0900 Subject: bpo-33197: Add description property for _ParameterKind. (GH-7206) --- Doc/library/inspect.rst | 17 +++++++++++++++++ Lib/inspect.py | 13 +++++++------ .../Library/2018-05-30-00-26-05.bpo-33197.XkE2kL.rst | 1 + 3 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2018-05-30-00-26-05.bpo-33197.XkE2kL.rst diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index 7db6ca6..37736ef 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -752,6 +752,23 @@ function. ... print('Parameter:', param) Parameter: c + .. attribute:: Parameter.kind.description + + Describes a enum value of Parameter.kind. + + Example: print all descriptions of arguments:: + + >>> def foo(a, b, *, c, d=10): + ... pass + + >>> sig = signature(foo) + >>> for param in sig.parameters.values(): + ... print(param.kind.description) + positional or keyword + positional or keyword + keyword-only + keyword-only + .. method:: Parameter.replace(*[, name][, kind][, default][, annotation]) Create a new Parameter instance based on the instance replaced was invoked diff --git a/Lib/inspect.py b/Lib/inspect.py index 409c058..8dad817 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -2395,6 +2395,9 @@ class _ParameterKind(enum.IntEnum): def __str__(self): return self._name_ + @property + def description(self): + return _PARAM_NAME_MAPPING[self] _POSITIONAL_ONLY = _ParameterKind.POSITIONAL_ONLY _POSITIONAL_OR_KEYWORD = _ParameterKind.POSITIONAL_OR_KEYWORD @@ -2410,8 +2413,6 @@ _PARAM_NAME_MAPPING = { _VAR_KEYWORD: 'variadic keyword' } -_get_paramkind_descr = _PARAM_NAME_MAPPING.__getitem__ - class Parameter: """Represents a parameter in a function signature. @@ -2453,7 +2454,7 @@ class Parameter: if default is not _empty: if self._kind in (_VAR_POSITIONAL, _VAR_KEYWORD): msg = '{} parameters cannot have default values' - msg = msg.format(_get_paramkind_descr(self._kind)) + msg = msg.format(self._kind.description) raise ValueError(msg) self._default = default self._annotation = annotation @@ -2475,7 +2476,7 @@ class Parameter: 'implicit arguments must be passed as ' 'positional or keyword arguments, not {}' ) - msg = msg.format(_get_paramkind_descr(self._kind)) + msg = msg.format(self._kind.description) raise ValueError(msg) self._kind = _POSITIONAL_ONLY name = 'implicit{}'.format(name[1:]) @@ -2751,8 +2752,8 @@ class Signature: 'wrong parameter order: {} parameter before {} ' 'parameter' ) - msg = msg.format(_get_paramkind_descr(top_kind), - _get_paramkind_descr(kind)) + msg = msg.format(top_kind.description, + kind.description) raise ValueError(msg) elif kind > top_kind: kind_defaults = False diff --git a/Misc/NEWS.d/next/Library/2018-05-30-00-26-05.bpo-33197.XkE2kL.rst b/Misc/NEWS.d/next/Library/2018-05-30-00-26-05.bpo-33197.XkE2kL.rst new file mode 100644 index 0000000..e6f7ac3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-05-30-00-26-05.bpo-33197.XkE2kL.rst @@ -0,0 +1 @@ +Add description property for _ParameterKind -- cgit v0.12