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

Method py_new

crates/stdlib/src/lzma.rs:581–629  ·  view source on GitHub ↗
(_cls: &Py<PyType>, args: Self::Args, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

579 type Args = LZMADecompressorConstructorArgs;
580
581 fn py_new(_cls: &Py<PyType>, args: Self::Args, vm: &VirtualMachine) -> PyResult<Self> {
582 if args.format == FORMAT_RAW && args.memlimit.is_some() {
583 return Err(vm.new_value_error("Cannot specify memory limit with FORMAT_RAW"));
584 }
585
586 if args.format == FORMAT_RAW && args.filters.is_none() {
587 return Err(vm.new_value_error("Must specify filters for FORMAT_RAW"));
588 }
589 if args.format != FORMAT_RAW && args.filters.is_some() {
590 return Err(vm.new_value_error("Cannot specify filters except with FORMAT_RAW"));
591 }
592
593 let memlimit = args.memlimit.unwrap_or(u64::MAX);
594 let decoder_flags = TELL_ANY_CHECK | TELL_NO_CHECK;
595
596 let lzma_stream = match args.format {
597 FORMAT_AUTO => {
598 let stream = Stream::new_auto_decoder(memlimit, decoder_flags)
599 .map_err(|e| catch_lzma_error(e, vm))?;
600 LzmaStream::new(stream, CHECK_UNKNOWN, true)
601 }
602 FORMAT_XZ => {
603 let stream = Stream::new_stream_decoder(memlimit, decoder_flags)
604 .map_err(|e| catch_lzma_error(e, vm))?;
605 LzmaStream::new(stream, CHECK_UNKNOWN, true)
606 }
607 FORMAT_ALONE => {
608 let stream =
609 Stream::new_lzma_decoder(memlimit).map_err(|e| catch_lzma_error(e, vm))?;
610 LzmaStream::new(stream, CHECK_NONE, false)
611 }
612 FORMAT_RAW => {
613 let filter_specs = args.filters.unwrap(); // safe: checked above
614 let filters = parse_filter_chain_spec(filter_specs, vm)?;
615 let stream =
616 Stream::new_raw_decoder(&filters).map_err(|e| catch_lzma_error(e, vm))?;
617 LzmaStream::new(stream, CHECK_NONE, false)
618 }
619 _ => {
620 return Err(
621 vm.new_value_error(format!("Invalid container format: {}", args.format))
622 );
623 }
624 };
625
626 Ok(Self {
627 state: PyMutex::new(DecompressState::new(lzma_stream, vm)),
628 })
629 }
630 }
631
632 #[pyclass(with(Constructor))]

Callers

nothing calls this directly

Calls 9

catch_lzma_errorFunction · 0.85
newFunction · 0.85
parse_filter_chain_specFunction · 0.85
new_lzma_errorFunction · 0.85
try_into_valueMethod · 0.80
ErrClass · 0.50
is_noneMethod · 0.45
unwrapMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected