From c09c932f0dec87f44d501d22adc225096b5885e2 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Thu, 8 May 2025 09:17:56 -0700 Subject: [PATCH 1/4] implement init_alone --- stdlib/src/lzma.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/stdlib/src/lzma.rs b/stdlib/src/lzma.rs index ed8be9a695..6eb892a52e 100644 --- a/stdlib/src/lzma.rs +++ b/stdlib/src/lzma.rs @@ -39,7 +39,7 @@ mod _lzma { use rustpython_vm::types::Constructor; use rustpython_vm::{PyObjectRef, PyPayload, PyResult, VirtualMachine}; use std::fmt; - use xz2::stream::{Action, Check, Error, Filters, Status, Stream}; + use xz2::stream::{Action, Check, Error, Filters, LzmaOptions, Status, Stream}; #[cfg(windows)] type EnumVal = i32; @@ -322,6 +322,26 @@ mod _lzma { .map_err(|_| new_lzma_error("Failed to initialize encoder", vm))?) } } + + fn init_alone( + preset: u32, + filter_specs: Option>, + vm: &VirtualMachine, + ) -> PyResult { + if let Some(filter_specs) = filter_specs { + Err(new_lzma_error( + "TODO: RUSTPYTHON: LZMA: Alone filter specs", + vm, + )) + } else { + let options = LzmaOptions::new_preset(preset) + .map_err(|_| new_lzma_error("Failed to initialize encoder", vm))?; + let stream = Stream::new_lzma_encoder(&options).map_err(|_| { + new_lzma_error("Failed to initialize encoder", vm) + })?; + Ok(stream) + } + } } #[derive(FromArgs)] @@ -365,7 +385,8 @@ mod _lzma { } let stream = match args.format { FORMAT_XZ => Self::init_xz(args.check, preset, args.filters, vm)?, - // TODO: ALONE AND RAW + FORMAT_ALONE => Self::init_alone(preset, args.filters, vm)?, + // TODO: RAW _ => return Err(new_lzma_error("Invalid format", vm)), }; Ok(Self { From 4af88558d4fc610ea14f86b988238d50c28bb5b3 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Thu, 8 May 2025 09:28:37 -0700 Subject: [PATCH 2/4] error if format is raw and there is a memlimit --- stdlib/src/lzma.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stdlib/src/lzma.rs b/stdlib/src/lzma.rs index 6eb892a52e..8d963ba624 100644 --- a/stdlib/src/lzma.rs +++ b/stdlib/src/lzma.rs @@ -149,6 +149,11 @@ mod _lzma { type Args = LZMADecompressorConstructorArgs; fn py_new(cls: PyTypeRef, args: Self::Args, vm: &VirtualMachine) -> PyResult { + if args.format == FORMAT_RAW && args.memlimit.is_some() { + return Err(vm.new_value_error( + "Cannot specify memory limit with FORMAT_RAW".to_string(), + )); + } let memlimit = args.memlimit.unwrap_or(u64::MAX); let filters = args.filters.unwrap_or(0); let stream_result = match args.format { From ebee75e07fd817ded48c62c30e1ba67313228cc5 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Thu, 8 May 2025 10:03:23 -0700 Subject: [PATCH 3/4] clippy fix --- stdlib/src/lzma.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/src/lzma.rs b/stdlib/src/lzma.rs index 8d963ba624..a695cd8b3c 100644 --- a/stdlib/src/lzma.rs +++ b/stdlib/src/lzma.rs @@ -333,7 +333,7 @@ mod _lzma { filter_specs: Option>, vm: &VirtualMachine, ) -> PyResult { - if let Some(filter_specs) = filter_specs { + if let Some(_filter_specs) = filter_specs { Err(new_lzma_error( "TODO: RUSTPYTHON: LZMA: Alone filter specs", vm, From 74deba8f29cec7a9fc7828cf87a94b7236160909 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Thu, 8 May 2025 10:04:12 -0700 Subject: [PATCH 4/4] formatting --- stdlib/src/lzma.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/stdlib/src/lzma.rs b/stdlib/src/lzma.rs index a695cd8b3c..21ba8b64c0 100644 --- a/stdlib/src/lzma.rs +++ b/stdlib/src/lzma.rs @@ -150,9 +150,9 @@ mod _lzma { fn py_new(cls: PyTypeRef, args: Self::Args, vm: &VirtualMachine) -> PyResult { if args.format == FORMAT_RAW && args.memlimit.is_some() { - return Err(vm.new_value_error( - "Cannot specify memory limit with FORMAT_RAW".to_string(), - )); + return Err( + vm.new_value_error("Cannot specify memory limit with FORMAT_RAW".to_string()) + ); } let memlimit = args.memlimit.unwrap_or(u64::MAX); let filters = args.filters.unwrap_or(0); @@ -327,7 +327,7 @@ mod _lzma { .map_err(|_| new_lzma_error("Failed to initialize encoder", vm))?) } } - + fn init_alone( preset: u32, filter_specs: Option>, @@ -341,9 +341,8 @@ mod _lzma { } else { let options = LzmaOptions::new_preset(preset) .map_err(|_| new_lzma_error("Failed to initialize encoder", vm))?; - let stream = Stream::new_lzma_encoder(&options).map_err(|_| { - new_lzma_error("Failed to initialize encoder", vm) - })?; + let stream = Stream::new_lzma_encoder(&options) + .map_err(|_| new_lzma_error("Failed to initialize encoder", vm))?; Ok(stream) } }