Skip to content

Commit 99273cb

Browse files
committed
project: add isinstance_list, fix up errors.
1 parent cad501d commit 99273cb

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

niar/project.py

+23-4
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,25 @@ def __init__(
1919
description: str,
2020
required: bool,
2121
isinstance: Optional[type] = None,
22+
isinstance_list: Optional[type] = None,
2223
issubclass: Optional[type] = None,
2324
issubclass_list: Optional[type] = None,
2425
):
2526
self.name = name
2627
self.description = description
2728
self.required = required
2829
self.isinstance = isinstance
30+
self.isinstance_list = isinstance_list
2931
self.issubclass = issubclass
3032
self.issubclass_list = issubclass_list
3133

3234
def validate(self, project):
33-
assert not (
34-
self.issubclass and self.issubclass_list
35-
), "may only define one of issubclass and issubclass_list"
35+
assert len(list(filter(None, [
36+
self.isinstance,
37+
self.isinstance_list,
38+
self.issubclass,
39+
self.issubclass_list,
40+
]))) == 1, "must define exactly one of the is... parameters"
3641

3742
if self.required:
3843
assert hasattr(project, self.name), (
@@ -49,6 +54,14 @@ def validate(self, project):
4954
f"{self.name!r} ({self.description}) should an instance of "
5055
f"{self.isinstance!r}, but is {attr!r}"
5156
)
57+
if self.isinstance_list:
58+
assert isinstance(attr, list)
59+
for elem in attr:
60+
assert isinstance(elem, self.isinstance_list), (
61+
f"{project.__module__}.{project.__class__.__qualname__} property "
62+
f"{self.name!r} ({self.description}) should a list of instances of "
63+
f"{self.isinstanc_list!r}, but has element {elem!r}"
64+
)
5265
if self.issubclass:
5366
assert issubclass(attr, self.issubclass), (
5467
f"{project.__module__}.{project.__class__.__qualname__} property "
@@ -61,7 +74,7 @@ def validate(self, project):
6174
assert issubclass(elem, self.issubclass_list), (
6275
f"{project.__module__}.{project.__class__.__qualname__} property "
6376
f"{self.name!r} ({self.description}) should be a list of subclasses of "
64-
f"{self.issubclass!r}, but has element {attr!r}"
77+
f"{self.issubclass_list!r}, but has element {elem!r}"
6578
)
6679

6780

@@ -98,6 +111,12 @@ class Project:
98111
required=False,
99112
issubclass_list=CxxrtlPlatform,
100113
),
114+
Prop(
115+
"externals",
116+
description="a list of Verilog and RTLIL project paths to include in the build",
117+
required=False,
118+
isinstance_list=str,
119+
),
101120
]
102121

103122
def __init_subclass__(cls):

0 commit comments

Comments
 (0)