Skip to content

Commit bcc99a8

Browse files
committed
chore: handle dataclasses with slots correctly in argument conversion
1 parent c15b90a commit bcc99a8

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

robotcode/jsonrpc2/protocol.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import weakref
1010
from abc import ABC, abstractmethod
1111
from collections import OrderedDict
12-
from dataclasses import dataclass, field
12+
from dataclasses import dataclass, field, fields, is_dataclass
1313
from typing import (
1414
Any,
1515
Callable,
@@ -648,16 +648,24 @@ def _convert_params(
648648
kw_args = {}
649649
args = []
650650
params_added = False
651-
rest = set(converted_params.__dict__.keys())
651+
652+
field_names = (
653+
[f.name for f in fields(converted_params)]
654+
if is_dataclass(converted_params)
655+
else list(converted_params.__dict__.keys())
656+
)
657+
658+
rest = set(field_names)
652659
if isinstance(params, dict):
653660
rest = set.union(rest, params.keys())
654661

655662
for v in signature.parameters.values():
656-
if v.name in converted_params.__dict__:
663+
if v.name in field_names:
657664
if v.kind == inspect.Parameter.POSITIONAL_ONLY:
658665
args.append(getattr(converted_params, v.name))
659666
else:
660667
kw_args[v.name] = getattr(converted_params, v.name)
668+
661669
rest.remove(v.name)
662670
elif v.name == "params":
663671
if v.kind == inspect.Parameter.POSITIONAL_ONLY:

0 commit comments

Comments
 (0)