From 0fab5ea3d3a4b3555b04d3bfb3bc6d257194aae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Wed, 15 Oct 2025 09:45:03 +0200 Subject: [PATCH] fix(editor): Disallow drag-and-drop for non-immediate-ancestors of Python code node (#20773) --- .../components/CodeNodeEditor/utils.test.ts | 30 +++++++++++++++++++ .../components/CodeNodeEditor/utils.ts | 3 ++ 2 files changed, 33 insertions(+) diff --git a/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.test.ts b/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.test.ts index 1a738706116..0bfeb20aaba 100644 --- a/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.test.ts +++ b/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.test.ts @@ -123,6 +123,36 @@ const y = f({ a: 'c' }) valueToInsert('{{ $json.foo.bar[0].baz }}', 'pythonNative', 'runOnceForEachItem'), ).toBe('{{ _item["json"]["foo"]["bar"][0]["baz"] }}'); }); + + it('should return empty string for specific node references (single quotes), runOnceForAllItems', () => { + expect( + valueToInsert( + "{{ $('Some Previous Node').item.json.foo.bar[0].baz }}", + 'pythonNative', + 'runOnceForAllItems', + ), + ).toBe(''); + }); + + it('should return empty string for specific node references (double quotes), runOnceForAllItems', () => { + expect( + valueToInsert( + '{{ $("Some Previous Node").item.json.foo.bar[0].baz }}', + 'pythonNative', + 'runOnceForAllItems', + ), + ).toBe(''); + }); + + it('should return empty string for specific node references, runOnceForEachItem', () => { + expect( + valueToInsert( + "{{ $('Some Previous Node').item.json.foo.bar[0].baz }}", + 'pythonNative', + 'runOnceForEachItem', + ), + ).toBe(''); + }); }); }); }); diff --git a/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.ts b/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.ts index d752eafe9e5..d152b7ce6f3 100644 --- a/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.ts +++ b/packages/frontend/editor-ui/src/features/editors/components/CodeNodeEditor/utils.ts @@ -67,6 +67,9 @@ const toBracketNotation = (input: string): string => { }; const pythonInsert = (value: string, mode: CodeExecutionMode): string => { + // Python supports only direct parent node references + if (value.includes('$(')) return ''; + const base = mode === 'runOnceForAllItems' ? value.replace('$json', '_items[0]["json"]')