| 323 | |
| 324 | #[pygetset(setter)] |
| 325 | fn set___annotate__( |
| 326 | zelf: &Py<Self>, |
| 327 | value: PySetterValue, |
| 328 | vm: &VirtualMachine, |
| 329 | ) -> PyResult<()> { |
| 330 | match value { |
| 331 | PySetterValue::Assign(value) => { |
| 332 | if !vm.is_none(&value) && !value.is_callable() { |
| 333 | return Err(vm.new_type_error("__annotate__ must be callable or None")); |
| 334 | } |
| 335 | let dict = zelf.dict(); |
| 336 | dict.set_item(identifier!(vm, __annotate__), value.clone(), vm)?; |
| 337 | // Clear __annotations__ if value is not None |
| 338 | if !vm.is_none(&value) { |
| 339 | dict.del_item(identifier!(vm, __annotations__), vm).ok(); |
| 340 | } |
| 341 | Ok(()) |
| 342 | } |
| 343 | PySetterValue::Delete => Err(vm.new_type_error("cannot delete __annotate__ attribute")), |
| 344 | } |
| 345 | } |
| 346 | |
| 347 | #[pygetset] |
| 348 | fn __annotations__(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyObjectRef> { |