Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Revisão | 1e3066c73dad0715538da661a1a3b91a2726c0e6 (tree) |
---|---|
Hora | 2024-04-10 17:19:45 |
Autor | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
aigr.machinery now mostly done (for now)
@@ -8,6 +8,7 @@ | ||
8 | 8 | pytst/test_2c_GenericProtocols.py \ |
9 | 9 | # |
10 | 10 | CURRENT = \ |
11 | + pytst/machinery/test_0_dataclass.py \ | |
11 | 12 | pytst/machinery/test_0.py \ |
12 | 13 | # |
13 | 14 | TODO = \ |
@@ -7,14 +7,15 @@ | ||
7 | 7 | import typing as PTH # Python TypeHints |
8 | 8 | |
9 | 9 | from .. import AIGR, Port, Event, Argument, Protocol |
10 | -from ..develop import ToDo | |
10 | + | |
11 | +from .. import todo | |
11 | 12 | |
12 | 13 | @dataclass |
13 | 14 | class machinery(AIGR): |
14 | 15 | _: KW_ONLY |
15 | 16 | delegate : implementation = None |
16 | 17 | |
17 | -implementation : PTH.TypeAlias = PTH.Optional[type[machinery]] | |
18 | +implementation : PTH.TypeAlias = PTH.Optional[type[machinery]] # pragma: no mutate | |
18 | 19 | |
19 | 20 | @dataclass |
20 | 21 | class send_proto(machinery): |
@@ -22,9 +23,9 @@ | ||
22 | 23 | outport : Port |
23 | 24 | |
24 | 25 | @dataclass |
25 | -class sendStream(send_proto, ToDo): ... | |
26 | +class sendStream(send_proto, todo.mark_Dataclass): ... | |
26 | 27 | @dataclass |
27 | -class sendData(send_proto, ToDo): ... | |
28 | +class sendData(send_proto, todo.mark_Dataclass): ... | |
28 | 29 | |
29 | 30 | @dataclass |
30 | 31 | class sendEvent(send_proto): |
@@ -40,7 +41,8 @@ | ||
40 | 41 | @dataclass |
41 | 42 | class DispatchTable(machinery): |
42 | 43 | _: KW_ONLY |
43 | - handlers : PTH.Sequence[Handlers] # XXX Handlers not yet defined | |
44 | + handlers : PTH.Sequence[Handler] # XXX Handlers not yet defined | |
45 | +Handler = todo.Typing #XXX Weet nog niet waar/wanneer (Event)Handlers in de AIGR komen | |
44 | 46 | |
45 | 47 | @dataclass |
46 | 48 | class eDispatchTable(DispatchTable): |
@@ -0,0 +1,17 @@ | ||
1 | +# (C) Albert Mietus, 2024. Part of Castle/CCastle project | |
2 | + | |
3 | +from dataclasses import dataclass | |
4 | +import typing as PTH | |
5 | + | |
6 | +@dataclass | |
7 | +class mark_Dataclass: | |
8 | + "Mark a (data)class that is isn't Implemented yet" | |
9 | + def __post_init__(self, *t, **d): | |
10 | + raise NotImplementedError(f"This {type(self)} ToDo class is't supported (yet) --sorry") | |
11 | + | |
12 | +class Typing(): | |
13 | + """Specify the type is to be done""" | |
14 | + def __new__(cls, *t, **d): | |
15 | + return PTH.NewType('Todo', None) | |
16 | + | |
17 | + |
@@ -68,3 +68,5 @@ | ||
68 | 68 | assert o.handlers[0] == 'callable0' |
69 | 69 | assert o.handlers[1] == 'callable1' |
70 | 70 | assert len(o.handlers) == 2 |
71 | + | |
72 | + |
@@ -0,0 +1,30 @@ | ||
1 | +# (C) Albert Mietus, 2024. Part of Castle/CCastle project | |
2 | + | |
3 | +"""Just verify all @dataclasses are dataclasses ... Mostly for MutMut""" | |
4 | + | |
5 | +import pytest | |
6 | +import dataclasses | |
7 | + | |
8 | +from castle.aigr import machinery | |
9 | + | |
10 | +def isDataClass(cls): | |
11 | + assert dataclasses.is_dataclass(cls) # This will also pass when cls inherits from a dataclass | |
12 | + my_init = getattr(cls, '__init__') | |
13 | + inherited_init = getattr(cls.mro()[1], '__init__') | |
14 | + assert my_init is not inherited_init, f"Probably you subclasses a dataclass, but forgot @dataclass for {cls}" | |
15 | + | |
16 | + | |
17 | +def test_dataclass_all(): | |
18 | + for cls in (machinery.machinery, | |
19 | + machinery.send_proto, | |
20 | + machinery.sendStream, | |
21 | + machinery.sendData, | |
22 | + machinery.sendEvent, | |
23 | + machinery.connection, | |
24 | + machinery.DispatchTable, | |
25 | + machinery.eDispatchTable, | |
26 | + ): | |
27 | + isDataClass(cls) | |
28 | + | |
29 | + | |
30 | + |