ソースを参照

fix(validation): improve variable handling and validation (#9578)

-LAN- 6 ヶ月 前
コミット
740a723072

+ 2 - 2
api/core/app/app_config/easy_ui_based_app/variables/manager.py

@@ -53,11 +53,11 @@ class BasicVariablesConfigManager:
                     VariableEntity(
                         type=variable_type,
                         variable=variable.get("variable"),
-                        description=variable.get("description", ""),
+                        description=variable.get("description") or "",
                         label=variable.get("label"),
                         required=variable.get("required", False),
                         max_length=variable.get("max_length"),
-                        options=variable.get("options", []),
+                        options=variable.get("options") or [],
                     )
                 )
 

+ 11 - 1
api/core/app/app_config/entities.py

@@ -2,7 +2,7 @@ from collections.abc import Sequence
 from enum import Enum
 from typing import Any, Optional
 
-from pydantic import BaseModel, Field
+from pydantic import BaseModel, Field, field_validator
 
 from core.file import FileExtraConfig, FileTransferMethod, FileType
 from core.model_runtime.entities.message_entities import PromptMessageRole
@@ -114,6 +114,16 @@ class VariableEntity(BaseModel):
     allowed_file_extensions: Sequence[str] = Field(default_factory=list)
     allowed_file_upload_methods: Sequence[FileTransferMethod] = Field(default_factory=list)
 
+    @field_validator("description", mode="before")
+    @classmethod
+    def convert_none_description(cls, v: Any) -> str:
+        return v or ""
+
+    @field_validator("options", mode="before")
+    @classmethod
+    def convert_none_options(cls, v: Any) -> Sequence[str]:
+        return v or []
+
 
 class ExternalDataVariableEntity(BaseModel):
     """

+ 1 - 1
api/core/tools/utils/workflow_configuration_sync.py

@@ -22,7 +22,7 @@ class WorkflowToolConfigurationUtils:
         if not start_node:
             return []
 
-        return [VariableEntity(**variable) for variable in start_node.get("data", {}).get("variables", [])]
+        return [VariableEntity.model_validate(variable) for variable in start_node.get("data", {}).get("variables", [])]
 
     @classmethod
     def check_is_synced(