diff --git a/googleapiclient/_helpers.py b/googleapiclient/_helpers.py index c63d08448e..17d8bbc1a1 100644 --- a/googleapiclient/_helpers.py +++ b/googleapiclient/_helpers.py @@ -135,7 +135,7 @@ def positional_wrapper(*args, **kwargs): return positional_decorator else: args, _, _, defaults, _, _, _ = inspect.getfullargspec(max_positional_args) - return positional(len(args) - len(defaults))(max_positional_args) + return positional(len(args) - len(defaults or ()))(max_positional_args) def parse_unique_urlencoded(content): diff --git a/tests/test__helpers.py b/tests/test__helpers.py index 56df6f8807..8d520ca4ec 100644 --- a/tests/test__helpers.py +++ b/tests/test__helpers.py @@ -55,6 +55,24 @@ def function3(pos, kwonly=None): with self.assertRaises(TypeError): function3(1, 2) + # Unspecified positional with no default arguments. + @_helpers.positional + def function4(pos1, pos2): + return pos1 + pos2 + + self.assertEqual(function4(1, 2), 3) + with self.assertRaises(TypeError): + function4(1, 2, 3) + + # Unspecified positional with no arguments. + @_helpers.positional + def function5(): + return True + + self.assertTrue(function5()) + with self.assertRaises(TypeError): + function5(1) + @mock.patch("googleapiclient._helpers.logger") def test_enforcement_warning(self, mock_logger): _helpers.positional_parameters_enforcement = _helpers.POSITIONAL_WARNING