4 from typing
import List
6 from dataclasses
import dataclass, field
8 @dataclass(frozen=
True)
10 """Class to hold chain properties with (limited) type-checking"""
13 monGroups: List[str] =
field(default_factory = list)
14 l1SeedThresholds: List[str] =
field(default_factory = list)
15 stream: List[str] =
field(default_factory =
lambda : [
'Main'])
16 mergingStrategy: str =
'auto'
17 mergingOrder: List[str] =
field(default_factory = list)
18 mergingOffset: int = -1
23 """Check field types"""
24 for f
in dataclasses.fields(self):
25 actual_type = typing.get_origin(f.type)
or f.type
26 value = getattr(self, f.name)
27 if actual_type == list:
30 if not isinstance(el, typing.get_args(f.type)):
32 elif not isinstance(value, actual_type):
39 raise TypeError(f
"Expected type of '{f.name}' to be {f.type}, "
40 f
"got {repr(getattr(self, f.name))}")
42 if __name__==
'__main__':