-
-
Notifications
You must be signed in to change notification settings - Fork 103
Expand file tree
/
Copy pathschema.py
More file actions
175 lines (131 loc) · 3.83 KB
/
schema.py
File metadata and controls
175 lines (131 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
from dataclasses import dataclass
from dataclasses import field
from typing import Dict
from typing import List
from typing import Literal
from urllib.parse import ParseResult
@dataclass
class Action:
def __str__(self):
return f"{self.__class__.__name__}"
@dataclass
class ExecutableContent:
actions: List[Action] = field(default_factory=list)
def __str__(self):
return ", ".join(str(action) for action in self.actions)
@property
def is_empty(self):
return not self.actions
@dataclass
class RaiseAction(Action):
event: str
@dataclass
class AssignAction(Action):
location: str
expr: "str | None" = None
child_xml: "str | None" = None
@dataclass
class LogAction(Action):
label: "str | None"
expr: "str | None"
@dataclass
class IfBranch(Action):
cond: "str | None"
actions: List[Action] = field(default_factory=list)
def __str__(self):
return self.cond or "<empty cond>"
def append(self, action: Action):
self.actions.append(action)
@dataclass
class IfAction(Action):
branches: List[IfBranch] = field(default_factory=list)
@dataclass
class ForeachAction(Action):
array: str
item: str
index: "str | None"
content: ExecutableContent
@dataclass
class Param:
name: str
expr: "str | None"
location: "str | None" = None
@dataclass
class SendAction(Action):
event: "str | None" = None
eventexpr: "str | None" = None
target: "str | None" = None
type: "str | None" = None
id: "str | None" = None
idlocation: "str | None" = None
delay: "str | None" = None
delayexpr: "str | None" = None
namelist: "str | None" = None
params: List[Param] = field(default_factory=list)
content: "str | None" = None
@dataclass
class CancelAction(Action):
sendid: "str | None" = None
sendidexpr: "str | None" = None
@dataclass
class ScriptAction(Action):
content: str
@dataclass
class Transition:
target: "str | None" = None
internal: bool = False
initial: bool = False
event: "str | None" = None
cond: "str | None" = None
on: "ExecutableContent | None" = None
@dataclass
class DoneData:
params: List[Param] = field(default_factory=list)
content_expr: "str | None" = None
@dataclass
class InvokeDefinition:
type: "str | None" = None
typeexpr: "str | None" = None
src: "str | None" = None
srcexpr: "str | None" = None
id: "str | None" = None
idlocation: "str | None" = None
autoforward: bool = False
namelist: "str | None" = None
params: List[Param] = field(default_factory=list)
content: "str | None" = None
finalize: "ExecutableContent | None" = None
@dataclass
class State:
id: str
initial: bool = False
final: bool = False
parallel: bool = False
transitions: List[Transition] = field(default_factory=list)
onentry: List[ExecutableContent] = field(default_factory=list)
onexit: List[ExecutableContent] = field(default_factory=list)
states: Dict[str, "State"] = field(default_factory=dict)
history: Dict[str, "HistoryState"] = field(default_factory=dict)
donedata: "DoneData | None" = None
invocations: List[InvokeDefinition] = field(default_factory=list)
@dataclass
class HistoryState:
id: str
type: "Literal['shallow', 'deep']" = "shallow"
transitions: List[Transition] = field(default_factory=list)
@dataclass
class DataItem:
id: str
src: "ParseResult | None"
expr: "str | None"
content: "str | None"
@dataclass
class DataModel:
data: List[DataItem] = field(default_factory=list)
scripts: List[ScriptAction] = field(default_factory=list)
@dataclass
class StateMachineDefinition:
name: "str | None" = None
states: Dict[str, State] = field(default_factory=dict)
initial_states: List[str] = field(default_factory=list)
datamodel: "DataModel | None" = None