فهرست منبع

refactor(validation): improve input validation logic (#10175)

-LAN- 5 ماه پیش
والد
کامیت
61da0f08dd
1فایلهای تغییر یافته به همراه26 افزوده شده و 19 حذف شده
  1. 26 19
      api/core/app/apps/base_app_generator.py

+ 26 - 19
api/core/app/apps/base_app_generator.py

@@ -76,6 +76,7 @@ class BaseAppGenerator:
 
     def _validate_input(self, *, inputs: Mapping[str, Any], var: "VariableEntity"):
         user_input_value = inputs.get(var.variable)
+
         if not user_input_value:
             if var.required:
                 raise ValueError(f"{var.variable} is required in input form")
@@ -88,6 +89,7 @@ class BaseAppGenerator:
             VariableEntityType.PARAGRAPH,
         } and not isinstance(user_input_value, str):
             raise ValueError(f"(type '{var.type}') {var.variable} in input form must be a string")
+
         if var.type == VariableEntityType.NUMBER and isinstance(user_input_value, str):
             # may raise ValueError if user_input_value is not a valid number
             try:
@@ -97,25 +99,30 @@ class BaseAppGenerator:
                     return int(user_input_value)
             except ValueError:
                 raise ValueError(f"{var.variable} in input form must be a valid number")
-        if var.type == VariableEntityType.SELECT:
-            options = var.options
-            if user_input_value not in options:
-                raise ValueError(f"{var.variable} in input form must be one of the following: {options}")
-        elif var.type in {VariableEntityType.TEXT_INPUT, VariableEntityType.PARAGRAPH}:
-            if var.max_length and len(user_input_value) > var.max_length:
-                raise ValueError(f"{var.variable} in input form must be less than {var.max_length} characters")
-        elif var.type == VariableEntityType.FILE:
-            if not isinstance(user_input_value, dict) and not isinstance(user_input_value, File):
-                raise ValueError(f"{var.variable} in input form must be a file")
-        elif var.type == VariableEntityType.FILE_LIST:
-            if not (
-                isinstance(user_input_value, list)
-                and (
-                    all(isinstance(item, dict) for item in user_input_value)
-                    or all(isinstance(item, File) for item in user_input_value)
-                )
-            ):
-                raise ValueError(f"{var.variable} in input form must be a list of files")
+
+        match var.type:
+            case VariableEntityType.SELECT:
+                if user_input_value not in var.options:
+                    raise ValueError(f"{var.variable} in input form must be one of the following: {var.options}")
+            case VariableEntityType.TEXT_INPUT | VariableEntityType.PARAGRAPH:
+                if var.max_length and len(user_input_value) > var.max_length:
+                    raise ValueError(f"{var.variable} in input form must be less than {var.max_length} characters")
+            case VariableEntityType.FILE:
+                if not isinstance(user_input_value, dict) and not isinstance(user_input_value, File):
+                    raise ValueError(f"{var.variable} in input form must be a file")
+            case VariableEntityType.FILE_LIST:
+                # if number of files exceeds the limit, raise ValueError
+                if not (
+                    isinstance(user_input_value, list)
+                    and (
+                        all(isinstance(item, dict) for item in user_input_value)
+                        or all(isinstance(item, File) for item in user_input_value)
+                    )
+                ):
+                    raise ValueError(f"{var.variable} in input form must be a list of files")
+
+                if var.max_length and len(user_input_value) > var.max_length:
+                    raise ValueError(f"{var.variable} in input form must be less than {var.max_length} files")
 
         return user_input_value