Skip to content

Commit

Permalink
catch errors on build_add explicitly
Browse files Browse the repository at this point in the history
  • Loading branch information
JONEMI21 committed Feb 5, 2025
1 parent fe6851c commit ee71da1
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions src/input/return_enums.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,19 +194,22 @@ impl BuildSet for Bound<'_, PyFrozenSet> {
}
}

fn validate_hashable<'py>(
fn validate_add<'py>(
py: Python<'py>,
item: &(impl Input<'py> + ?Sized),
set: &impl BuildSet,
item: impl BorrowInput<'py>,
state: &mut ValidationState<'_, 'py>,
validator: &CombinedValidator,
) -> ValResult<PyObject> {
let result: PyObject = validator.validate(py, item, state)?;

let bound_result: &Bound<'_, PyAny> = result.bind(py);

match bound_result.hash() {
Ok(_) => Ok(result),
Err(_) => Err(ValError::new(ErrorTypeDefaults::SetItemNotHashable, item)),
) -> ValResult<()> {
let validated_item = validator.validate(py, item.borrow_input(), state)?;
match set.build_add(validated_item) {
Ok(()) => Ok(()),
Err(err) => {
if err.matches(py, py.get_type::<PyTypeError>())? {
return Err(ValError::new(ErrorTypeDefaults::SetItemNotHashable, item));
}
Err(ValError::new(ErrorType::SetType { context: None }, item))
}
}
}

Expand All @@ -232,9 +235,8 @@ pub(crate) fn validate_iter_to_set<'py>(
false => PartialMode::Off,
};
let item = item_result.map_err(|e| any_next_error!(py, e, input, index))?;
match validate_hashable(py, item.borrow_input(), state, validator) {
Ok(item) => {
set.build_add(item)?;
match validate_add(py, set, item, state, validator) {
Ok(()) => {
if let Some(max_length) = max_length {
if set.build_len() > max_length {
return Err(ValError::new(
Expand Down

0 comments on commit ee71da1

Please sign in to comment.