Castle: The best Real-Time/Embedded/HighTech language EVER. Attempt 2
Révision | b8ac5b1d1fbce13f0f363e8322af775f7bde9efc (tree) |
---|---|
l'heure | 2024-03-10 02:20:51 |
Auteur | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
improved import structure
@@ -21,4 +21,5 @@ | ||
21 | 21 | from .protocols import * |
22 | 22 | from .interfaces import * |
23 | 23 | from .namespaces import * |
24 | -from .namednodes import * | |
24 | +from .nodes import * | |
25 | +from .aid import * |
@@ -6,9 +6,8 @@ | ||
6 | 6 | from dataclasses import dataclass, KW_ONLY |
7 | 7 | from dataclasses import field as dc_field |
8 | 8 | from . import AIGR |
9 | -from .namednodes import NamedNode | |
9 | +from .nodes import NamedNode | |
10 | 10 | |
11 | -__all__:PTH.List[str] = [] # Manually import what you need! | |
12 | 11 | |
13 | 12 | @dataclass |
14 | 13 | class TypedParameter(AIGR): |
@@ -26,20 +25,5 @@ | ||
26 | 25 | name: PTH.Optional[str]=None # XXX ToDo str or ID? |
27 | 26 | |
28 | 27 | |
29 | -@dataclass | |
30 | -class Specialise(NamedNode): | |
31 | - _: KW_ONLY | |
32 | - based_on: NamedNode | |
33 | - arguments: PTH.Sequence[Argument] | |
34 | - | |
35 | - def __post_init__(self): | |
36 | - if not self.name: # or self.name == "": | |
37 | - self.name = f"Specialised version of {self.based_on.name}({self.arguments})" | |
38 | - | |
39 | - def __getattr__(self, name): | |
40 | - """delegate "everything" to `.`based_on``! | |
41 | - Kind of inherit, but not to superclass (Protocol), but to the instance (a Protocol) that is wrapped""" | |
42 | - | |
43 | - return getattr(self.based_on, name) | |
44 | 28 | |
45 | 29 |
@@ -4,7 +4,7 @@ | ||
4 | 4 | import typing as PTH # Python TypeHints |
5 | 5 | from dataclasses import dataclass, KW_ONLY |
6 | 6 | from .aid import TypedParameter # Castle/AIGR type |
7 | -from .namednodes import * | |
7 | +from .nodes import * | |
8 | 8 | |
9 | 9 | __all__ = ['Event'] |
10 | 10 |
@@ -7,7 +7,7 @@ | ||
7 | 7 | from . import AIGR |
8 | 8 | from .protocols import Protocol |
9 | 9 | from .aid import TypedParameter # Castle/AIGR types |
10 | -from .namednodes import NamedNode, ID | |
10 | +from .nodes import NamedNode, ID | |
11 | 11 | |
12 | 12 | __all__ = ['PortDirection', 'Port', 'ComponentInterface'] |
13 | 13 |
@@ -1,35 +0,0 @@ | ||
1 | -# (C) Albert Mietus, 2023. Part of Castle/CCastle project | |
2 | - | |
3 | -from __future__ import annotations | |
4 | - | |
5 | -__all__ = ['NameError', 'NamedNode', 'ID'] | |
6 | - | |
7 | -from dataclasses import dataclass, KW_ONLY | |
8 | -from dataclasses import field as dc_field | |
9 | -import typing as PTH # Python TypeHints | |
10 | - | |
11 | -from . import AIGR | |
12 | - | |
13 | - | |
14 | -class NameError(AttributeError):pass | |
15 | - | |
16 | -class ID(str): pass #XXX for now and ID is a string, but that can be changed | |
17 | - | |
18 | -@dataclass | |
19 | -class NamedNode(AIGR): | |
20 | - name : ID|str | |
21 | - _: KW_ONLY | |
22 | - # type(_ns) is NamedNode, but that leads to a imports-cycle. So, use te more generic AIGR | |
23 | - _ns :PTH.Optional[AIGR]=dc_field(init=None, default=None) #type: ignore[call-overload] | |
24 | - | |
25 | - def __post_init__(self): | |
26 | - if not isinstance(self.name, ID): | |
27 | - self.name = ID(self.name) | |
28 | - | |
29 | - def register_in_NS(self, ns: AIGR): #same: type(ns) is NameSpace, but ... | |
30 | - self._ns = ns | |
31 | - | |
32 | - @property | |
33 | - def ns(self): | |
34 | - return self._ns | |
35 | - |
@@ -14,7 +14,7 @@ | ||
14 | 14 | from dataclasses import dataclass, KW_ONLY |
15 | 15 | from dataclasses import field as dc_field |
16 | 16 | |
17 | -from .namednodes import NamedNode, NameError, ID | |
17 | +from .nodes import NamedNode, NameError, ID | |
18 | 18 | |
19 | 19 | from . import AIGR, _Marker |
20 | 20 |
@@ -0,0 +1,49 @@ | ||
1 | +# (C) Albert Mietus, 2023. Part of Castle/CCastle project | |
2 | + | |
3 | +from __future__ import annotations | |
4 | + | |
5 | +from dataclasses import dataclass, KW_ONLY | |
6 | +from dataclasses import field as dc_field | |
7 | +import typing as PTH # Python TypeHints | |
8 | + | |
9 | +from . import AIGR | |
10 | + | |
11 | +class ID(str): pass #XXX for now and ID is a string, but that can be changed | |
12 | + | |
13 | + | |
14 | +class NameError(AttributeError):pass | |
15 | + | |
16 | + | |
17 | +@dataclass | |
18 | +class NamedNode(AIGR): | |
19 | + name : ID|str | |
20 | + _: KW_ONLY | |
21 | + # type(_ns) is NamedNode, but that leads to a imports-cycle. So, use te more generic AIGR | |
22 | + _ns :PTH.Optional[AIGR]=dc_field(init=None, default=None) #type: ignore[call-overload] | |
23 | + | |
24 | + def __post_init__(self): | |
25 | + if not isinstance(self.name, ID): | |
26 | + self.name = ID(self.name) | |
27 | + | |
28 | + def register_in_NS(self, ns: AIGR): #same: type(ns) is NameSpace, but ... | |
29 | + self._ns = ns | |
30 | + | |
31 | + @property | |
32 | + def ns(self): | |
33 | + return self._ns | |
34 | + | |
35 | +@dataclass | |
36 | +class Specialise(NamedNode): | |
37 | + _: KW_ONLY | |
38 | + based_on: NamedNode | |
39 | + arguments: PTH.Sequence[Argument] | |
40 | + | |
41 | + def __post_init__(self): | |
42 | + if not self.name: # or self.name == "": | |
43 | + self.name = f"Specialised version of {self.based_on.name}({self.arguments})" | |
44 | + | |
45 | + def __getattr__(self, name): | |
46 | + """delegate "everything" to `.`based_on``! | |
47 | + Kind of inherit, but not to superclass (Protocol), but to the instance (a Protocol) that is wrapped""" | |
48 | + | |
49 | + return getattr(self.based_on, name) |
@@ -10,8 +10,8 @@ | ||
10 | 10 | from . import AIGR |
11 | 11 | from .events import Event |
12 | 12 | from .aid import TypedParameter, Argument # Castle/AIGR types |
13 | -from .namednodes import NamedNode, ID | |
14 | -from .aid import Specialise | |
13 | +from .nodes import NamedNode, ID | |
14 | + | |
15 | 15 | |
16 | 16 | |
17 | 17 | __all__ = ['ProtocolKind', 'Protocol', 'EventProtocol'] |
@@ -1,7 +1,7 @@ | ||
1 | 1 | # (C) Albert Mietus, 2023. Part of Castle/CCastle project |
2 | 2 | |
3 | 3 | from castle.aigr import Event |
4 | -from castle.aigr.aid import TypedParameter | |
4 | +from castle.aigr import TypedParameter | |
5 | 5 | |
6 | 6 | |
7 | 7 | def test_0_Event_empty(): |
@@ -5,7 +5,7 @@ | ||
5 | 5 | |
6 | 6 | from castle.aigr import Protocol, ProtocolKind |
7 | 7 | from castle.aigr import Event, EventProtocol |
8 | -from castle.aigr.aid import TypedParameter | |
8 | +from castle.aigr import TypedParameter | |
9 | 9 | |
10 | 10 | |
11 | 11 | @pytest.fixture |
@@ -32,12 +32,12 @@ | ||
32 | 32 | |
33 | 33 | |
34 | 34 | def test_2a_based_onRoot(emptyProtocol): |
35 | - import castle.aigr.protocols | |
36 | - emptyProtocol.based_on is castle.aigr.protocols._RootProtocol | |
35 | + from castle.aigr.protocols import _RootProtocol # Only available when imported | |
36 | + emptyProtocol.based_on is _RootProtocol | |
37 | 37 | |
38 | 38 | def test_2b_based_onRoot_notSet(emptyProtocol_baseNotSet): |
39 | - import castle.aigr.protocols | |
40 | - emptyProtocol_baseNotSet.based_on is castle.aigr.protocols._RootProtocol | |
39 | + from castle.aigr.protocols import _RootProtocol # Only available when imported | |
40 | + emptyProtocol_baseNotSet.based_on is _RootProtocol | |
41 | 41 | |
42 | 42 | |
43 | 43 | def test_3a_eventIndex_empty(emptyProtocol, anEvent): |
@@ -49,7 +49,7 @@ | ||
49 | 49 | |
50 | 50 | from castle.aigr import Protocol, ProtocolKind |
51 | 51 | from castle.aigr import Event, EventProtocol |
52 | -from castle.aigr.aid import TypedParameter, Argument, Specialise | |
52 | +from castle.aigr import TypedParameter, Argument, Specialise | |
53 | 53 | |
54 | 54 | """ There are a few cases |
55 | 55 | ///CastleCode |
@@ -8,8 +8,8 @@ | ||
8 | 8 | |
9 | 9 | from castle.aigr import NameSpace, Source_NS |
10 | 10 | |
11 | -from castle.aigr.namespaces import NamedNode ## May be moved ip | |
12 | -from castle.aigr.namespaces import NameError | |
11 | +from castle.aigr import NamedNode, NameError | |
12 | + | |
13 | 13 | |
14 | 14 | @dataclass |
15 | 15 | class DummyNode(NamedNode): |
@@ -2,9 +2,9 @@ | ||
2 | 2 | |
3 | 3 | import pytest |
4 | 4 | |
5 | -from castle.aigr import AIGR, NamedNode | |
6 | -from castle.aigr.aid import TypedParameter, Argument | |
7 | -from castle.aigr.aid import Specialise | |
5 | +from castle.aigr import AIGR, NamedNode, Specialise | |
6 | +from castle.aigr import TypedParameter, Argument | |
7 | + | |
8 | 8 | |
9 | 9 | @pytest.fixture |
10 | 10 | def named_node(): |