diff --git a/crates/jsonschema-py/CHANGELOG.md b/crates/jsonschema-py/CHANGELOG.md index cceb90be..d78dda4c 100644 --- a/crates/jsonschema-py/CHANGELOG.md +++ b/crates/jsonschema-py/CHANGELOG.md @@ -2,6 +2,14 @@ ## [Unreleased] +### Changed + +- Schema representation inside `__repr__`. + +### Fixed + +- Panic on initializing a validator. [#618](https://github.com/Stranger6667/jsonschema-rs/issues/618) + ## [0.25.0] - 2024-10-24 **Important:** This release removes deprecated old APIs. See the [Migration Guide](MIGRATION.md) for details on transitioning to the new API. diff --git a/crates/jsonschema-py/src/lib.rs b/crates/jsonschema-py/src/lib.rs index a5a196c5..9c02442b 100644 --- a/crates/jsonschema-py/src/lib.rs +++ b/crates/jsonschema-py/src/lib.rs @@ -357,18 +357,6 @@ fn iter_errors( } } -const SCHEMA_LENGTH_LIMIT: usize = 32; - -fn get_schema_repr(schema: &serde_json::Value) -> String { - // It could be more efficient, without converting the whole Value to a string - let mut repr = schema.to_string(); - if repr.len() > SCHEMA_LENGTH_LIMIT { - repr.truncate(SCHEMA_LENGTH_LIMIT); - repr.push_str("...}"); - } - repr -} - fn handle_format_checked_panic(err: Box) -> PyErr { LAST_FORMAT_ERROR.with(|last| { if let Some(err) = last.borrow_mut().take() { @@ -383,7 +371,6 @@ fn handle_format_checked_panic(err: Box) -> PyErr { #[pyclass(module = "jsonschema_rs", subclass)] struct Validator { validator: jsonschema::Validator, - repr: String, } /// validator_for(schema, formats=None, validate_formats=None, ignore_unknown_formats=True) @@ -434,10 +421,7 @@ fn validator_for_impl( }; let options = make_options(draft, formats, validate_formats, ignore_unknown_formats)?; match options.build(&schema) { - Ok(validator) => Ok(Validator { - validator, - repr: get_schema_repr(&schema), - }), + Ok(validator) => Ok(Validator { validator }), Err(error) => Err(into_py_err(py, error)?), } } @@ -506,16 +490,15 @@ impl Validator { ) -> PyResult { iter_on_error(py, &self.validator, instance) } - fn __repr__(&self) -> String { - let draft = match self.validator.draft() { - Draft::Draft4 => "Draft4", - Draft::Draft6 => "Draft6", - Draft::Draft7 => "Draft7", - Draft::Draft201909 => "Draft201909", - Draft::Draft202012 => "Draft202012", + fn __repr__(&self) -> &'static str { + match self.validator.draft() { + Draft::Draft4 => "", + Draft::Draft6 => "", + Draft::Draft7 => "", + Draft::Draft201909 => "", + Draft::Draft202012 => "", _ => "Unknown", - }; - format!("<{draft}Validator: {}>", self.repr) + } } } diff --git a/crates/jsonschema-py/tests-py/test_jsonschema.py b/crates/jsonschema-py/tests-py/test_jsonschema.py index 98fef2e5..f367174c 100644 --- a/crates/jsonschema-py/tests-py/test_jsonschema.py +++ b/crates/jsonschema-py/tests-py/test_jsonschema.py @@ -61,7 +61,7 @@ def test_invalid_type(func): def test_repr(): - assert repr(validator_for({"minimum": 5})) == '' + assert repr(validator_for({"minimum": 5})) == "" @pytest.mark.parametrize( @@ -364,3 +364,8 @@ def test_ignore_unknown_formats(cls, ignore_unknown_formats, should_raise): else: validator = cls(unknown_format_schema, ignore_unknown_formats=ignore_unknown_formats) assert validator.is_valid("any string") + + +def test_unicode_pattern(): + validator = Draft202012Validator({"pattern": "aaaaaaaèaaéaaaaéè"}) + assert not validator.is_valid("a")