()
| 214 | |
| 215 | |
| 216 | def test_properties_and_computed_fields(): |
| 217 | class Model(BaseModel): |
| 218 | x: str |
| 219 | _private_float: float = PrivateAttr(0) |
| 220 | |
| 221 | @property |
| 222 | def public_int(self) -> int: |
| 223 | return int(self._private_float) |
| 224 | |
| 225 | @public_int.setter |
| 226 | def public_int(self, v: float) -> None: |
| 227 | self._private_float = v |
| 228 | |
| 229 | @computed_field |
| 230 | @property |
| 231 | def public_str(self) -> str: |
| 232 | return f'public {self.public_int}' |
| 233 | |
| 234 | m = Model(x='pika') |
| 235 | assert m.model_dump() == {'x': 'pika', 'public_str': 'public 0'} |
| 236 | m._private_float = 3.1 |
| 237 | assert m.model_dump() == {'x': 'pika', 'public_str': 'public 3'} |
| 238 | m.public_int = 2 |
| 239 | assert m._private_float == 2.0 |
| 240 | assert m.model_dump() == {'x': 'pika', 'public_str': 'public 2'} |
| 241 | |
| 242 | |
| 243 | def test_computed_fields_repr(): |
nothing calls this directly
no test coverage detected