@autoweb/domain-models 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/index.d.ts +594 -0
- package/index.js +3 -0
- package/package.json +55 -0
- package/python-models/__init__.py +68 -0
- package/python-models/action-configs.py +1112 -0
- package/python-models/build/lib/floweb_models/__init__.py +194 -0
- package/python-models/build/lib/floweb_models/action_configs.py +783 -0
- package/python-models/build/lib/floweb_models/debug.py +209 -0
- package/python-models/build/lib/floweb_models/debug_models.py +141 -0
- package/python-models/build/lib/floweb_models/environment.py +158 -0
- package/python-models/build/lib/floweb_models/execution_results.py +208 -0
- package/python-models/build/lib/floweb_models/flow.py +345 -0
- package/python-models/build/lib/floweb_models/flow_validation.py +316 -0
- package/python-models/build/lib/floweb_models/parallel_execution.py +258 -0
- package/python-models/build/lib/floweb_models/performance_test.py +605 -0
- package/python-models/build/lib/floweb_models/websocket_communication.py +697 -0
- package/python-models/debug.py +209 -0
- package/python-models/dist/floweb_domain_models-1.0.0-py3-none-any.whl +0 -0
- package/python-models/environment.py +158 -0
- package/python-models/execution-results.py +208 -0
- package/python-models/flow-validation.py +316 -0
- package/python-models/flow.py +369 -0
- package/python-models/floweb_domain_models.egg-info/PKG-INFO +9 -0
- package/python-models/floweb_domain_models.egg-info/SOURCES.txt +16 -0
- package/python-models/floweb_domain_models.egg-info/dependency_links.txt +1 -0
- package/python-models/floweb_domain_models.egg-info/requires.txt +1 -0
- package/python-models/floweb_domain_models.egg-info/top_level.txt +1 -0
- package/python-models/floweb_models/__init__.py +194 -0
- package/python-models/floweb_models/__pycache__/__init__.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/action_configs.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/debug.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/debug_models.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/environment.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/execution_results.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/flow.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/flow_validation.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/parallel_execution.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/performance_test.cpython-312.pyc +0 -0
- package/python-models/floweb_models/__pycache__/websocket_communication.cpython-312.pyc +0 -0
- package/python-models/floweb_models/action_configs.py +1062 -0
- package/python-models/floweb_models/debug.py +209 -0
- package/python-models/floweb_models/debug_models.py +141 -0
- package/python-models/floweb_models/environment.py +158 -0
- package/python-models/floweb_models/execution_results.py +208 -0
- package/python-models/floweb_models/flow.py +345 -0
- package/python-models/floweb_models/flow_validation.py +316 -0
- package/python-models/floweb_models/parallel_execution.py +229 -0
- package/python-models/floweb_models/performance_test.py +605 -0
- package/python-models/floweb_models/websocket_communication.py +697 -0
- package/python-models/floweb_models.egg-info/PKG-INFO +9 -0
- package/python-models/floweb_models.egg-info/SOURCES.txt +16 -0
- package/python-models/floweb_models.egg-info/dependency_links.txt +1 -0
- package/python-models/floweb_models.egg-info/requires.txt +1 -0
- package/python-models/floweb_models.egg-info/top_level.txt +1 -0
- package/python-models/parallel-execution.py +475 -0
- package/python-models/performance-test.py +605 -0
- package/python-models/setup.py +13 -0
- package/python-models/websocket-communication.py +697 -0
- package/schemas/action-configs.json +1501 -0
- package/schemas/debug.json +203 -0
- package/schemas/environment.json +165 -0
- package/schemas/execution-results.json +209 -0
- package/schemas/flow-validation.json +311 -0
- package/schemas/flow.json +381 -0
- package/schemas/parallel-execution.json +219 -0
- package/schemas/performance-test.json +600 -0
- package/schemas/websocket-communication.json +1118 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: flow.json
|
|
3
|
+
# timestamp: 2026-01-25T13:38:22+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import StrEnum
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from pydantic import AwareDatetime, BaseModel, ConfigDict
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Type(StrEnum):
|
|
14
|
+
"""
|
|
15
|
+
Type of the flow
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
flow = 'flow'
|
|
19
|
+
test = 'test'
|
|
20
|
+
performance = 'performance'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class LastResult(StrEnum):
|
|
24
|
+
"""
|
|
25
|
+
Result of last execution
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
passed = 'passed'
|
|
29
|
+
failed = 'failed'
|
|
30
|
+
pending = 'pending'
|
|
31
|
+
running = 'running'
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class Position(BaseModel):
|
|
35
|
+
model_config = ConfigDict(
|
|
36
|
+
populate_by_name=True,
|
|
37
|
+
)
|
|
38
|
+
x: float
|
|
39
|
+
"""
|
|
40
|
+
X coordinate
|
|
41
|
+
"""
|
|
42
|
+
y: float
|
|
43
|
+
"""
|
|
44
|
+
Y coordinate
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class ActionData(BaseModel):
|
|
49
|
+
model_config = ConfigDict(
|
|
50
|
+
populate_by_name=True,
|
|
51
|
+
)
|
|
52
|
+
label: str
|
|
53
|
+
"""
|
|
54
|
+
Human-readable label
|
|
55
|
+
"""
|
|
56
|
+
type: str
|
|
57
|
+
"""
|
|
58
|
+
Action type identifier
|
|
59
|
+
"""
|
|
60
|
+
config: dict[str, Any]
|
|
61
|
+
"""
|
|
62
|
+
Action-specific configuration
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class Action(BaseModel):
|
|
67
|
+
model_config = ConfigDict(
|
|
68
|
+
populate_by_name=True,
|
|
69
|
+
)
|
|
70
|
+
id: str
|
|
71
|
+
"""
|
|
72
|
+
Unique action identifier
|
|
73
|
+
"""
|
|
74
|
+
type: str
|
|
75
|
+
"""
|
|
76
|
+
Action type
|
|
77
|
+
"""
|
|
78
|
+
position: Position
|
|
79
|
+
data: ActionData
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
class Edge(BaseModel):
|
|
83
|
+
model_config = ConfigDict(
|
|
84
|
+
populate_by_name=True,
|
|
85
|
+
)
|
|
86
|
+
id: str
|
|
87
|
+
"""
|
|
88
|
+
Unique edge identifier
|
|
89
|
+
"""
|
|
90
|
+
source: str
|
|
91
|
+
"""
|
|
92
|
+
Source action ID
|
|
93
|
+
"""
|
|
94
|
+
sourceHandle: str | None = None
|
|
95
|
+
"""
|
|
96
|
+
Source handle identifier
|
|
97
|
+
"""
|
|
98
|
+
target: str
|
|
99
|
+
"""
|
|
100
|
+
Target action ID
|
|
101
|
+
"""
|
|
102
|
+
targetHandle: str | None = None
|
|
103
|
+
"""
|
|
104
|
+
Target handle identifier
|
|
105
|
+
"""
|
|
106
|
+
type: str | None = 'step'
|
|
107
|
+
"""
|
|
108
|
+
Edge type
|
|
109
|
+
"""
|
|
110
|
+
data: dict[str, Any] | None = None
|
|
111
|
+
"""
|
|
112
|
+
Additional edge data
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
class Zoom(BaseModel):
|
|
117
|
+
model_config = ConfigDict(
|
|
118
|
+
populate_by_name=True,
|
|
119
|
+
)
|
|
120
|
+
x: float
|
|
121
|
+
"""
|
|
122
|
+
Pan X position
|
|
123
|
+
"""
|
|
124
|
+
y: float
|
|
125
|
+
"""
|
|
126
|
+
Pan Y position
|
|
127
|
+
"""
|
|
128
|
+
zoom: float
|
|
129
|
+
"""
|
|
130
|
+
Zoom level
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class Variable(BaseModel):
|
|
135
|
+
model_config = ConfigDict(
|
|
136
|
+
populate_by_name=True,
|
|
137
|
+
)
|
|
138
|
+
id: str
|
|
139
|
+
"""
|
|
140
|
+
Variable identifier
|
|
141
|
+
"""
|
|
142
|
+
name: str
|
|
143
|
+
"""
|
|
144
|
+
Variable name
|
|
145
|
+
"""
|
|
146
|
+
type: str
|
|
147
|
+
"""
|
|
148
|
+
Variable data type
|
|
149
|
+
"""
|
|
150
|
+
value: Any
|
|
151
|
+
"""
|
|
152
|
+
Variable value
|
|
153
|
+
"""
|
|
154
|
+
description: str | None = None
|
|
155
|
+
"""
|
|
156
|
+
Optional description
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
class FlowVariables(BaseModel):
|
|
161
|
+
model_config = ConfigDict(
|
|
162
|
+
populate_by_name=True,
|
|
163
|
+
)
|
|
164
|
+
input: list[Variable]
|
|
165
|
+
"""
|
|
166
|
+
Input variables
|
|
167
|
+
"""
|
|
168
|
+
output: list[Variable]
|
|
169
|
+
"""
|
|
170
|
+
Output variables
|
|
171
|
+
"""
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class FlowParameters(BaseModel):
|
|
175
|
+
model_config = ConfigDict(
|
|
176
|
+
populate_by_name=True,
|
|
177
|
+
)
|
|
178
|
+
input: list[Variable]
|
|
179
|
+
"""
|
|
180
|
+
Input parameters
|
|
181
|
+
"""
|
|
182
|
+
output: list[Variable]
|
|
183
|
+
"""
|
|
184
|
+
Output parameters
|
|
185
|
+
"""
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
class EnvironmentVariable(BaseModel):
|
|
189
|
+
model_config = ConfigDict(
|
|
190
|
+
populate_by_name=True,
|
|
191
|
+
)
|
|
192
|
+
id: str
|
|
193
|
+
"""
|
|
194
|
+
Variable identifier
|
|
195
|
+
"""
|
|
196
|
+
name: str
|
|
197
|
+
"""
|
|
198
|
+
Variable name
|
|
199
|
+
"""
|
|
200
|
+
type: str
|
|
201
|
+
"""
|
|
202
|
+
Variable data type
|
|
203
|
+
"""
|
|
204
|
+
value: Any
|
|
205
|
+
"""
|
|
206
|
+
Variable value
|
|
207
|
+
"""
|
|
208
|
+
description: str | None = None
|
|
209
|
+
"""
|
|
210
|
+
Optional description
|
|
211
|
+
"""
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class Environment(BaseModel):
|
|
215
|
+
model_config = ConfigDict(
|
|
216
|
+
populate_by_name=True,
|
|
217
|
+
)
|
|
218
|
+
id: str
|
|
219
|
+
"""
|
|
220
|
+
Environment identifier
|
|
221
|
+
"""
|
|
222
|
+
name: str
|
|
223
|
+
"""
|
|
224
|
+
Environment name
|
|
225
|
+
"""
|
|
226
|
+
variables: list[EnvironmentVariable | Variable] | None = None
|
|
227
|
+
"""
|
|
228
|
+
Environment variables
|
|
229
|
+
"""
|
|
230
|
+
description: str | None = None
|
|
231
|
+
"""
|
|
232
|
+
Environment description
|
|
233
|
+
"""
|
|
234
|
+
isActive: bool | None = None
|
|
235
|
+
"""
|
|
236
|
+
Whether this environment is active
|
|
237
|
+
"""
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class GlobalVariable(BaseModel):
|
|
241
|
+
model_config = ConfigDict(
|
|
242
|
+
populate_by_name=True,
|
|
243
|
+
)
|
|
244
|
+
id: str
|
|
245
|
+
"""
|
|
246
|
+
Variable identifier
|
|
247
|
+
"""
|
|
248
|
+
name: str
|
|
249
|
+
"""
|
|
250
|
+
Variable name
|
|
251
|
+
"""
|
|
252
|
+
type: str
|
|
253
|
+
"""
|
|
254
|
+
Variable data type
|
|
255
|
+
"""
|
|
256
|
+
value: Any
|
|
257
|
+
"""
|
|
258
|
+
Variable value
|
|
259
|
+
"""
|
|
260
|
+
description: str | None = None
|
|
261
|
+
"""
|
|
262
|
+
Optional description
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
class Flow(BaseModel):
|
|
267
|
+
"""
|
|
268
|
+
Complete flow definition for automation workflows
|
|
269
|
+
"""
|
|
270
|
+
|
|
271
|
+
model_config = ConfigDict(
|
|
272
|
+
populate_by_name=True,
|
|
273
|
+
)
|
|
274
|
+
id: str
|
|
275
|
+
"""
|
|
276
|
+
Unique identifier for the flow
|
|
277
|
+
"""
|
|
278
|
+
name: str
|
|
279
|
+
"""
|
|
280
|
+
Human-readable name of the flow
|
|
281
|
+
"""
|
|
282
|
+
description: str | None = None
|
|
283
|
+
"""
|
|
284
|
+
Optional description of the flow
|
|
285
|
+
"""
|
|
286
|
+
tags: list[str] | None = None
|
|
287
|
+
"""
|
|
288
|
+
Tags for categorization and filtering
|
|
289
|
+
"""
|
|
290
|
+
parentID: str | None = None
|
|
291
|
+
"""
|
|
292
|
+
Parent folder ID for organization
|
|
293
|
+
"""
|
|
294
|
+
type: Type | None = Type.flow
|
|
295
|
+
"""
|
|
296
|
+
Type of the flow
|
|
297
|
+
"""
|
|
298
|
+
actions: list[Action]
|
|
299
|
+
"""
|
|
300
|
+
List of actions in the flow
|
|
301
|
+
"""
|
|
302
|
+
edges: list[Edge]
|
|
303
|
+
"""
|
|
304
|
+
Connections between actions
|
|
305
|
+
"""
|
|
306
|
+
zoom: Zoom | None = None
|
|
307
|
+
"""
|
|
308
|
+
Canvas zoom and pan state
|
|
309
|
+
"""
|
|
310
|
+
createdAt: AwareDatetime | None = None
|
|
311
|
+
"""
|
|
312
|
+
Creation timestamp
|
|
313
|
+
"""
|
|
314
|
+
updatedAt: AwareDatetime | None = None
|
|
315
|
+
"""
|
|
316
|
+
Last update timestamp
|
|
317
|
+
"""
|
|
318
|
+
variables: FlowVariables | None = None
|
|
319
|
+
"""
|
|
320
|
+
Flow input and output variables
|
|
321
|
+
"""
|
|
322
|
+
parameters: FlowParameters | None = None
|
|
323
|
+
"""
|
|
324
|
+
Flow parameters for configuration
|
|
325
|
+
"""
|
|
326
|
+
environment: Environment | None = None
|
|
327
|
+
"""
|
|
328
|
+
Environment configuration
|
|
329
|
+
"""
|
|
330
|
+
globalVariables: list[GlobalVariable] | None = None
|
|
331
|
+
"""
|
|
332
|
+
Global variables available to the flow
|
|
333
|
+
"""
|
|
334
|
+
synced: bool | None = None
|
|
335
|
+
"""
|
|
336
|
+
Whether the flow is synced with server
|
|
337
|
+
"""
|
|
338
|
+
lastRun: AwareDatetime | None = None
|
|
339
|
+
"""
|
|
340
|
+
Last execution timestamp
|
|
341
|
+
"""
|
|
342
|
+
lastResult: LastResult | None = None
|
|
343
|
+
"""
|
|
344
|
+
Result of last execution
|
|
345
|
+
"""
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# generated by datamodel-codegen:
|
|
2
|
+
# filename: flow-validation.json
|
|
3
|
+
# timestamp: 2026-01-25T13:38:27+00:00
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from enum import StrEnum
|
|
8
|
+
from typing import Annotated
|
|
9
|
+
|
|
10
|
+
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Type(StrEnum):
|
|
14
|
+
"""
|
|
15
|
+
Type of warning
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
missing_selector = 'missing-selector'
|
|
19
|
+
infinite_loop = 'infinite-loop'
|
|
20
|
+
unreachable_node = 'unreachable-node'
|
|
21
|
+
missing_condition = 'missing-condition'
|
|
22
|
+
invalid_reference = 'invalid-reference'
|
|
23
|
+
missing_action_reference = 'missing-action-reference'
|
|
24
|
+
circular_dependency = 'circular-dependency'
|
|
25
|
+
duplicate_id = 'duplicate-id'
|
|
26
|
+
invalid_variable = 'invalid-variable'
|
|
27
|
+
missing_variable = 'missing-variable'
|
|
28
|
+
type_mismatch = 'type-mismatch'
|
|
29
|
+
performance_issue = 'performance-issue'
|
|
30
|
+
security_risk = 'security-risk'
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Category(StrEnum):
|
|
34
|
+
"""
|
|
35
|
+
Category of the warning
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
logic = 'logic'
|
|
39
|
+
performance = 'performance'
|
|
40
|
+
security = 'security'
|
|
41
|
+
usability = 'usability'
|
|
42
|
+
compatibility = 'compatibility'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class WarningSeverity(StrEnum):
|
|
46
|
+
"""
|
|
47
|
+
Severity level of the warning
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
minor = 'minor'
|
|
51
|
+
medium = 'medium'
|
|
52
|
+
critical = 'critical'
|
|
53
|
+
info = 'info'
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class LoopInfo(BaseModel):
|
|
57
|
+
"""
|
|
58
|
+
Information about a detected loop
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
model_config = ConfigDict(
|
|
62
|
+
populate_by_name=True,
|
|
63
|
+
)
|
|
64
|
+
nodes: list[str]
|
|
65
|
+
"""
|
|
66
|
+
Node IDs that form the loop
|
|
67
|
+
"""
|
|
68
|
+
hasExitCondition: bool
|
|
69
|
+
"""
|
|
70
|
+
Whether the loop has a proper exit condition
|
|
71
|
+
"""
|
|
72
|
+
severity: WarningSeverity
|
|
73
|
+
description: str
|
|
74
|
+
"""
|
|
75
|
+
Description of the loop issue
|
|
76
|
+
"""
|
|
77
|
+
maxIterations: int | None = None
|
|
78
|
+
"""
|
|
79
|
+
Maximum iterations if detectable
|
|
80
|
+
"""
|
|
81
|
+
isInfinite: bool | None = None
|
|
82
|
+
"""
|
|
83
|
+
Whether this appears to be an infinite loop
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class WarningsBySeverity(BaseModel):
|
|
88
|
+
"""
|
|
89
|
+
Count of warnings by severity
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
model_config = ConfigDict(
|
|
93
|
+
populate_by_name=True,
|
|
94
|
+
)
|
|
95
|
+
minor: Annotated[int | None, Field(ge=0)] = None
|
|
96
|
+
medium: Annotated[int | None, Field(ge=0)] = None
|
|
97
|
+
critical: Annotated[int | None, Field(ge=0)] = None
|
|
98
|
+
info: Annotated[int | None, Field(ge=0)] = None
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class ValidationSummary(BaseModel):
|
|
102
|
+
"""
|
|
103
|
+
Summary statistics of validation results
|
|
104
|
+
"""
|
|
105
|
+
|
|
106
|
+
model_config = ConfigDict(
|
|
107
|
+
populate_by_name=True,
|
|
108
|
+
)
|
|
109
|
+
totalNodes: Annotated[int, Field(ge=0)]
|
|
110
|
+
"""
|
|
111
|
+
Total number of nodes in the flow
|
|
112
|
+
"""
|
|
113
|
+
totalEdges: Annotated[int, Field(ge=0)]
|
|
114
|
+
"""
|
|
115
|
+
Total number of edges in the flow
|
|
116
|
+
"""
|
|
117
|
+
warningCount: Annotated[int, Field(ge=0)]
|
|
118
|
+
"""
|
|
119
|
+
Total number of warnings
|
|
120
|
+
"""
|
|
121
|
+
errorCount: Annotated[int, Field(ge=0)]
|
|
122
|
+
"""
|
|
123
|
+
Total number of errors
|
|
124
|
+
"""
|
|
125
|
+
criticalCount: Annotated[int | None, Field(ge=0)] = None
|
|
126
|
+
"""
|
|
127
|
+
Number of critical severity issues
|
|
128
|
+
"""
|
|
129
|
+
warningsByType: dict[str, int] | None = None
|
|
130
|
+
"""
|
|
131
|
+
Count of warnings by type
|
|
132
|
+
"""
|
|
133
|
+
warningsBySeverity: WarningsBySeverity | None = None
|
|
134
|
+
"""
|
|
135
|
+
Count of warnings by severity
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class ConfigValidation(BaseModel):
|
|
140
|
+
"""
|
|
141
|
+
Validation of node configuration
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
model_config = ConfigDict(
|
|
145
|
+
populate_by_name=True,
|
|
146
|
+
)
|
|
147
|
+
isValid: bool | None = None
|
|
148
|
+
missingFields: list[str] | None = None
|
|
149
|
+
invalidFields: list[str] | None = None
|
|
150
|
+
typeErrors: list[str] | None = None
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class FlowWarning(BaseModel):
|
|
154
|
+
"""
|
|
155
|
+
Flow validation warning or error
|
|
156
|
+
"""
|
|
157
|
+
|
|
158
|
+
model_config = ConfigDict(
|
|
159
|
+
populate_by_name=True,
|
|
160
|
+
)
|
|
161
|
+
id: str
|
|
162
|
+
"""
|
|
163
|
+
Unique warning identifier
|
|
164
|
+
"""
|
|
165
|
+
type: Type
|
|
166
|
+
"""
|
|
167
|
+
Type of warning
|
|
168
|
+
"""
|
|
169
|
+
severity: WarningSeverity
|
|
170
|
+
nodeId: str
|
|
171
|
+
"""
|
|
172
|
+
ID of the node that triggered the warning
|
|
173
|
+
"""
|
|
174
|
+
nodeName: str
|
|
175
|
+
"""
|
|
176
|
+
Name of the node that triggered the warning
|
|
177
|
+
"""
|
|
178
|
+
message: str
|
|
179
|
+
"""
|
|
180
|
+
Warning message
|
|
181
|
+
"""
|
|
182
|
+
description: str
|
|
183
|
+
"""
|
|
184
|
+
Detailed description of the warning
|
|
185
|
+
"""
|
|
186
|
+
affectedNodes: list[str] | None = None
|
|
187
|
+
"""
|
|
188
|
+
List of other affected node IDs
|
|
189
|
+
"""
|
|
190
|
+
suggestion: str | None = None
|
|
191
|
+
"""
|
|
192
|
+
Suggested fix for the warning
|
|
193
|
+
"""
|
|
194
|
+
category: Category | None = None
|
|
195
|
+
"""
|
|
196
|
+
Category of the warning
|
|
197
|
+
"""
|
|
198
|
+
createdAt: AwareDatetime | None = None
|
|
199
|
+
"""
|
|
200
|
+
When the warning was detected
|
|
201
|
+
"""
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class LoopDetectionResult(BaseModel):
|
|
205
|
+
"""
|
|
206
|
+
Result of loop detection analysis
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
model_config = ConfigDict(
|
|
210
|
+
populate_by_name=True,
|
|
211
|
+
)
|
|
212
|
+
hasLoops: bool
|
|
213
|
+
"""
|
|
214
|
+
Whether loops were detected in the flow
|
|
215
|
+
"""
|
|
216
|
+
loops: list[LoopInfo]
|
|
217
|
+
"""
|
|
218
|
+
Information about detected loops
|
|
219
|
+
"""
|
|
220
|
+
totalLoops: Annotated[int | None, Field(ge=0)] = None
|
|
221
|
+
"""
|
|
222
|
+
Total number of loops detected
|
|
223
|
+
"""
|
|
224
|
+
infiniteLoops: Annotated[int | None, Field(ge=0)] = None
|
|
225
|
+
"""
|
|
226
|
+
Number of potentially infinite loops
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
class FlowValidationResult(BaseModel):
|
|
231
|
+
"""
|
|
232
|
+
Complete result of flow validation
|
|
233
|
+
"""
|
|
234
|
+
|
|
235
|
+
model_config = ConfigDict(
|
|
236
|
+
populate_by_name=True,
|
|
237
|
+
)
|
|
238
|
+
flowId: str
|
|
239
|
+
"""
|
|
240
|
+
ID of the validated flow
|
|
241
|
+
"""
|
|
242
|
+
flowName: str | None = None
|
|
243
|
+
"""
|
|
244
|
+
Name of the validated flow
|
|
245
|
+
"""
|
|
246
|
+
isValid: bool
|
|
247
|
+
"""
|
|
248
|
+
Whether the flow is valid
|
|
249
|
+
"""
|
|
250
|
+
warnings: list[FlowWarning]
|
|
251
|
+
"""
|
|
252
|
+
List of warnings found
|
|
253
|
+
"""
|
|
254
|
+
errors: list[FlowWarning]
|
|
255
|
+
"""
|
|
256
|
+
List of errors found (critical warnings)
|
|
257
|
+
"""
|
|
258
|
+
summary: ValidationSummary
|
|
259
|
+
validatedAt: AwareDatetime | None = None
|
|
260
|
+
"""
|
|
261
|
+
When validation was performed
|
|
262
|
+
"""
|
|
263
|
+
validationTime: Annotated[float | None, Field(ge=0.0)] = None
|
|
264
|
+
"""
|
|
265
|
+
Time taken for validation in seconds
|
|
266
|
+
"""
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class NodeValidationResult(BaseModel):
|
|
270
|
+
"""
|
|
271
|
+
Validation result for a specific node
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
model_config = ConfigDict(
|
|
275
|
+
populate_by_name=True,
|
|
276
|
+
)
|
|
277
|
+
nodeId: str
|
|
278
|
+
"""
|
|
279
|
+
ID of the validated node
|
|
280
|
+
"""
|
|
281
|
+
nodeType: str
|
|
282
|
+
"""
|
|
283
|
+
Type of the node
|
|
284
|
+
"""
|
|
285
|
+
isValid: bool
|
|
286
|
+
"""
|
|
287
|
+
Whether the node is valid
|
|
288
|
+
"""
|
|
289
|
+
warnings: list[FlowWarning] | None = None
|
|
290
|
+
"""
|
|
291
|
+
Warnings specific to this node
|
|
292
|
+
"""
|
|
293
|
+
configValidation: ConfigValidation | None = None
|
|
294
|
+
"""
|
|
295
|
+
Validation of node configuration
|
|
296
|
+
"""
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
class FlowValidation(BaseModel):
|
|
300
|
+
model_config = ConfigDict(
|
|
301
|
+
populate_by_name=True,
|
|
302
|
+
)
|
|
303
|
+
warnings: list[FlowWarning] | None = None
|
|
304
|
+
loopDetections: list[LoopDetectionResult] | None = None
|
|
305
|
+
validationResults: list[FlowValidationResult] | None = None
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
class FlowValidationModels(BaseModel):
|
|
309
|
+
"""
|
|
310
|
+
Schema for flow validation warnings and errors
|
|
311
|
+
"""
|
|
312
|
+
|
|
313
|
+
model_config = ConfigDict(
|
|
314
|
+
populate_by_name=True,
|
|
315
|
+
)
|
|
316
|
+
flowValidation: FlowValidation | None = None
|