From d70ea4b82b50545509cfcabb93a9bc85880f661d Mon Sep 17 00:00:00 2001 From: Matthias Friedrich Date: Tue, 16 Dec 2025 20:14:59 +0100 Subject: [PATCH 1/2] Add error handling to bundle_css. --- src/lib.rs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 6d6421a..3b099f7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,11 @@ use std::collections::HashSet; use std::path::Path; -use pyo3::exceptions::PyValueError; +use pyo3::exceptions::{PyValueError, PyIOError}; use pyo3::prelude::*; use browserslist::Error as BrowserslistError; -use lightningcss::bundler::{Bundler, FileProvider}; +use lightningcss::bundler::{Bundler, FileProvider, BundleErrorKind}; use lightningcss::stylesheet::{ MinifyOptions, ParserFlags, ParserOptions, PrinterOptions, StyleSheet, }; @@ -49,7 +49,7 @@ fn process_stylesheet(code: &str, let targets = match mk_targets(browsers_list) { Ok(val) => val, - Err(e) => {return Err(PyValueError::new_err(format!("browsers_list failed validation: {}", e.to_string())))} + Err(e) => {return Err(PyValueError::new_err(format!("Browsers_list failed validation: {}", e.to_string())))} }; let mut stylesheet = match StyleSheet::parse(code, mk_parser_options(filename, error_recovery, parser_flags)) { Ok(val) => val, @@ -142,7 +142,23 @@ fn bundle_css( ..Default::default() }, ); - let mut stylesheet = bundler.bundle(Path::new(path)).unwrap(); + + let mut stylesheet = match bundler.bundle(Path::new(path)) { + Ok(s) => s, + Err(e) => { + let message = e.to_string(); + match e.kind { + // Resolver errors, probably related to file I/O + BundleErrorKind::ResolverError(_) => { + return Err(PyIOError::new_err(format!("Bundling failed: {}", message))); + } + // Parser and logical errors + _ => { + return Err(PyValueError::new_err(format!("Bundling failed: {}", message))); + } + } + } + }; let targets = match mk_targets(browsers_list) { Ok(val) => val, From 38453afe0b7b42eebd1491ee92382b3fe14b1040 Mon Sep 17 00:00:00 2001 From: Matthias Friedrich Date: Tue, 16 Dec 2025 22:05:48 +0100 Subject: [PATCH 2/2] Rephrase error message for consistency --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 3b099f7..43f208d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -49,7 +49,7 @@ fn process_stylesheet(code: &str, let targets = match mk_targets(browsers_list) { Ok(val) => val, - Err(e) => {return Err(PyValueError::new_err(format!("Browsers_list failed validation: {}", e.to_string())))} + Err(e) => {return Err(PyValueError::new_err(format!("Validation of browsers_list failed: {}", e.to_string())))} }; let mut stylesheet = match StyleSheet::parse(code, mk_parser_options(filename, error_recovery, parser_flags)) { Ok(val) => val,