Home / Class/ TestInitValidator Class — langchain Architecture

TestInitValidator Class — langchain Architecture

Architecture documentation for the TestInitValidator class in test_serializable.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d["TestInitValidator"]
  d90477e3_b806_4058_daf0_8495f08436d6["test_serializable.py"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|defined in| d90477e3_b806_4058_daf0_8495f08436d6
  02c51bf6_e1ea_de9f_746c_554f67f5a59c["test_init_validator_allows_valid_kwargs()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| 02c51bf6_e1ea_de9f_746c_554f67f5a59c
  aea75c11_2f7c_f411_2a77_87afb9a5e3e6["test_init_validator_blocks_deserialization()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| aea75c11_2f7c_f411_2a77_87afb9a5e3e6
  66364b43_02e3_224d_93e0_7503bad5f9bf["test_init_validator_receives_correct_class_path()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| 66364b43_02e3_224d_93e0_7503bad5f9bf
  43f59cf3_7a9f_8c99_20d1_2ce2e79071c9["test_init_validator_receives_correct_kwargs()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| 43f59cf3_7a9f_8c99_20d1_2ce2e79071c9
  6604f3f4_cdec_6e36_5251_a66e4a5cf624["test_init_validator_with_loads()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| 6604f3f4_cdec_6e36_5251_a66e4a5cf624
  3ce5d2be_7584_0394_5185_1202d84e0376["test_init_validator_none_allows_all()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| 3ce5d2be_7584_0394_5185_1202d84e0376
  c4fc0db8_5324_4086_d708_8216285f80eb["test_init_validator_type_alias_exists()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| c4fc0db8_5324_4086_d708_8216285f80eb
  69dd5f12_372d_79b6_44d0_3013744b7d61["test_init_validator_blocks_specific_class()"]
  ff9fa6f4_1eec_e12e_ec54_642a0a26cc2d -->|method| 69dd5f12_372d_79b6_44d0_3013744b7d61

Relationship Graph

Source Code

libs/core/tests/unit_tests/load/test_serializable.py lines 595–712

class TestInitValidator:
    """Tests for `init_validator` on `load()` and `loads()`."""

    def test_init_validator_allows_valid_kwargs(self) -> None:
        """Test that `init_validator` returning None allows deserialization."""
        msg = AIMessage(content="Hello")
        serialized = dumpd(msg)

        def allow_all(_class_path: tuple[str, ...], _kwargs: dict[str, Any]) -> None:
            pass  # Allow all by doing nothing

        loaded = load(serialized, allowed_objects=[AIMessage], init_validator=allow_all)
        assert loaded == msg

    def test_init_validator_blocks_deserialization(self) -> None:
        """Test that `init_validator` can block deserialization by raising."""
        doc = Document(page_content="test", metadata={"source": "test.txt"})
        serialized = dumpd(doc)

        def block_metadata(
            _class_path: tuple[str, ...], kwargs: dict[str, Any]
        ) -> None:
            if "metadata" in kwargs:
                msg = "Metadata not allowed"
                raise ValueError(msg)

        with pytest.raises(ValueError, match="Metadata not allowed"):
            load(serialized, allowed_objects=[Document], init_validator=block_metadata)

    def test_init_validator_receives_correct_class_path(self) -> None:
        """Test that `init_validator` receives the correct class path."""
        msg = AIMessage(content="Hello")
        serialized = dumpd(msg)

        received_class_paths: list[tuple[str, ...]] = []

        def capture_class_path(
            class_path: tuple[str, ...], _kwargs: dict[str, Any]
        ) -> None:
            received_class_paths.append(class_path)

        load(serialized, allowed_objects=[AIMessage], init_validator=capture_class_path)

        assert len(received_class_paths) == 1
        assert received_class_paths[0] == (
            "langchain",
            "schema",
            "messages",
            "AIMessage",
        )

    def test_init_validator_receives_correct_kwargs(self) -> None:
        """Test that `init_validator` receives the kwargs dict."""
        msg = AIMessage(content="Hello world", name="test_name")
        serialized = dumpd(msg)

        received_kwargs: list[dict[str, Any]] = []

        def capture_kwargs(
            _class_path: tuple[str, ...], kwargs: dict[str, Any]
        ) -> None:
            received_kwargs.append(kwargs)

        load(serialized, allowed_objects=[AIMessage], init_validator=capture_kwargs)

        assert len(received_kwargs) == 1
        assert "content" in received_kwargs[0]
        assert received_kwargs[0]["content"] == "Hello world"
        assert "name" in received_kwargs[0]
        assert received_kwargs[0]["name"] == "test_name"

    def test_init_validator_with_loads(self) -> None:
        """Test that `init_validator` works with `loads()` function."""
        doc = Document(page_content="test", metadata={"key": "value"})
        json_str = dumps(doc)

        def block_metadata(
            _class_path: tuple[str, ...], kwargs: dict[str, Any]
        ) -> None:
            if "metadata" in kwargs:
                msg = "Metadata not allowed"

Frequently Asked Questions

What is the TestInitValidator class?
TestInitValidator is a class in the langchain codebase, defined in libs/core/tests/unit_tests/load/test_serializable.py.
Where is TestInitValidator defined?
TestInitValidator is defined in libs/core/tests/unit_tests/load/test_serializable.py at line 595.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free