| 717 | |
| 718 | #[pymethod] |
| 719 | fn __setstate__(self, state: PyObjectRef, vm: &VirtualMachine) -> PyResult<PyObjectRef> { |
| 720 | if !vm.is_none(&state) { |
| 721 | let dict = state |
| 722 | .downcast::<crate::builtins::PyDict>() |
| 723 | .map_err(|_| vm.new_type_error("state is not a dictionary"))?; |
| 724 | |
| 725 | for (key, value) in &dict { |
| 726 | let key_str = key.str(vm)?; |
| 727 | if key_str.as_bytes().starts_with(b"__") { |
| 728 | continue; |
| 729 | } |
| 730 | self.as_object().set_attr(&key_str, value.clone(), vm)?; |
| 731 | } |
| 732 | } |
| 733 | Ok(vm.ctx.none()) |
| 734 | } |
| 735 | } |
| 736 | |
| 737 | impl Constructor for PyBaseException { |