From e1ba38164a7050f95fc736c4cac52ab7d47cb4aa Mon Sep 17 00:00:00 2001
From: Benjamin Bertrand <benjamin.bertrand@esss.se>
Date: Mon, 13 Nov 2017 13:59:27 +0100
Subject: [PATCH] Handle CSEntry exceptions in admin views

Allow to use the same CSEntryError exceptions used for validation
in the API and admin views.
---
 app/admin/views.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/app/admin/views.py b/app/admin/views.py
index 15981da..2a10fd1 100644
--- a/app/admin/views.py
+++ b/app/admin/views.py
@@ -10,11 +10,13 @@ This module customizes the admin views.
 
 """
 from wtforms import validators, fields
+from flask import current_app, flash
 from flask_admin.contrib import sqla
 from flask_admin.model.form import converts
 from flask_login import current_user
 from .validators import IPNetwork
 from ..models import ICS_ID_RE
+from ..utils import CSEntryError
 
 
 # Monkey patch flask-admin Unique validator to disable it
@@ -46,6 +48,16 @@ class AdminModelView(sqla.ModelView):
     def is_accessible(self):
         return current_user.is_authenticated and current_user.is_admin
 
+    def handle_view_exception(self, exc):
+        """Handle CSEntryError exceptions in admin views"""
+        if isinstance(exc, CSEntryError):
+            if current_app.config.get('ADMIN_RAISE_ON_VIEW_EXCEPTION'):
+                raise
+            else:
+                flash(f'CSEntry error: {exc.message}', 'error')
+            return True
+        return super().handle_view_exception(exc)
+
 
 class GroupAdmin(AdminModelView):
     can_create = False
-- 
GitLab