Skip to content

Commit 43ba5f7

Browse files
committed
feat(service): validate explicit in_signature arity against method parameters
1 parent 01cbf81 commit 43ba5f7

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

src/dbus_fast/service.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,15 @@ def __init__(
7878
for i, param in enumerate(inspection.parameters.values())
7979
if i != 0
8080
]
81-
for i, type_ in enumerate(get_signature_tree(in_signature).types):
82-
arg_name = param_names[i] if i < len(param_names) else None
83-
in_args.append(intr.Arg(type_, intr.ArgDirection.IN, arg_name))
81+
types = get_signature_tree(in_signature).types
82+
if len(types) != len(param_names):
83+
raise ValueError(
84+
"in_signature has "
85+
f"{len(types)} complete type(s) but the method takes "
86+
f"{len(param_names)} parameter(s)"
87+
)
88+
for i, type_ in enumerate(types):
89+
in_args.append(intr.Arg(type_, intr.ArgDirection.IN, param_names[i]))
8490

8591
out_args: list[intr.Arg] = []
8692
if out_signature is None:

tests/service/test_decorator_signatures.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import asyncio
2+
13
import pytest
24

35
from dbus_fast import Message, MessageType, PropertyAccess
@@ -176,3 +178,5 @@ async def test_decorator_signature_round_trip():
176178

177179
bus1.disconnect()
178180
bus2.disconnect()
181+
await asyncio.wait_for(bus1.wait_for_disconnect(), timeout=1)
182+
await asyncio.wait_for(bus2.wait_for_disconnect(), timeout=1)

0 commit comments

Comments
 (0)