fix(rnd): Fix broken list input pin execution ordering & unlinked dynamic pins on save (#8108)

This commit is contained in:
Zamil Majdy
2024-09-21 10:11:35 -05:00
committed by GitHub
parent ef7cfbb860
commit 62a3e1c127
3 changed files with 16 additions and 15 deletions

View File

@@ -23,7 +23,7 @@ class GetCurrentTimeBlock(Block):
{"trigger": "Hello", "format": "{time}"},
],
test_output=[
("time", time.strftime("%H:%M:%S")),
("time", lambda _: time.strftime("%H:%M:%S")),
],
)

View File

@@ -396,19 +396,19 @@ def merge_execution_input(data: BlockInput) -> BlockInput:
# Merge all input with <input_name>_$_<index> into a single list.
items = list(data.items())
list_input: list[Any] = []
for key, value in items:
if LIST_SPLIT not in key:
continue
name, index = key.split(LIST_SPLIT)
if not index.isdigit():
list_input.append((name, value, 0))
else:
list_input.append((name, value, int(index)))
raise ValueError(f"Invalid key: {key}, #{index} index must be an integer.")
for name, value, _ in sorted(list_input, key=lambda x: x[2]):
data[name] = data.get(name, [])
data[name].append(value)
if int(index) >= len(data[name]):
# Pad list with empty string on missing indices.
data[name].extend([""] * (int(index) - len(data[name]) + 1))
data[name][int(index)] = value
# Merge all input with <input_name>_#_<index> into a single dict.
for key, value in items:

View File

@@ -152,13 +152,13 @@ export function setNestedProperty(obj: any, path: string, value: any) {
export function removeEmptyStringsAndNulls(obj: any): any {
if (Array.isArray(obj)) {
// If obj is an array, recursively remove empty strings and nulls from its elements
return obj
.map((item) => removeEmptyStringsAndNulls(item))
.filter(
(item) =>
item !== null && (typeof item !== "string" || item.trim() !== ""),
);
// If obj is an array, recursively check each element,
// but element removal is avoided to prevent index changes.
return obj.map((item) =>
item === undefined || item === null
? ""
: removeEmptyStringsAndNulls(item),
);
} else if (typeof obj === "object" && obj !== null) {
// If obj is an object, recursively remove empty strings and nulls from its properties
for (const key in obj) {
@@ -166,7 +166,8 @@ export function removeEmptyStringsAndNulls(obj: any): any {
const value = obj[key];
if (
value === null ||
(typeof value === "string" && value.trim() === "")
value === undefined ||
(typeof value === "string" && value === "")
) {
delete obj[key];
} else {