Test that dataclass and pydantic BaseModel v1 and v2 use dep tracking.
()
| 4417 | |
| 4418 | |
| 4419 | def 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 | |
| 4473 | def test_dict_and_get_delta(): |
nothing calls this directly
no test coverage detected