]> granicus.if.org Git - python/commitdiff
bpo-33197: Add description property for _ParameterKind. (GH-7206)
authorDong-hee Na <donghee.na92@gmail.com>
Fri, 8 Jun 2018 03:46:31 +0000 (12:46 +0900)
committerYury Selivanov <yury@magic.io>
Fri, 8 Jun 2018 03:46:31 +0000 (23:46 -0400)
Doc/library/inspect.rst
Lib/inspect.py
Misc/NEWS.d/next/Library/2018-05-30-00-26-05.bpo-33197.XkE2kL.rst [new file with mode: 0644]

index 7db6ca68b23ca095f9afdecdc2e126170bc04ba1..37736ef17948928c136d8d48790b49f64a16060c 100644 (file)
@@ -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
index 409c05880de0c7a2149bf3aec86c2b0b9d9efa65..8dad817b292d0aa8161e71104ff3e7aee65edb5b 100644 (file)
@@ -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 (file)
index 0000000..e6f7ac3
--- /dev/null
@@ -0,0 +1 @@
+Add description property for _ParameterKind