diff --git a/requirements.in b/requirements.in index cba0f877..a9f7d46d 100644 --- a/requirements.in +++ b/requirements.in @@ -9,7 +9,7 @@ geode-simplex geode-explicit geode-implicit geode-common -jsonschema +fastjsonschema Flask[async] Flask-Cors werkzeug \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index f60c72a2..4260add6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,8 @@ blinker==1.9.0 # via flask click==8.2.1 # via flask +fastjsonschema==2.21.1 +# via -r requirements.in flask[async]==3.1.1 # via # -r requirements.in @@ -60,10 +62,6 @@ itsdangerous==2.2.0 # via flask jinja2==3.1.6 # via flask -jsonschema==4.24.0 - # via -r requirements.in -jsonschema-specifications==2025.4.1 - # via jsonschema markupsafe==3.0.2 # via # flask @@ -120,4 +118,4 @@ werkzeug==3.1.3 # via # -r requirements.in # flask - # flask-cors + # flask-cors \ No newline at end of file diff --git a/src/opengeodeweb_back/test_utils.py b/src/opengeodeweb_back/test_utils.py index 0d4c6176..0888a4ad 100644 --- a/src/opengeodeweb_back/test_utils.py +++ b/src/opengeodeweb_back/test_utils.py @@ -12,14 +12,13 @@ def test_route_wrong_params(client, route, get_full_data): response = client.post(route, json=json) assert response.status_code == 400 error_description = response.json["description"] - assert error_description == f"Validation error: '{key}' is a required property" + assert "data must contain" in error_description + assert f"'{key}'" in error_description json = get_full_data() json["dumb_key"] = "dumb_value" response = client.post(route, json=json) assert response.status_code == 400 error_description = response.json["description"] - assert ( - error_description - == "Validation error: Additional properties are not allowed ('dumb_key' was unexpected)" - ) + assert "data must not contain" in error_description + assert "'dumb_key'" in error_description diff --git a/src/opengeodeweb_back/utils_functions.py b/src/opengeodeweb_back/utils_functions.py index 183d40de..1b12cebd 100644 --- a/src/opengeodeweb_back/utils_functions.py +++ b/src/opengeodeweb_back/utils_functions.py @@ -6,8 +6,7 @@ # Third party imports import flask -from jsonschema import validate -from jsonschema.exceptions import ValidationError +import fastjsonschema import importlib.metadata as metadata # Local application imports @@ -82,9 +81,11 @@ def validate_request(request, schema): json_data = {} try: - validate(instance=json_data, schema=schema) - except ValidationError as e: - flask.abort(400, f"Validation error: {e.message}") + validate = fastjsonschema.compile(schema) + validate(json_data) + except fastjsonschema.JsonSchemaException as e: + error_msg = str(e) + flask.abort(400, error_msg) def set_interval(func, sec, args=None):