Skip to content

Commit 5b60301

Browse files
authored
Merge pull request ivankorobkov#22 from Enforcer/master
Autoparams fix for return type annotation
2 parents 8b10068 + 7ab8fb2 commit 5b60301

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

src/inject.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,18 @@ def sign_up(name, email, cache, db):
185185
def autoparams_decorator(func):
186186
if sys.version_info[:2] < (3, 5):
187187
raise InjectorException('autoparams are supported from Python 3.5 onwards')
188-
args_to_classes = dict(func.__annotations__)
188+
189+
full_args_spec = inspect.getfullargspec(func)
190+
annotations_items = full_args_spec.annotations.items()
191+
args_annotated_types = {
192+
arg_name: annotated_type for arg_name, annotated_type in annotations_items
193+
if arg_name in full_args_spec.args
194+
}
189195
if selected_args:
190-
keys_to_remove = set(args_to_classes.keys()) - set(selected_args)
196+
keys_to_remove = set(args_annotated_types.keys()) - set(selected_args)
191197
for key in keys_to_remove:
192-
del args_to_classes[key]
193-
return _ParametersInjection(**args_to_classes)(func)
198+
del args_annotated_types[key]
199+
return _ParametersInjection(**args_annotated_types)(func)
194200

195201
return autoparams_decorator
196202

src/test_inject/test_autoparams.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,3 +148,15 @@ def config(binder):
148148

149149
self.assertRaises(TypeError, test_func)
150150
self.assertRaises(TypeError, test_func, a=1, c=3)
151+
152+
def test_autoparams_omits_return_type(self):
153+
@inject.autoparams()
154+
def test_func(a: str) -> int:
155+
return a
156+
157+
def config(binder):
158+
binder.bind(str, 'bazinga')
159+
160+
inject.configure(config)
161+
162+
assert test_func() == 'bazinga'

0 commit comments

Comments
 (0)