Skip to content

Commit 5891042

Browse files
author
Ryan P Kilby
committed
Fix is_simple_callable with variable args, kwargs
1 parent 1bd35ad commit 5891042

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

rest_framework/fields.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,12 @@ def is_simple_callable(obj):
5959

6060
sig = inspect.signature(obj)
6161
params = sig.parameters.values()
62-
return all(param.default != param.empty for param in params)
62+
return all(
63+
param.kind == param.VAR_POSITIONAL or
64+
param.kind == param.VAR_KEYWORD or
65+
param.default != param.empty
66+
for param in params
67+
)
6368

6469
else:
6570
def is_simple_callable(obj):

tests/test_fields.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ def valid(self):
3737
def valid_kwargs(self, param='value'):
3838
pass
3939

40+
def valid_vargs_kwargs(self, *args, **kwargs):
41+
pass
42+
4043
def invalid(self, param):
4144
pass
4245

@@ -45,11 +48,13 @@ def invalid(self, param):
4548
# unbound methods
4649
assert not is_simple_callable(Foo.valid)
4750
assert not is_simple_callable(Foo.valid_kwargs)
51+
assert not is_simple_callable(Foo.valid_vargs_kwargs)
4852
assert not is_simple_callable(Foo.invalid)
4953

5054
# bound methods
5155
assert is_simple_callable(Foo().valid)
5256
assert is_simple_callable(Foo().valid_kwargs)
57+
assert is_simple_callable(Foo().valid_vargs_kwargs)
5358
assert not is_simple_callable(Foo().invalid)
5459

5560
def test_function(self):
@@ -59,11 +64,15 @@ def simple():
5964
def valid(param='value', param2='value'):
6065
pass
6166

67+
def valid_vargs_kwargs(*args, **kwargs):
68+
pass
69+
6270
def invalid(param, param2='value'):
6371
pass
6472

6573
assert is_simple_callable(simple)
6674
assert is_simple_callable(valid)
75+
assert is_simple_callable(valid_vargs_kwargs)
6776
assert not is_simple_callable(invalid)
6877

6978
@unittest.skipUnless(typings, 'requires python 3.5')

0 commit comments

Comments
 (0)