|
|
import importlib |
|
|
|
|
|
import pytest |
|
|
from langflow.utils.util import build_template_from_function, get_base_classes, get_default_factory |
|
|
from pydantic import BaseModel |
|
|
|
|
|
|
|
|
|
|
|
class Parent(BaseModel): |
|
|
"""Parent Class.""" |
|
|
|
|
|
parent_field: str |
|
|
|
|
|
|
|
|
class Child(Parent): |
|
|
"""Child Class.""" |
|
|
|
|
|
child_field: int |
|
|
|
|
|
|
|
|
class ExampleClass1(BaseModel): |
|
|
"""Example class 1.""" |
|
|
|
|
|
def __init__(self, data: list[int] | None = None): |
|
|
self.data = data or [1, 2, 3] |
|
|
|
|
|
|
|
|
class ExampleClass2(BaseModel): |
|
|
"""Example class 2.""" |
|
|
|
|
|
def __init__(self, data: dict[str, int] | None = None): |
|
|
self.data = data or {"a": 1, "b": 2, "c": 3} |
|
|
|
|
|
|
|
|
def example_loader_1() -> ExampleClass1: |
|
|
"""Example loader function 1.""" |
|
|
return ExampleClass1() |
|
|
|
|
|
|
|
|
def example_loader_2() -> ExampleClass2: |
|
|
"""Example loader function 2.""" |
|
|
return ExampleClass2() |
|
|
|
|
|
|
|
|
def test_build_template_from_function(): |
|
|
type_to_loader_dict = { |
|
|
"example1": example_loader_1, |
|
|
"example2": example_loader_2, |
|
|
} |
|
|
|
|
|
|
|
|
result = build_template_from_function("ExampleClass1", type_to_loader_dict) |
|
|
|
|
|
assert result is not None |
|
|
assert "template" in result |
|
|
assert "description" in result |
|
|
assert "base_classes" in result |
|
|
|
|
|
|
|
|
result_with_function = build_template_from_function("ExampleClass1", type_to_loader_dict, add_function=True) |
|
|
assert result_with_function is not None |
|
|
assert "Callable" in result_with_function["base_classes"] |
|
|
|
|
|
|
|
|
with pytest.raises(ValueError, match=r".* not found"): |
|
|
build_template_from_function("NonExistent", type_to_loader_dict) |
|
|
|
|
|
|
|
|
|
|
|
def test_get_base_classes(): |
|
|
base_classes_parent = get_base_classes(Parent) |
|
|
base_classes_child = get_base_classes(Child) |
|
|
|
|
|
assert "Parent" in base_classes_parent |
|
|
assert "Child" in base_classes_child |
|
|
assert "Parent" in base_classes_child |
|
|
|
|
|
|
|
|
|
|
|
def test_get_default_factory(): |
|
|
module_name = "langflow.utils.util" |
|
|
function_repr = "<function dummy_function>" |
|
|
|
|
|
def dummy_function(): |
|
|
return "default_value" |
|
|
|
|
|
|
|
|
importlib.import_module(module_name).dummy_function = dummy_function |
|
|
|
|
|
default_value = get_default_factory(module_name, function_repr) |
|
|
|
|
|
assert default_value == "default_value" |
|
|
|