MCPcopy
hub / github.com/reflex-dev/reflex / test_mutable_models

Function test_mutable_models

tests/units/test_state.py:4419–4470  ·  view source on GitHub ↗

Test that dataclass and pydantic BaseModel v1 and v2 use dep tracking.

()

Source from the content-addressed store, hash-verified

4417
4418
4419def test_mutable_models():
4420 """Test that dataclass and pydantic BaseModel v1 and v2 use dep tracking."""
4421 state = PydanticState()
4422
4423 assert isinstance(state.v2, MutableProxy)
4424 state.v2.foo = "baz"
4425 assert state.dirty_vars == {"v2"}
4426 state.dirty_vars.clear()
4427 state.v2.set_foo("quuc")
4428 assert state.dirty_vars == {"v2"}
4429 state.dirty_vars.clear()
4430 assert state.v2.double_foo() == "quucquuc"
4431 assert state.dirty_vars == set()
4432 state.v2.model_copy(update={"foo": "larp"})
4433 assert state.dirty_vars == set()
4434
4435 assert isinstance(state.dc, MutableProxy)
4436 state.dc.foo = "baz"
4437 assert state.dirty_vars == {"dc"}
4438 state.dirty_vars.clear()
4439 assert state.dirty_vars == set()
4440 state.dc.set_foo("quuc")
4441 assert state.dirty_vars == {"dc"}
4442 state.dirty_vars.clear()
4443 assert state.dirty_vars == set()
4444 assert state.dc.double_foo() == "quucquuc"
4445 assert state.dirty_vars == set()
4446 state.dc.ls.append({"hi": "reflex"})
4447 assert state.dirty_vars == {"dc"}
4448 state.dirty_vars.clear()
4449 assert state.dirty_vars == set()
4450 assert dataclasses.asdict(state.dc) == {"foo": "quuc", "ls": [{"hi": "reflex"}]}
4451 assert dataclasses.astuple(state.dc) == ("quuc", [{"hi": "reflex"}])
4452 # creating a new instance shouldn't mark the state dirty
4453 assert dataclasses.replace(state.dc, foo="larp") == ModelDC(
4454 foo="larp", ls=[{"hi": "reflex"}]
4455 )
4456 assert state.dirty_vars == set()
4457 dc_copy = state.dc.copy()
4458 assert dc_copy == state.dc
4459 assert dc_copy is not state.dc
4460 dc_copy.foo = "new_foo"
4461 assert state.dirty_vars == set()
4462 dc_copy.append_to_ls({"new": "item"})
4463 assert state.dirty_vars == set()
4464 state.dc.append_to_ls({"new": "item"})
4465 assert state.dirty_vars == {"dc"}
4466 state.dirty_vars.clear()
4467
4468 dc_from_dict = state.dc.from_dict({"foo": "from_dict", "ls": []})
4469 assert dc_from_dict == ModelDC(foo="from_dict", ls=[])
4470 assert state.dirty_vars == set()
4471
4472
4473def test_dict_and_get_delta():

Callers

nothing calls this directly

Calls 9

PydanticStateClass · 0.85
ModelDCClass · 0.85
clearMethod · 0.80
replaceMethod · 0.80
copyMethod · 0.80
append_to_lsMethod · 0.80
from_dictMethod · 0.80
set_fooMethod · 0.45
double_fooMethod · 0.45

Tested by

no test coverage detected