diff --git a/api/models/types.py b/api/models/types.py index 6235c2594e..e5581c3ab0 100644 --- a/api/models/types.py +++ b/api/models/types.py @@ -50,7 +50,7 @@ class EnumText(TypeDecorator, Generic[_E]): # leave some rooms for future longer enum values. self._length = max(max_enum_value_len, 20) - def process_bind_param(self, value: _E | str, dialect): + def process_bind_param(self, value: _E | str | None, dialect): if value is None: return value if isinstance(value, self._enum_class): diff --git a/api/models/workflow.py b/api/models/workflow.py index 48b7b5f07a..c01bf1ad06 100644 --- a/api/models/workflow.py +++ b/api/models/workflow.py @@ -1,4 +1,5 @@ import json +import logging from collections.abc import Mapping, Sequence from datetime import UTC, datetime from enum import Enum, StrEnum @@ -29,6 +30,8 @@ from .engine import db from .enums import CreatorUserRole, DraftVariableType from .types import EnumText, StringUUID +_logger = logging.getLogger(__name__) + if TYPE_CHECKING: from models.model import AppMode @@ -890,7 +893,15 @@ class WorkflowDraftVariable(Base): editable: Mapped[bool] = mapped_column(sa.Boolean, nullable=False, default=False) def get_selector(self) -> list[str]: - return json.loads(self.selector) + selector = json.loads(self.selector) + if not isinstance(selector, list): + _logger.error( + "invalid selector loaded from database, type=%s, value=%s", + type(selector), + self.selector, + ) + raise ValueError("invalid selector.") + return selector def _set_selector(self, value: list[str]): self.selector = json.dumps(value)