Переглянути джерело

fix(variable_pool): handle invalid attributes in variable lookup (#9646)

-LAN- 6 місяців тому
батько
коміт
d5a93a6400

+ 8 - 4
api/core/workflow/entities/variable_pool.py

@@ -124,11 +124,15 @@ class VariablePool(BaseModel):
 
         if value is None:
             selector, attr = selector[:-1], selector[-1]
+            # Python support `attr in FileAttribute` after 3.12
+            if attr not in {item.value for item in FileAttribute}:
+                return None
             value = self.get(selector)
-            if isinstance(value, FileSegment):
-                attr = FileAttribute(attr)
-                attr_value = file_manager.get_attr(file=value.value, attr=attr)
-                return variable_factory.build_segment(attr_value)
+            if not isinstance(value, FileSegment):
+                return None
+            attr = FileAttribute(attr)
+            attr_value = file_manager.get_attr(file=value.value, attr=attr)
+            return variable_factory.build_segment(attr_value)
 
         return value
 

+ 2 - 2
api/tests/unit_tests/core/workflow/test_variable_pool.py

@@ -33,8 +33,8 @@ def test_get_file_attribute(pool, file):
     assert result.value == file.filename
 
     # Test getting a non-existent attribute
-    with pytest.raises(ValueError):
-        pool.get(("node_1", "file_var", "non_existent_attr"))
+    result = pool.get(("node_1", "file_var", "non_existent_attr"))
+    assert result is None
 
 
 def test_use_long_selector(pool):