Skip to content

Commit 99d3303

Browse files
committed
Always validate if in unpack typed dict mode
1 parent a5206e5 commit 99d3303

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

src/validators/arguments.rs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ impl BuildValidator for ArgumentsValidator {
143143

144144
let py_var_kwargs_mode: Bound<PyString> = schema
145145
.get_as(intern!(py, "var_kwargs_mode"))?
146-
.unwrap_or_else(|| PyString::new_bound(py, "single"));
146+
.unwrap_or_else(|| PyString::new_bound(py, "uniform"));
147147

148148
let var_kwargs_mode = VarKwargsMode::from_str(py_var_kwargs_mode.to_str()?)?;
149149
let var_kwargs_validator = match schema.get_item(intern!(py, "var_kwargs_schema"))? {
@@ -293,11 +293,12 @@ impl Validator for ArgumentsValidator {
293293
}
294294
}
295295
}
296+
297+
let remaining_kwargs = PyDict::new_bound(py);
298+
296299
// if there are kwargs check any that haven't been processed yet
297300
if let Some(kwargs) = args.kwargs() {
298301
if kwargs.len() > used_kwargs.len() {
299-
let remaining_kwargs = PyDict::new_bound(py);
300-
301302
for result in kwargs.iter() {
302303
let (raw_key, value) = result?;
303304
let either_str = match raw_key
@@ -349,24 +350,24 @@ impl Validator for ArgumentsValidator {
349350
}
350351
}
351352
}
353+
}
354+
}
352355

353-
if self.var_kwargs_mode == VarKwargsMode::UnpackedTypedDict {
354-
// `var_kwargs_validator` is guaranteed to be `Some`:
355-
match self
356-
.var_kwargs_validator
357-
.as_ref()
358-
.unwrap()
359-
.validate(py, remaining_kwargs.as_any(), state)
360-
{
361-
Ok(value) => {
362-
output_kwargs.update(value.downcast_bound::<PyDict>(py).unwrap().as_mapping())?;
363-
}
364-
Err(ValError::LineErrors(line_errors)) => {
365-
errors.extend(line_errors);
366-
}
367-
Err(err) => return Err(err),
368-
}
356+
if self.var_kwargs_mode == VarKwargsMode::UnpackedTypedDict {
357+
// `var_kwargs_validator` is guaranteed to be `Some`:
358+
match self
359+
.var_kwargs_validator
360+
.as_ref()
361+
.unwrap()
362+
.validate(py, remaining_kwargs.as_any(), state)
363+
{
364+
Ok(value) => {
365+
output_kwargs.update(value.downcast_bound::<PyDict>(py).unwrap().as_mapping())?;
366+
}
367+
Err(ValError::LineErrors(line_errors)) => {
368+
errors.extend(line_errors);
369369
}
370+
Err(err) => return Err(err),
370371
}
371372
}
372373

0 commit comments

Comments
 (0)