refactor: Add MultilineMixin to StrInput for multiline input support and adapt validation

This commit is contained in:
ogabrielluiz 2024-06-18 22:11:06 -03:00
commit 599ef9cc73
2 changed files with 12 additions and 4 deletions

View file

@ -4,6 +4,8 @@ from typing import Annotated, Any, Optional
from pydantic import BaseModel, ConfigDict, Field, PlainSerializer, field_validator, model_serializer
from langflow.field_typing.range_spec import RangeSpec
from langflow.inputs.validators import CoalesceBool
from langflow.inputs.validators import CoalesceBool
class FieldTypes(str, Enum):
@ -123,3 +125,7 @@ class RangeMixin(BaseModel):
class DropDownMixin(BaseModel):
options: Optional[list[str]] = None
"""List of options for the field. Only used when is_list=True. Default is an empty list."""
class MultilineMixin(BaseModel):
multiline: CoalesceBool = True

View file

@ -1,5 +1,6 @@
from typing import Any, AsyncIterator, Callable, Iterator, Optional, Union
from loguru import logger
from pydantic import Field, field_validator
from langflow.inputs.validators import CoalesceBool
@ -13,6 +14,7 @@ from .input_mixin import (
FieldTypes,
FileMixin,
ListableInputMixin,
MultilineMixin,
RangeMixin,
SerializableFieldTypes,
)
@ -49,12 +51,11 @@ class PromptInput(BaseInputMixin, ListableInputMixin):
# Applying mixins to a specific input type
class StrInput(BaseInputMixin, ListableInputMixin, DatabaseLoadMixin): # noqa: F821
class StrInput(BaseInputMixin, ListableInputMixin, DatabaseLoadMixin, MultilineMixin):
field_type: Optional[SerializableFieldTypes] = FieldTypes.TEXT
load_from_db: CoalesceBool = False
"""Defines if the field will allow the user to open a text editor. Default is False."""
@staticmethod
def _validate_value(v: Any, _info):
"""
Validates the given value and returns the processed value.
@ -70,7 +71,8 @@ class StrInput(BaseInputMixin, ListableInputMixin, DatabaseLoadMixin): # noqa:
ValueError: If the value is not of a valid type or if the input is missing a required key.
"""
if not isinstance(v, str) and v is not None:
raise ValueError(f"Invalid value type {type(v)}")
if _info.data.get("input_types") and v.__class__.__name__ not in _info.data.get("input_types"):
logger.warning(f"Invalid value type {type(v)}")
return v
@field_validator("value")
@ -160,7 +162,7 @@ class TextInput(StrInput):
return value
class MultilineInput(BaseInputMixin):
class MultilineInput(BaseInputMixin, MultilineMixin):
"""
Represents a multiline input field.