MCPcopy Index your code
hub / github.com/RustPython/RustPython / __setstate__

Method __setstate__

crates/vm/src/stdlib/_io.rs:4500–4538  ·  view source on GitHub ↗
(zelf: PyRef<Self>, state: PyTupleRef, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

4498
4499 #[pymethod]
4500 fn __setstate__(zelf: PyRef<Self>, state: PyTupleRef, vm: &VirtualMachine) -> PyResult<()> {
4501 // Check closed state first (like CHECK_CLOSED)
4502 if zelf.closed.load() {
4503 return Err(vm.new_value_error("__setstate__ on closed file"));
4504 }
4505 if state.len() != 4 {
4506 return Err(vm.new_type_error(format!(
4507 "__setstate__ argument should be 4-tuple, got {}",
4508 state.len()
4509 )));
4510 }
4511
4512 let content: PyStrRef = state[0].clone().try_into_value(vm)?;
4513 // state[1] is newline - TODO: use when newline handling is implemented
4514 let pos: u64 = state[2].clone().try_into_value(vm)?;
4515 let dict = &state[3];
4516
4517 // Set content and position
4518 let raw_bytes = content.as_bytes().to_vec();
4519 let mut buffer = zelf.buffer.write();
4520 *buffer = BufferedIO::new(Cursor::new(raw_bytes));
4521 buffer
4522 .seek(SeekFrom::Start(pos))
4523 .map_err(|err| os_err(vm, err))?;
4524 drop(buffer);
4525
4526 // Set __dict__ if provided
4527 if !vm.is_none(dict) {
4528 let dict_ref: PyRef<PyDict> = dict.clone().try_into_value(vm)?;
4529 if let Some(obj_dict) = zelf.as_object().dict() {
4530 obj_dict.clear();
4531 for (key, value) in dict_ref.into_iter() {
4532 obj_dict.set_item(&*key, value, vm)?;
4533 }
4534 }
4535 }
4536
4537 Ok(())
4538 }
4539 }
4540
4541 #[derive(FromArgs)]

Callers 1

Calls 15

newFunction · 0.85
os_errFunction · 0.85
try_into_valueMethod · 0.80
to_vecMethod · 0.80
try_resizableMethod · 0.80
ErrClass · 0.50
loadMethod · 0.45
lenMethod · 0.45
cloneMethod · 0.45
as_bytesMethod · 0.45
writeMethod · 0.45
seekMethod · 0.45

Tested by 1