Skip to content

Commit ad2b0dc

Browse files
authored
[116] Fixes to kargs and kwargs, bumps version (#117)
* failing test * fixes * version bump and doc
1 parent b11a265 commit ad2b0dc

File tree

20 files changed

+297
-615
lines changed

20 files changed

+297
-615
lines changed

dds/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = "0.7.2"
1+
version = "0.7.3"

dds/fun_args.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,11 @@ def get_arg_ctx(
8888
for (idx, (n, p_)) in enumerate(arg_sig.parameters.items()):
8989
p: inspect.Parameter = p_
9090
# _logger.debug(f"get_arg_ctx: {f}: idx={idx} n={n} p={p}")
91-
if p.kind != Parameter.POSITIONAL_OR_KEYWORD:
91+
if p.kind not in (Parameter.POSITIONAL_OR_KEYWORD, Parameter.VAR_KEYWORD):
9292
raise NotImplementedError(
9393
f"Argument type not understood: {p.kind} {f} {arg_sig}"
9494
)
95+
h: Optional[PyHash]
9596
if idx < num_args:
9697
# It is a list argument
9798
# TODO: should it discard arguments of not-whitelisted types?
@@ -110,6 +111,9 @@ def get_arg_ctx(
110111
# TODO: should it discard arguments of not-whitelisted types?
111112
# TODO: raise a warning for non-whitelisted objects
112113
h = dds_hash(p.default or "__none__")
114+
elif p.kind == Parameter.VAR_KEYWORD:
115+
# kwargs: for now, just ignored
116+
h = None
113117
else:
114118
raise NotImplementedError(
115119
f"Cannot deal with argument name {n} {p.kind} {f} {arg_sig}"
@@ -145,7 +149,11 @@ def process_arg(node: ast.AST) -> Optional[PyHash]:
145149
p: inspect.Parameter = p_
146150
# _logger.debug(f"get_arg_ctx: {f}: idx={idx} n={n} p={p}")
147151
h: Optional[PyHash]
148-
if p.kind != Parameter.POSITIONAL_OR_KEYWORD:
152+
if p.kind not in (
153+
Parameter.POSITIONAL_OR_KEYWORD,
154+
Parameter.VAR_KEYWORD,
155+
Parameter.VAR_POSITIONAL,
156+
):
149157
raise NotImplementedError(
150158
f"Argument type not understood {p.kind} {f} {arg_sig}"
151159
)

dds_tests/test_kargs.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import dds
2+
import pytest
3+
from .utils import cleandir
4+
5+
_ = cleandir
6+
7+
path_1 = "/path_1"
8+
9+
10+
def f1(x, y, z):
11+
return x + y + z
12+
13+
14+
def f1_1():
15+
kargs = [1, 2, 3]
16+
return dds.keep("/p1", f1, *kargs)
17+
18+
19+
def f1_2():
20+
kargs = [2]
21+
kwargs = [{"z": 3}]
22+
return f1(1, *kargs, **kwargs[0])
23+
24+
25+
@pytest.mark.usefixtures("cleandir")
26+
def test_kargs_1():
27+
assert dds.eval(f1_1) == 6
28+
assert dds.eval(f1_2) == 6
29+
30+
31+
def f2(*args, **kwargs):
32+
return len(args) + len(kwargs)
33+
34+
35+
def f2_1():
36+
kargs = [1, 2, 3]
37+
return dds.keep("/p1", f2, *kargs)
38+
39+
40+
def f2_2():
41+
kargs = [2]
42+
kwargs = [{"z": 3}]
43+
return f2(1, *kargs, **kwargs[0])
44+
45+
46+
@pytest.mark.usefixtures("cleandir")
47+
def test_kargs_2():
48+
assert dds.eval(f2_1) == 3
49+
assert dds.eval(f2_2) == 3

doc_source/changelog.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Changelog
22

3+
## v0.7.3
4+
5+
Fixes the usage of positional and keyworded arguments when used in conjunction
6+
with `dds.keep`.
7+
38
## v0.7.2
49

510
Small usability fixes in this release:

doc_source/tut_sklearn.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
"cell_type": "markdown",
4747
"metadata": {},
4848
"source": [
49-
"Seting up the `dds` store:"
49+
"Seting up the `dds` store. This is a recommended operation (here necessary to generate the documentation)."
5050
]
5151
},
5252
{

0 commit comments

Comments
 (0)