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"
Source
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