diff --git a/src/howitz/__init__.py b/src/howitz/__init__.py index 12c06333..d4ec35fc 100644 --- a/src/howitz/__init__.py +++ b/src/howitz/__init__.py @@ -7,12 +7,12 @@ from flask.logging import default_handler from flask_assets import Bundle, Environment from flask_login import LoginManager, logout_user -from werkzeug.exceptions import HTTPException +from werkzeug.exceptions import HTTPException, BadRequest from howitz.config.utils import load_config from howitz.config.zino1 import make_zino1_config from howitz.config.howitz import make_howitz_config -from howitz.error_handlers import handle_generic_exception, handle_generic_http_exception +from howitz.error_handlers import handle_generic_exception, handle_generic_http_exception, handle_400 from howitz.users.db import UserDB from howitz.users.commands import user_cli from zinolib.controllers.zino1 import Zino1EventManager @@ -27,6 +27,7 @@ def create_app(test_config=None): # register error handlers app.register_error_handler(Exception, handle_generic_exception) app.register_error_handler(HTTPException, handle_generic_http_exception) + app.register_error_handler(BadRequest, handle_400) # load config app = load_config(app, test_config) diff --git a/src/howitz/endpoints.py b/src/howitz/endpoints.py index cd5305da..3d7519ef 100644 --- a/src/howitz/endpoints.py +++ b/src/howitz/endpoints.py @@ -17,7 +17,8 @@ from datetime import datetime, timezone -from zinolib.controllers.zino1 import Zino1EventManager, RetryError +from werkzeug.exceptions import BadRequest +from zinolib.controllers.zino1 import Zino1EventManager, RetryError, EventClosedError from zinolib.event_types import Event, AdmState, PortState, BFDState, ReachabilityState from zinolib.compat import StrEnum from zinolib.ritz import NotConnectedError @@ -391,8 +392,12 @@ def update_event_status(event_id): new_state = request.form['event-state'] new_history = request.form['event-history'] - if not current_state == new_state: - set_state_res = current_app.event_manager.change_admin_state_for_id(event_id, AdmState(new_state)) + try: + if not current_state == new_state: + set_state_res = current_app.event_manager.change_admin_state_for_id(event_id, AdmState(new_state)) + except EventClosedError as closedErr: + current_app.logger.exception('EventClosedError %s', closedErr) + raise BadRequest(description=closedErr.args[0]) from closedErr if new_history: add_history_res = current_app.event_manager.add_history_entry_for_id(event_id, new_history) @@ -423,8 +428,12 @@ def bulk_update_events_status(): # Update each selected event with new values for event_id in selected_events: - if new_state: - set_state_res = current_app.event_manager.change_admin_state_for_id(int(event_id), AdmState(new_state)) + try: + if new_state: + set_state_res = current_app.event_manager.change_admin_state_for_id(int(event_id), AdmState(new_state)) + except EventClosedError as closedErr: + current_app.logger.exception('EventClosedError %s', closedErr) + raise BadRequest(description=closedErr.args[0]) from closedErr if new_history: add_history_res = current_app.event_manager.add_history_entry_for_id(int(event_id), new_history) diff --git a/src/howitz/error_handlers.py b/src/howitz/error_handlers.py index 6acaaf9f..7f44b4c2 100644 --- a/src/howitz/error_handlers.py +++ b/src/howitz/error_handlers.py @@ -41,3 +41,10 @@ def handle_generic_exception(e): return render_template('/components/popups/alerts/error/error-alert.html', alert_id=alert_random_id, short_err_msg=short_err_msg) + + +def handle_400(e): + current_app.logger.exception("400 Bad Request has occurred %s", e) + + return render_template('/responses/400-generic.html', + err_msg=e.description), 400 diff --git a/src/howitz/templates/components/popups/modals/update-event-status-modal.html b/src/howitz/templates/components/popups/modals/update-event-status-modal.html index bb9374ce..5d31f5e1 100644 --- a/src/howitz/templates/components/popups/modals/update-event-status-modal.html +++ b/src/howitz/templates/components/popups/modals/update-event-status-modal.html @@ -3,6 +3,7 @@ aria-labelledby="modal-title" role="dialog" aria-modal="true" + hx-target-error="body" >
+ Error: {{ err_msg }} +
diff --git a/src/howitz/templates/responses/update-event-response.html b/src/howitz/templates/responses/update-event-response.html index cc9c4689..ac8619da 100644 --- a/src/howitz/templates/responses/update-event-response.html +++ b/src/howitz/templates/responses/update-event-response.html @@ -1,4 +1,78 @@ -{% include "/components/row/expanded-row.html" %} +