bpo-36751: Deprecate getfullargspec and report positional-only args a… · python/cpython@d5d2b45
@@ -766,28 +766,29 @@ def assertFullArgSpecEquals(self, routine, args_e, varargs_e=None,
766766posonlyargs_e=[], kwonlyargs_e=[],
767767kwonlydefaults_e=None,
768768ann_e={}, formatted=None):
769-args, varargs, varkw, defaults, posonlyargs, kwonlyargs, kwonlydefaults, ann = \
770-inspect.getfullargspec(routine)
769+with self.assertWarns(DeprecationWarning):
770+args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, ann = \
771+inspect.getfullargspec(routine)
771772self.assertEqual(args, args_e)
772773self.assertEqual(varargs, varargs_e)
773774self.assertEqual(varkw, varkw_e)
774775self.assertEqual(defaults, defaults_e)
775-self.assertEqual(posonlyargs, posonlyargs_e)
776776self.assertEqual(kwonlyargs, kwonlyargs_e)
777777self.assertEqual(kwonlydefaults, kwonlydefaults_e)
778778self.assertEqual(ann, ann_e)
779779if formatted is not None:
780780with self.assertWarns(DeprecationWarning):
781781self.assertEqual(inspect.formatargspec(args, varargs, varkw, defaults,
782-posonlyargs, kwonlyargs,
783-kwonlydefaults, ann),
782+kwonlyargs, kwonlydefaults, ann),
784783formatted)
785784786785def test_getargspec(self):
787786self.assertArgSpecEquals(mod.eggs, ['x', 'y'], formatted='(x, y)')
788787789-self.assertRaises(ValueError, self.assertArgSpecEquals,
790-mod.spam, [])
788+self.assertArgSpecEquals(mod.spam,
789+ ['a', 'b', 'c', 'd', 'e', 'f'],
790+'g', 'h', (3, 4, 5),
791+'(a, b, c, d=3, e=4, f=5, *g, **h)')
791792792793self.assertRaises(ValueError, self.assertArgSpecEquals,
793794mod2.keyworded, [])
@@ -811,25 +812,22 @@ def test_getfullargspec(self):
811812kwonlyargs_e=['arg'],
812813formatted='(*, arg)')
813814814-self.assertFullArgSpecEquals(mod2.all_markers, ['c', 'd'],
815-posonlyargs_e=['a', 'b'],
815+self.assertFullArgSpecEquals(mod2.all_markers, ['a', 'b', 'c', 'd'],
816816kwonlyargs_e=['e', 'f'],
817-formatted='(a, b, /, c, d, *, e, f)')
817+formatted='(a, b, c, d, *, e, f)')
818818819819self.assertFullArgSpecEquals(mod2.all_markers_with_args_and_kwargs,
820- ['c', 'd'],
821-posonlyargs_e=['a', 'b'],
820+ ['a', 'b', 'c', 'd'],
822821varargs_e='args',
823822varkw_e='kwargs',
824823kwonlyargs_e=['e', 'f'],
825-formatted='(a, b, /, c, d, *args, e, f, **kwargs)')
824+formatted='(a, b, c, d, *args, e, f, **kwargs)')
826825827-self.assertFullArgSpecEquals(mod2.all_markers_with_defaults, ['c', 'd'],
826+self.assertFullArgSpecEquals(mod2.all_markers_with_defaults, ['a', 'b', 'c', 'd'],
828827defaults_e=(1,2,3),
829-posonlyargs_e=['a', 'b'],
830828kwonlyargs_e=['e', 'f'],
831829kwonlydefaults_e={'e': 4, 'f': 5},
832-formatted='(a, b=1, /, c=2, d=3, *, e=4, f=5)')
830+formatted='(a, b=1, c=2, d=3, *, e=4, f=5)')
833831834832def test_argspec_api_ignores_wrapped(self):
835833# Issue 20684: low level introspection API must ignore __wrapped__
@@ -877,25 +875,27 @@ def test():
877875spam_param = inspect.Parameter('spam', inspect.Parameter.POSITIONAL_ONLY)
878876test.__signature__ = inspect.Signature(parameters=(spam_param,))
879877880-self.assertFullArgSpecEquals(test, [], posonlyargs_e=['spam'], formatted='(spam, /)')
878+self.assertFullArgSpecEquals(test, ['spam'], formatted='(spam)')
881879882880def test_getfullargspec_signature_annos(self):
883881def test(a:'spam') -> 'ham': pass
884-spec = inspect.getfullargspec(test)
882+with self.assertWarns(DeprecationWarning):
883+spec = inspect.getfullargspec(test)
885884self.assertEqual(test.__annotations__, spec.annotations)
886885887886def test(): pass
888-spec = inspect.getfullargspec(test)
887+with self.assertWarns(DeprecationWarning):
888+spec = inspect.getfullargspec(test)
889889self.assertEqual(test.__annotations__, spec.annotations)
890890891891@unittest.skipIf(MISSING_C_DOCSTRINGS,
892892 "Signature information for builtins requires docstrings")
893893def test_getfullargspec_builtin_methods(self):
894-self.assertFullArgSpecEquals(_pickle.Pickler.dump, [],
895-posonlyargs_e=['self', 'obj'], formatted='(self, obj, /)')
894+self.assertFullArgSpecEquals(_pickle.Pickler.dump, ['self', 'obj'],
895+formatted='(self, obj)')
896896897-self.assertFullArgSpecEquals(_pickle.Pickler(io.BytesIO()).dump, [],
898-posonlyargs_e=['self', 'obj'], formatted='(self, obj, /)')
897+self.assertFullArgSpecEquals(_pickle.Pickler(io.BytesIO()).dump, ['self', 'obj'],
898+formatted='(self, obj)')
899899900900self.assertFullArgSpecEquals(
901901os.stat,
@@ -910,7 +910,8 @@ def test_getfullargspec_builtin_methods(self):
910910def test_getfullargspec_builtin_func(self):
911911import _testcapi
912912builtin = _testcapi.docstring_with_signature_with_defaults
913-spec = inspect.getfullargspec(builtin)
913+with self.assertWarns(DeprecationWarning):
914+spec = inspect.getfullargspec(builtin)
914915self.assertEqual(spec.defaults[0], 'avocado')
915916916917@cpython_only
@@ -919,17 +920,20 @@ def test_getfullargspec_builtin_func(self):
919920def test_getfullargspec_builtin_func_no_signature(self):
920921import _testcapi
921922builtin = _testcapi.docstring_no_signature
922-with self.assertRaises(TypeError):
923-inspect.getfullargspec(builtin)
923+with self.assertWarns(DeprecationWarning):
924+with self.assertRaises(TypeError):
925+inspect.getfullargspec(builtin)
924926925927def test_getfullargspec_definition_order_preserved_on_kwonly(self):
926928for fn in signatures_with_lexicographic_keyword_only_parameters():
927-signature = inspect.getfullargspec(fn)
929+with self.assertWarns(DeprecationWarning):
930+signature = inspect.getfullargspec(fn)
928931l = list(signature.kwonlyargs)
929932sorted_l = sorted(l)
930933self.assertTrue(l)
931934self.assertEqual(l, sorted_l)
932-signature = inspect.getfullargspec(unsorted_keyword_only_parameters_fn)
935+with self.assertWarns(DeprecationWarning):
936+signature = inspect.getfullargspec(unsorted_keyword_only_parameters_fn)
933937l = list(signature.kwonlyargs)
934938self.assertEqual(l, unsorted_keyword_only_parameters)
935939@@ -1386,8 +1390,9 @@ class TestGetcallargsFunctions(unittest.TestCase):
13861390def assertEqualCallArgs(self, func, call_params_string, locs=None):
13871391locs = dict(locs or {}, func=func)
13881392r1 = eval('func(%s)' % call_params_string, None, locs)
1389-r2 = eval('inspect.getcallargs(func, %s)' % call_params_string, None,
1390-locs)
1393+with self.assertWarns(DeprecationWarning):
1394+r2 = eval('inspect.getcallargs(func, %s)' % call_params_string, None,
1395+locs)
13911396self.assertEqual(r1, r2)
1392139713931398def assertEqualException(self, func, call_param_string, locs=None):
@@ -1399,8 +1404,9 @@ def assertEqualException(self, func, call_param_string, locs=None):
13991404else:
14001405self.fail('Exception not raised')
14011406try:
1402-eval('inspect.getcallargs(func, %s)' % call_param_string, None,
1403-locs)
1407+with self.assertWarns(DeprecationWarning):
1408+eval('inspect.getcallargs(func, %s)' % call_param_string, None,
1409+locs)
14041410except Exception as e:
14051411ex2 = e
14061412else:
@@ -1558,14 +1564,16 @@ def test_errors(self):
15581564def f5(*, a): pass
15591565with self.assertRaisesRegex(TypeError,
15601566'missing 1 required keyword-only'):
1561-inspect.getcallargs(f5)
1567+with self.assertWarns(DeprecationWarning):
1568+inspect.getcallargs(f5)
156215691563157015641571# issue20817:
15651572def f6(a, b, c):
15661573pass
15671574with self.assertRaisesRegex(TypeError, "'a', 'b' and 'c'"):
1568-inspect.getcallargs(f6)
1575+with self.assertWarns(DeprecationWarning):
1576+inspect.getcallargs(f6)
1569157715701578# bpo-33197
15711579with self.assertRaisesRegex(ValueError,