griptape-nodes 0.66.2__py3-none-any.whl → 0.68.0__py3-none-any.whl
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.
- griptape_nodes/bootstrap/utils/python_subprocess_executor.py +17 -4
- griptape_nodes/common/node_executor.py +295 -18
- griptape_nodes/exe_types/core_types.py +28 -1
- griptape_nodes/exe_types/node_groups/__init__.py +2 -2
- griptape_nodes/exe_types/node_groups/base_iterative_node_group.py +81 -10
- griptape_nodes/exe_types/node_groups/base_node_group.py +64 -1
- griptape_nodes/exe_types/node_groups/subflow_node_group.py +0 -34
- griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_variant_parameter.py +152 -0
- griptape_nodes/exe_types/param_components/seed_parameter.py +3 -2
- griptape_nodes/exe_types/param_types/parameter_audio.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_bool.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_button.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_dict.py +151 -0
- griptape_nodes/exe_types/param_types/parameter_float.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_image.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_int.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_json.py +268 -0
- griptape_nodes/exe_types/param_types/parameter_number.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_range.py +393 -0
- griptape_nodes/exe_types/param_types/parameter_string.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_three_d.py +3 -0
- griptape_nodes/exe_types/param_types/parameter_video.py +3 -0
- griptape_nodes/retained_mode/events/library_events.py +2 -0
- griptape_nodes/retained_mode/events/parameter_events.py +89 -1
- griptape_nodes/retained_mode/managers/event_manager.py +176 -10
- griptape_nodes/retained_mode/managers/flow_manager.py +2 -1
- griptape_nodes/retained_mode/managers/library_manager.py +14 -4
- griptape_nodes/retained_mode/managers/node_manager.py +187 -7
- griptape_nodes/retained_mode/managers/workflow_manager.py +58 -16
- griptape_nodes/utils/file_utils.py +58 -0
- {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/METADATA +1 -1
- {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/RECORD +34 -30
- {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/WHEEL +1 -1
- {griptape_nodes-0.66.2.dist-info → griptape_nodes-0.68.0.dist-info}/entry_points.txt +0 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
"""ParameterRange component for list inputs with optional range slider UI options."""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Callable
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from griptape_nodes.exe_types.core_types import Parameter, ParameterMode, Trait
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ParameterRange(Parameter):
|
|
10
|
+
"""A specialized Parameter class for list inputs with optional range slider UI.
|
|
11
|
+
|
|
12
|
+
This class provides a convenient way to create list parameters. When the list
|
|
13
|
+
contains exactly 2 numeric values (int or float), you can enable the range_slider
|
|
14
|
+
UI option to display a range slider with customizations like min/max values,
|
|
15
|
+
step size, and label options. It exposes these UI options as direct properties
|
|
16
|
+
for easy runtime modification.
|
|
17
|
+
|
|
18
|
+
Example - General list:
|
|
19
|
+
param = ParameterRange(
|
|
20
|
+
name="items",
|
|
21
|
+
tooltip="List of items",
|
|
22
|
+
default_value=["a", "b", "c"]
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
Example - Range slider (for 2 numeric values):
|
|
26
|
+
param = ParameterRange(
|
|
27
|
+
name="range",
|
|
28
|
+
tooltip="Select a range",
|
|
29
|
+
range_slider=True,
|
|
30
|
+
min_val=0,
|
|
31
|
+
max_val=100,
|
|
32
|
+
step=1,
|
|
33
|
+
min_label="Minimum",
|
|
34
|
+
max_label="Maximum"
|
|
35
|
+
)
|
|
36
|
+
param.max_val = 200 # Change UI options at runtime
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
def __init__( # noqa: PLR0913
|
|
40
|
+
self,
|
|
41
|
+
name: str,
|
|
42
|
+
tooltip: str | None = None,
|
|
43
|
+
*,
|
|
44
|
+
type: str = "list", # noqa: A002, ARG002
|
|
45
|
+
input_types: list[str] | None = None, # noqa: ARG002
|
|
46
|
+
output_type: str = "list", # noqa: ARG002
|
|
47
|
+
default_value: Any = None,
|
|
48
|
+
tooltip_as_input: str | None = None,
|
|
49
|
+
tooltip_as_property: str | None = None,
|
|
50
|
+
tooltip_as_output: str | None = None,
|
|
51
|
+
allowed_modes: set[ParameterMode] | None = None,
|
|
52
|
+
traits: set[type[Trait] | Trait] | None = None,
|
|
53
|
+
converters: list[Callable[[Any], Any]] | None = None,
|
|
54
|
+
validators: list[Callable[[Parameter, Any], None]] | None = None,
|
|
55
|
+
ui_options: dict | None = None,
|
|
56
|
+
range_slider: bool = True,
|
|
57
|
+
min_val: float = 0,
|
|
58
|
+
max_val: float = 100,
|
|
59
|
+
step: float = 1,
|
|
60
|
+
min_label: str = "min",
|
|
61
|
+
max_label: str = "max",
|
|
62
|
+
hide_range_labels: bool = False,
|
|
63
|
+
hide_range_parameters: bool = False,
|
|
64
|
+
accept_any: bool = True,
|
|
65
|
+
hide: bool | None = None,
|
|
66
|
+
hide_label: bool = False,
|
|
67
|
+
hide_property: bool = False,
|
|
68
|
+
allow_input: bool = True,
|
|
69
|
+
allow_property: bool = True,
|
|
70
|
+
allow_output: bool = True,
|
|
71
|
+
settable: bool = True,
|
|
72
|
+
serializable: bool = True,
|
|
73
|
+
user_defined: bool = False,
|
|
74
|
+
private: bool = False,
|
|
75
|
+
element_id: str | None = None,
|
|
76
|
+
element_type: str | None = None,
|
|
77
|
+
parent_container_name: str | None = None,
|
|
78
|
+
) -> None:
|
|
79
|
+
"""Initialize a list parameter with optional range slider UI options.
|
|
80
|
+
|
|
81
|
+
This is a general-purpose list parameter. The range_slider option is only
|
|
82
|
+
applicable when the list contains exactly 2 numeric values (int or float).
|
|
83
|
+
When range_slider is enabled, the UI will display a range slider instead
|
|
84
|
+
of a standard list input.
|
|
85
|
+
|
|
86
|
+
Args:
|
|
87
|
+
name: Parameter name
|
|
88
|
+
tooltip: Parameter tooltip
|
|
89
|
+
type: Parameter type (ignored, always "list" for ParameterRange)
|
|
90
|
+
input_types: Allowed input types (ignored, set based on accept_any)
|
|
91
|
+
output_type: Output type (ignored, always "list" for ParameterRange)
|
|
92
|
+
default_value: Default parameter value
|
|
93
|
+
tooltip_as_input: Tooltip for input mode
|
|
94
|
+
tooltip_as_property: Tooltip for property mode
|
|
95
|
+
tooltip_as_output: Tooltip for output mode
|
|
96
|
+
allowed_modes: Allowed parameter modes
|
|
97
|
+
traits: Parameter traits
|
|
98
|
+
converters: Parameter converters
|
|
99
|
+
validators: Parameter validators
|
|
100
|
+
ui_options: Dictionary of UI options
|
|
101
|
+
range_slider: Whether to enable range slider UI (only for 2 numeric values)
|
|
102
|
+
min_val: Minimum value for range slider (default: 0)
|
|
103
|
+
max_val: Maximum value for range slider (default: 100)
|
|
104
|
+
step: Step size for range slider (default: 1)
|
|
105
|
+
min_label: Label for minimum value (default: "min")
|
|
106
|
+
max_label: Label for maximum value (default: "max")
|
|
107
|
+
hide_range_labels: Whether to hide range labels (default: False)
|
|
108
|
+
hide_range_parameters: Whether to hide the range parameters (default: False)
|
|
109
|
+
accept_any: Whether to accept any input type and convert to list (default: True)
|
|
110
|
+
hide: Whether to hide the entire parameter
|
|
111
|
+
hide_label: Whether to hide the parameter label
|
|
112
|
+
hide_property: Whether to hide the parameter in property mode
|
|
113
|
+
allow_input: Whether to allow input mode
|
|
114
|
+
allow_property: Whether to allow property mode
|
|
115
|
+
allow_output: Whether to allow output mode
|
|
116
|
+
settable: Whether the parameter is settable
|
|
117
|
+
serializable: Whether the parameter is serializable
|
|
118
|
+
user_defined: Whether the parameter is user-defined
|
|
119
|
+
private: Whether this parameter is private
|
|
120
|
+
element_id: Element ID
|
|
121
|
+
element_type: Element type
|
|
122
|
+
parent_container_name: Name of parent container
|
|
123
|
+
"""
|
|
124
|
+
# Build ui_options dictionary from the provided UI-specific parameters
|
|
125
|
+
if ui_options is None:
|
|
126
|
+
ui_options = {}
|
|
127
|
+
else:
|
|
128
|
+
ui_options = ui_options.copy()
|
|
129
|
+
|
|
130
|
+
# Add list-specific UI options with nested range_slider structure
|
|
131
|
+
if range_slider:
|
|
132
|
+
ui_options["range_slider"] = {
|
|
133
|
+
"min_value": min_val,
|
|
134
|
+
"max_value": max_val,
|
|
135
|
+
"step": step,
|
|
136
|
+
"min_label": min_label,
|
|
137
|
+
"max_label": max_label,
|
|
138
|
+
"hide_range_labels": hide_range_labels,
|
|
139
|
+
"hide_range_parameters": hide_range_parameters,
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# Set up list conversion based on accept_any setting
|
|
143
|
+
if converters is None:
|
|
144
|
+
existing_converters = []
|
|
145
|
+
else:
|
|
146
|
+
existing_converters = converters
|
|
147
|
+
|
|
148
|
+
if accept_any:
|
|
149
|
+
final_input_types = ["any"]
|
|
150
|
+
final_converters = [self._accept_any, *existing_converters]
|
|
151
|
+
else:
|
|
152
|
+
final_input_types = ["list"]
|
|
153
|
+
final_converters = existing_converters
|
|
154
|
+
|
|
155
|
+
# Call parent with explicit parameters, following ParameterString pattern
|
|
156
|
+
super().__init__(
|
|
157
|
+
name=name,
|
|
158
|
+
tooltip=tooltip,
|
|
159
|
+
type="list", # Always a list type for ParameterRange
|
|
160
|
+
input_types=final_input_types,
|
|
161
|
+
output_type="list", # Always output as list
|
|
162
|
+
default_value=default_value,
|
|
163
|
+
tooltip_as_input=tooltip_as_input,
|
|
164
|
+
tooltip_as_property=tooltip_as_property,
|
|
165
|
+
tooltip_as_output=tooltip_as_output,
|
|
166
|
+
allowed_modes=allowed_modes,
|
|
167
|
+
traits=traits,
|
|
168
|
+
converters=final_converters,
|
|
169
|
+
validators=validators,
|
|
170
|
+
ui_options=ui_options,
|
|
171
|
+
hide=hide,
|
|
172
|
+
hide_label=hide_label,
|
|
173
|
+
hide_property=hide_property,
|
|
174
|
+
allow_input=allow_input,
|
|
175
|
+
allow_property=allow_property,
|
|
176
|
+
allow_output=allow_output,
|
|
177
|
+
settable=settable,
|
|
178
|
+
serializable=serializable,
|
|
179
|
+
user_defined=user_defined,
|
|
180
|
+
private=private,
|
|
181
|
+
element_id=element_id,
|
|
182
|
+
element_type=element_type,
|
|
183
|
+
parent_container_name=parent_container_name,
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
def _accept_any(self, value: Any) -> list:
|
|
187
|
+
"""Convert any input value to a list.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
value: The value to convert to list
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
List representation of the value
|
|
194
|
+
"""
|
|
195
|
+
if value is None:
|
|
196
|
+
return []
|
|
197
|
+
if isinstance(value, list):
|
|
198
|
+
return value
|
|
199
|
+
return [value]
|
|
200
|
+
|
|
201
|
+
@property
|
|
202
|
+
def range_slider(self) -> bool:
|
|
203
|
+
"""Get whether range slider UI is enabled.
|
|
204
|
+
|
|
205
|
+
Returns:
|
|
206
|
+
True if range slider is enabled, False otherwise
|
|
207
|
+
"""
|
|
208
|
+
return "range_slider" in self.ui_options and isinstance(self.ui_options["range_slider"], dict)
|
|
209
|
+
|
|
210
|
+
@range_slider.setter
|
|
211
|
+
def range_slider(self, value: bool) -> None:
|
|
212
|
+
"""Set whether range slider UI is enabled.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
value: Whether to enable range slider
|
|
216
|
+
"""
|
|
217
|
+
if value:
|
|
218
|
+
# Initialize range_slider object if it doesn't exist
|
|
219
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
220
|
+
self.ui_options["range_slider"] = {
|
|
221
|
+
"min_value": 0,
|
|
222
|
+
"max_value": 100,
|
|
223
|
+
"step": 1,
|
|
224
|
+
"min_label": "min",
|
|
225
|
+
"max_label": "max",
|
|
226
|
+
"hide_range_labels": False,
|
|
227
|
+
"hide_range_parameters": False,
|
|
228
|
+
}
|
|
229
|
+
else:
|
|
230
|
+
ui_options = self.ui_options.copy()
|
|
231
|
+
ui_options.pop("range_slider", None)
|
|
232
|
+
self.ui_options = ui_options
|
|
233
|
+
|
|
234
|
+
@property
|
|
235
|
+
def min_val(self) -> float:
|
|
236
|
+
"""Get the minimum value for the range slider.
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
The minimum value
|
|
240
|
+
"""
|
|
241
|
+
range_slider = self.ui_options.get("range_slider")
|
|
242
|
+
if isinstance(range_slider, dict):
|
|
243
|
+
return range_slider.get("min_value", 0)
|
|
244
|
+
return 0
|
|
245
|
+
|
|
246
|
+
@min_val.setter
|
|
247
|
+
def min_val(self, value: float) -> None:
|
|
248
|
+
"""Set the minimum value for the range slider.
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
value: The minimum value to use
|
|
252
|
+
"""
|
|
253
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
254
|
+
self.range_slider = True # Initialize range_slider object
|
|
255
|
+
self.ui_options["range_slider"]["min_value"] = value
|
|
256
|
+
|
|
257
|
+
@property
|
|
258
|
+
def max_val(self) -> float:
|
|
259
|
+
"""Get the maximum value for the range slider.
|
|
260
|
+
|
|
261
|
+
Returns:
|
|
262
|
+
The maximum value
|
|
263
|
+
"""
|
|
264
|
+
range_slider = self.ui_options.get("range_slider")
|
|
265
|
+
if isinstance(range_slider, dict):
|
|
266
|
+
return range_slider.get("max_value", 100)
|
|
267
|
+
return 100
|
|
268
|
+
|
|
269
|
+
@max_val.setter
|
|
270
|
+
def max_val(self, value: float) -> None:
|
|
271
|
+
"""Set the maximum value for the range slider.
|
|
272
|
+
|
|
273
|
+
Args:
|
|
274
|
+
value: The maximum value to use
|
|
275
|
+
"""
|
|
276
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
277
|
+
self.range_slider = True # Initialize range_slider object
|
|
278
|
+
self.ui_options["range_slider"]["max_value"] = value
|
|
279
|
+
|
|
280
|
+
@property
|
|
281
|
+
def step(self) -> float:
|
|
282
|
+
"""Get the step size for the range slider.
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
The step size
|
|
286
|
+
"""
|
|
287
|
+
range_slider = self.ui_options.get("range_slider")
|
|
288
|
+
if isinstance(range_slider, dict):
|
|
289
|
+
return range_slider.get("step", 1)
|
|
290
|
+
return 1
|
|
291
|
+
|
|
292
|
+
@step.setter
|
|
293
|
+
def step(self, value: float) -> None:
|
|
294
|
+
"""Set the step size for the range slider.
|
|
295
|
+
|
|
296
|
+
Args:
|
|
297
|
+
value: The step size to use
|
|
298
|
+
"""
|
|
299
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
300
|
+
self.range_slider = True # Initialize range_slider object
|
|
301
|
+
self.ui_options["range_slider"]["step"] = value
|
|
302
|
+
|
|
303
|
+
@property
|
|
304
|
+
def min_label(self) -> str:
|
|
305
|
+
"""Get the label for the minimum value.
|
|
306
|
+
|
|
307
|
+
Returns:
|
|
308
|
+
The minimum label
|
|
309
|
+
"""
|
|
310
|
+
range_slider = self.ui_options.get("range_slider")
|
|
311
|
+
if isinstance(range_slider, dict):
|
|
312
|
+
return range_slider.get("min_label", "min")
|
|
313
|
+
return "min"
|
|
314
|
+
|
|
315
|
+
@min_label.setter
|
|
316
|
+
def min_label(self, value: str) -> None:
|
|
317
|
+
"""Set the label for the minimum value.
|
|
318
|
+
|
|
319
|
+
Args:
|
|
320
|
+
value: The minimum label to use
|
|
321
|
+
"""
|
|
322
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
323
|
+
self.range_slider = True # Initialize range_slider object
|
|
324
|
+
self.ui_options["range_slider"]["min_label"] = value
|
|
325
|
+
|
|
326
|
+
@property
|
|
327
|
+
def max_label(self) -> str:
|
|
328
|
+
"""Get the label for the maximum value.
|
|
329
|
+
|
|
330
|
+
Returns:
|
|
331
|
+
The maximum label
|
|
332
|
+
"""
|
|
333
|
+
range_slider = self.ui_options.get("range_slider")
|
|
334
|
+
if isinstance(range_slider, dict):
|
|
335
|
+
return range_slider.get("max_label", "max")
|
|
336
|
+
return "max"
|
|
337
|
+
|
|
338
|
+
@max_label.setter
|
|
339
|
+
def max_label(self, value: str) -> None:
|
|
340
|
+
"""Set the label for the maximum value.
|
|
341
|
+
|
|
342
|
+
Args:
|
|
343
|
+
value: The maximum label to use
|
|
344
|
+
"""
|
|
345
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
346
|
+
self.range_slider = True # Initialize range_slider object
|
|
347
|
+
self.ui_options["range_slider"]["max_label"] = value
|
|
348
|
+
|
|
349
|
+
@property
|
|
350
|
+
def hide_range_labels(self) -> bool:
|
|
351
|
+
"""Get whether range labels are hidden.
|
|
352
|
+
|
|
353
|
+
Returns:
|
|
354
|
+
True if range labels are hidden, False otherwise
|
|
355
|
+
"""
|
|
356
|
+
range_slider = self.ui_options.get("range_slider")
|
|
357
|
+
if isinstance(range_slider, dict):
|
|
358
|
+
return range_slider.get("hide_range_labels", True)
|
|
359
|
+
return True
|
|
360
|
+
|
|
361
|
+
@hide_range_labels.setter
|
|
362
|
+
def hide_range_labels(self, value: bool) -> None:
|
|
363
|
+
"""Set whether to hide range labels.
|
|
364
|
+
|
|
365
|
+
Args:
|
|
366
|
+
value: Whether to hide range labels
|
|
367
|
+
"""
|
|
368
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
369
|
+
self.range_slider = True # Initialize range_slider object
|
|
370
|
+
self.ui_options["range_slider"]["hide_range_labels"] = value
|
|
371
|
+
|
|
372
|
+
@property
|
|
373
|
+
def hide_range_parameters(self) -> bool:
|
|
374
|
+
"""Get whether the range parameters are hidden.
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
True if range parameters are hidden, False otherwise
|
|
378
|
+
"""
|
|
379
|
+
range_slider = self.ui_options.get("range_slider")
|
|
380
|
+
if isinstance(range_slider, dict):
|
|
381
|
+
return range_slider.get("hide_range_parameters", False)
|
|
382
|
+
return False
|
|
383
|
+
|
|
384
|
+
@hide_range_parameters.setter
|
|
385
|
+
def hide_range_parameters(self, value: bool) -> None:
|
|
386
|
+
"""Set whether to hide the range parameters.
|
|
387
|
+
|
|
388
|
+
Args:
|
|
389
|
+
value: Whether to hide the range parameters
|
|
390
|
+
"""
|
|
391
|
+
if "range_slider" not in self.ui_options or not isinstance(self.ui_options["range_slider"], dict):
|
|
392
|
+
self.range_slider = True # Initialize range_slider object
|
|
393
|
+
self.ui_options["range_slider"]["hide_range_parameters"] = value
|
|
@@ -55,6 +55,7 @@ class ParameterString(Parameter):
|
|
|
55
55
|
settable: bool = True,
|
|
56
56
|
serializable: bool = True,
|
|
57
57
|
user_defined: bool = False,
|
|
58
|
+
private: bool = False,
|
|
58
59
|
element_id: str | None = None,
|
|
59
60
|
element_type: str | None = None,
|
|
60
61
|
parent_container_name: str | None = None,
|
|
@@ -90,6 +91,7 @@ class ParameterString(Parameter):
|
|
|
90
91
|
settable: Whether the parameter is settable
|
|
91
92
|
serializable: Whether the parameter is serializable
|
|
92
93
|
user_defined: Whether the parameter is user-defined
|
|
94
|
+
private: Whether this parameter is private
|
|
93
95
|
element_id: Element ID
|
|
94
96
|
element_type: Element type
|
|
95
97
|
parent_container_name: Name of parent container
|
|
@@ -148,6 +150,7 @@ class ParameterString(Parameter):
|
|
|
148
150
|
settable=settable,
|
|
149
151
|
serializable=serializable,
|
|
150
152
|
user_defined=user_defined,
|
|
153
|
+
private=private,
|
|
151
154
|
element_id=element_id,
|
|
152
155
|
element_type=element_type,
|
|
153
156
|
parent_container_name=parent_container_name,
|
|
@@ -53,6 +53,7 @@ class Parameter3D(Parameter):
|
|
|
53
53
|
settable: bool = True,
|
|
54
54
|
serializable: bool = True,
|
|
55
55
|
user_defined: bool = False,
|
|
56
|
+
private: bool = False,
|
|
56
57
|
element_id: str | None = None,
|
|
57
58
|
element_type: str | None = None,
|
|
58
59
|
parent_container_name: str | None = None,
|
|
@@ -87,6 +88,7 @@ class Parameter3D(Parameter):
|
|
|
87
88
|
settable: Whether the parameter is settable
|
|
88
89
|
serializable: Whether the parameter is serializable
|
|
89
90
|
user_defined: Whether the parameter is user-defined
|
|
91
|
+
private: Whether this parameter is private
|
|
90
92
|
element_id: Element ID
|
|
91
93
|
element_type: Element type
|
|
92
94
|
parent_container_name: Name of parent container
|
|
@@ -140,6 +142,7 @@ class Parameter3D(Parameter):
|
|
|
140
142
|
settable=settable,
|
|
141
143
|
serializable=serializable,
|
|
142
144
|
user_defined=user_defined,
|
|
145
|
+
private=private,
|
|
143
146
|
element_id=element_id,
|
|
144
147
|
element_type=element_type,
|
|
145
148
|
parent_container_name=parent_container_name,
|
|
@@ -55,6 +55,7 @@ class ParameterVideo(Parameter):
|
|
|
55
55
|
settable: bool = True,
|
|
56
56
|
serializable: bool = True,
|
|
57
57
|
user_defined: bool = False,
|
|
58
|
+
private: bool = False,
|
|
58
59
|
element_id: str | None = None,
|
|
59
60
|
element_type: str | None = None,
|
|
60
61
|
parent_container_name: str | None = None,
|
|
@@ -90,6 +91,7 @@ class ParameterVideo(Parameter):
|
|
|
90
91
|
settable: Whether the parameter is settable
|
|
91
92
|
serializable: Whether the parameter is serializable
|
|
92
93
|
user_defined: Whether the parameter is user-defined
|
|
94
|
+
private: Whether this parameter is private
|
|
93
95
|
element_id: Element ID
|
|
94
96
|
element_type: Element type
|
|
95
97
|
parent_container_name: Name of parent container
|
|
@@ -145,6 +147,7 @@ class ParameterVideo(Parameter):
|
|
|
145
147
|
settable=settable,
|
|
146
148
|
serializable=serializable,
|
|
147
149
|
user_defined=user_defined,
|
|
150
|
+
private=private,
|
|
148
151
|
element_id=element_id,
|
|
149
152
|
element_type=element_type,
|
|
150
153
|
parent_container_name=parent_container_name,
|
|
@@ -352,9 +352,11 @@ class RegisterLibraryFromFileResultSuccess(WorkflowAlteredMixin, ResultPayloadSu
|
|
|
352
352
|
|
|
353
353
|
Args:
|
|
354
354
|
library_name: Name of the registered library
|
|
355
|
+
was_already_loaded: True if the library was already loaded, False if it was loaded by this request
|
|
355
356
|
"""
|
|
356
357
|
|
|
357
358
|
library_name: str
|
|
359
|
+
was_already_loaded: bool = False
|
|
358
360
|
|
|
359
361
|
|
|
360
362
|
@dataclass
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
4
|
from typing import TYPE_CHECKING, Any, NamedTuple
|
|
5
5
|
|
|
6
6
|
from pydantic import Field
|
|
@@ -141,6 +141,92 @@ class RemoveParameterFromNodeResultFailure(ResultPayloadFailure):
|
|
|
141
141
|
"""Parameter removal failed. Common causes: node not found, parameter not found, removal not allowed."""
|
|
142
142
|
|
|
143
143
|
|
|
144
|
+
@dataclass
|
|
145
|
+
@PayloadRegistry.register
|
|
146
|
+
class AddParameterGroupToNodeRequest(RequestPayload):
|
|
147
|
+
"""Add a new ParameterGroup to a node.
|
|
148
|
+
|
|
149
|
+
Use when: Dynamically organizing parameters into collapsible groups,
|
|
150
|
+
structuring node interfaces, building nodes with categorized parameters.
|
|
151
|
+
|
|
152
|
+
Args:
|
|
153
|
+
node_name: Name of the node to add group to (None for current context)
|
|
154
|
+
group_name: Name of the new parameter group
|
|
155
|
+
parent_element_name: Name of parent element if nested (None for root level)
|
|
156
|
+
ui_options: UI configuration options (e.g., {"collapsed": True})
|
|
157
|
+
is_user_defined: Whether this is a user-defined group (affects serialization)
|
|
158
|
+
initial_setup: Skip setup work when loading from file
|
|
159
|
+
|
|
160
|
+
Results: AddParameterGroupToNodeResultSuccess | AddParameterGroupToNodeResultFailure
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
group_name: str
|
|
164
|
+
node_name: str | None = None
|
|
165
|
+
parent_element_name: str | None = None
|
|
166
|
+
ui_options: dict = field(default_factory=dict)
|
|
167
|
+
is_user_defined: bool = True
|
|
168
|
+
initial_setup: bool = False
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@dataclass
|
|
172
|
+
@PayloadRegistry.register
|
|
173
|
+
class AddParameterGroupToNodeResultSuccess(WorkflowAlteredMixin, ResultPayloadSuccess):
|
|
174
|
+
"""ParameterGroup added successfully to node.
|
|
175
|
+
|
|
176
|
+
Args:
|
|
177
|
+
group_name: Name of the new parameter group
|
|
178
|
+
node_name: Name of the node group was added to
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
group_name: str
|
|
182
|
+
node_name: str
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
@dataclass
|
|
186
|
+
@PayloadRegistry.register
|
|
187
|
+
class AddParameterGroupToNodeResultFailure(ResultPayloadFailure):
|
|
188
|
+
"""ParameterGroup addition failed. Common causes: node not found, invalid group name, group already exists."""
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
@dataclass
|
|
192
|
+
@PayloadRegistry.register
|
|
193
|
+
class AlterParameterGroupDetailsRequest(RequestPayload):
|
|
194
|
+
"""Alter the details and configuration of a ParameterGroup.
|
|
195
|
+
|
|
196
|
+
Use when: Modifying ParameterGroup UI options (collapsed state, visibility, etc.),
|
|
197
|
+
updating group configuration after creation, implementing save/load of group state changes.
|
|
198
|
+
|
|
199
|
+
Args:
|
|
200
|
+
group_name: Name of the ParameterGroup to alter
|
|
201
|
+
node_name: Name of the node containing the group (None for current context)
|
|
202
|
+
ui_options: New UI configuration options
|
|
203
|
+
initial_setup: Skip setup work when loading from file
|
|
204
|
+
|
|
205
|
+
Results: AlterParameterGroupDetailsResultSuccess | AlterParameterGroupDetailsResultFailure
|
|
206
|
+
"""
|
|
207
|
+
|
|
208
|
+
group_name: str
|
|
209
|
+
node_name: str | None = None
|
|
210
|
+
ui_options: dict | None = None
|
|
211
|
+
initial_setup: bool = False
|
|
212
|
+
|
|
213
|
+
@classmethod
|
|
214
|
+
def relevant_parameters(cls) -> list[str]:
|
|
215
|
+
return ["group_name", "node_name", "ui_options"]
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@dataclass
|
|
219
|
+
@PayloadRegistry.register
|
|
220
|
+
class AlterParameterGroupDetailsResultSuccess(WorkflowAlteredMixin, ResultPayloadSuccess):
|
|
221
|
+
"""ParameterGroup details altered successfully."""
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
@dataclass
|
|
225
|
+
@PayloadRegistry.register
|
|
226
|
+
class AlterParameterGroupDetailsResultFailure(ResultPayloadFailure):
|
|
227
|
+
"""ParameterGroup details alteration failed. Common causes: node not found, group not found."""
|
|
228
|
+
|
|
229
|
+
|
|
144
230
|
@dataclass
|
|
145
231
|
@PayloadRegistry.register
|
|
146
232
|
class SetParameterValueRequest(RequestPayload):
|
|
@@ -235,6 +321,7 @@ class GetParameterDetailsResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuc
|
|
|
235
321
|
mode_allowed_input/property/output: Which modes are allowed
|
|
236
322
|
is_user_defined: Whether this is a user-defined parameter
|
|
237
323
|
settable: Whether parameter can be set directly by the user or not (None for non-Parameters)
|
|
324
|
+
private: Whether this parameter is private
|
|
238
325
|
ui_options: UI configuration options
|
|
239
326
|
"""
|
|
240
327
|
|
|
@@ -252,6 +339,7 @@ class GetParameterDetailsResultSuccess(WorkflowNotAlteredMixin, ResultPayloadSuc
|
|
|
252
339
|
mode_allowed_output: bool
|
|
253
340
|
is_user_defined: bool
|
|
254
341
|
settable: bool | None
|
|
342
|
+
private: bool
|
|
255
343
|
ui_options: dict | None
|
|
256
344
|
|
|
257
345
|
|