mirror of
https://github.com/langgenius/dify.git
synced 2026-03-04 15:26:21 +08:00
42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
from typing import Any, Literal, Union
|
|
|
|
from pydantic import BaseModel, field_validator
|
|
from pydantic_core.core_schema import ValidationInfo
|
|
|
|
from dify_graph.nodes.base.entities import BaseNodeData
|
|
|
|
|
|
class DatasourceEntity(BaseModel):
|
|
plugin_id: str
|
|
provider_name: str # redundancy
|
|
provider_type: str
|
|
datasource_name: str | None = "local_file"
|
|
datasource_configurations: dict[str, Any] | None = None
|
|
plugin_unique_identifier: str | None = None # redundancy
|
|
|
|
|
|
class DatasourceNodeData(BaseNodeData, DatasourceEntity):
|
|
class DatasourceInput(BaseModel):
|
|
# TODO: check this type
|
|
value: Union[Any, list[str]]
|
|
type: Literal["mixed", "variable", "constant"] | None = None
|
|
|
|
@field_validator("type", mode="before")
|
|
@classmethod
|
|
def check_type(cls, value, validation_info: ValidationInfo):
|
|
typ = value
|
|
value = validation_info.data.get("value")
|
|
if typ == "mixed" and not isinstance(value, str):
|
|
raise ValueError("value must be a string")
|
|
elif typ == "variable":
|
|
if not isinstance(value, list):
|
|
raise ValueError("value must be a list")
|
|
for val in value:
|
|
if not isinstance(val, str):
|
|
raise ValueError("value must be a list of strings")
|
|
elif typ == "constant" and not isinstance(value, str | int | float | bool):
|
|
raise ValueError("value must be a string, int, float, or bool")
|
|
return typ
|
|
|
|
datasource_parameters: dict[str, DatasourceInput] | None = None
|