Skip to content

Commit

Permalink
chore: #127 pr
Browse files Browse the repository at this point in the history
  • Loading branch information
Lancetnik committed Sep 5, 2024
1 parent 78ccd68 commit edfb458
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 4 deletions.
6 changes: 2 additions & 4 deletions fast_depends/core/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,10 @@ def build_call_model(
annotation = param.annotation

default: Any
if param_name == "args":
if param.kind is inspect.Parameter.VAR_POSITIONAL:
default = ()
elif param_name == "kwargs":
elif param.kind is inspect.Parameter.VAR_KEYWORD:
default = {}
elif param.default is inspect.Parameter.empty:
default = Ellipsis
else:
default = param.default

Expand Down
76 changes: 76 additions & 0 deletions tests/test_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,79 @@ def extra_func(n): ...

assert {p.field_name for p in model.params} == {"a", "b"}
assert {p.field_name for p in model.flat_params} == {"a", "b", "c", "m", "n"}


def test_args_kwargs_params():
def func1(m): ...

def func2(c, b=Depends(func1), d=CustomField()): # noqa: B008
...

def func3(b): ...

def default_var_names(a, *args, b, m=Depends(func2), k=Depends(func3), **kwargs):
return a, args, b, kwargs

def extra_func(n): ...

model = build_call_model(
default_var_names,
extra_dependencies=(Depends(extra_func),),
dependency_provider=Provider(),
)

assert {p.field_name for p in model.params} == {"a", "args", "b", "kwargs"}
assert {p.field_name for p in model.flat_params} == {
"a",
"args",
"b",
"kwargs",
"c",
"m",
"n",
}

assert default_var_names(1, *("a"), b=2, **{"kw": "kw"}) == (
1,
("a",),
2,
{"kw": "kw"},
)


def test_custom_args_kwargs_params():
def func1(m): ...

def func2(c, b=Depends(func1), d=CustomField()): # noqa: B008
...

def func3(b): ...

def extra_func(n): ...

def custom_var_names(a, *args_, b, m=Depends(func2), k=Depends(func3), **kwargs_):
return a, args_, b, kwargs_

model = build_call_model(
custom_var_names,
extra_dependencies=(Depends(extra_func),),
dependency_provider=Provider(),
)

assert {p.field_name for p in model.params} == {"a", "args_", "b", "kwargs_"}
assert {p.field_name for p in model.flat_params} == {
"a",
"args_",
"b",
"kwargs_",
"c",
"m",
"n",
}

assert custom_var_names(1, *("a"), b=2, **{"kw": "kw"}) == (
1,
("a",),
2,
{"kw": "kw"},
)

0 comments on commit edfb458

Please sign in to comment.