Fix not all args are passed to handler function invocation

This commit is contained in:
evgfilim1 2021-07-16 14:45:54 +05:00
parent 125fc22ff9
commit df882a1b5d
No known key found for this signature in database
GPG key ID: 16AEE4D0BB188AEC
2 changed files with 17 additions and 1 deletions

View file

@ -32,7 +32,9 @@ class CallableMixin:
if self.spec.varkw:
return kwargs
return {k: v for k, v in kwargs.items() if k in self.spec.args}
return {
k: v for k, v in kwargs.items() if k in self.spec.args or k in self.spec.kwonlyargs
}
async def call(self, *args: Any, **kwargs: Any) -> Any:
wrapped = partial(self.callback, *args, **self._prepare_kwargs(kwargs))

View file

@ -22,6 +22,10 @@ async def callback3(foo: int, **kwargs):
return locals()
async def callback4(foo: int, *, bar: int, baz: int):
return locals()
class Filter(BaseFilter):
async def __call__(self, foo: int, bar: int, baz: int) -> Union[bool, Dict[str, Any]]:
return locals()
@ -95,11 +99,21 @@ class TestCallableMixin:
{"foo": 42, "spam": True, "baz": "fuz", "bar": "test"},
{"foo": 42, "baz": "fuz", "bar": "test"},
),
pytest.param(
functools.partial(callback2, bar="test"),
{"foo": 42, "spam": True, "baz": "fuz"},
{"foo": 42, "baz": "fuz"},
),
pytest.param(
callback3,
{"foo": 42, "spam": True, "baz": "fuz", "bar": "test"},
{"foo": 42, "spam": True, "baz": "fuz", "bar": "test"},
),
pytest.param(
callback4,
{"foo": 42, "spam": True, "baz": "fuz", "bar": "test"},
{"foo": 42, "baz": "fuz", "bar": "test"},
),
pytest.param(
Filter(), {"foo": 42, "spam": True, "baz": "fuz"}, {"foo": 42, "baz": "fuz"}
),