Commit 8d260814 authored by Serge S. Koval's avatar Serge S. Koval

Honor Flask application debug flag. Improves situation with #277

parent c9a0dbcd
......@@ -137,7 +137,8 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)):
return args
def __init__(self, name=None, category=None, endpoint=None, url=None, static_folder=None, static_url_path=None):
def __init__(self, name=None, category=None, endpoint=None, url=None,
static_folder=None, static_url_path=None):
"""
Constructor.
......@@ -157,6 +158,9 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)):
and '/admin/' prefix won't be applied.
:param static_url_path:
Static URL Path. If provided, this specifies the path to the static url directory.
:param debug:
Optional debug flag. If set to `True`, will rethrow exceptions in some cases, so Werkzeug
debugger can catch them.
"""
self.name = name
self.category = category
......@@ -295,6 +299,13 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)):
if not self.is_accessible():
return abort(404)
@property
def _debug(self):
if not self.admin or not self.admin.app:
return False
return self.admin.app.debug
class AdminIndexView(BaseView):
"""
......
......@@ -363,6 +363,9 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, True)
model.save()
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to create model. %(error)s',
error=format_error(ex)),
'error')
......@@ -387,6 +390,9 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, False)
model.save()
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to update model. %(error)s',
error=format_error(ex)),
'error')
......@@ -409,6 +415,9 @@ class ModelView(BaseModelView):
model.delete()
return True
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete model. %(error)s',
error=format_error(ex)),
'error')
......@@ -461,5 +470,8 @@ class ModelView(BaseModelView):
count,
count=count))
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete models. %(error)s', error=str(ex)),
'error')
......@@ -341,6 +341,9 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved
save_inline(form, model)
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to create model')
return False
......@@ -358,6 +361,9 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved
save_inline(form, model)
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to update model')
return False
......@@ -372,6 +378,9 @@ class ModelView(BaseModelView):
model.delete_instance(recursive=True)
return True
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to delete model')
return False
......@@ -407,4 +416,7 @@ class ModelView(BaseModelView):
count,
count=count))
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
......@@ -768,6 +768,9 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, True)
self.session.commit()
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to create model')
self.session.rollback()
......@@ -791,9 +794,13 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, False)
self.session.commit()
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to update model')
self.session.rollback()
return False
else:
self.after_model_change(form, model, False)
......@@ -814,6 +821,9 @@ class ModelView(BaseModelView):
self.session.commit()
return True
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to delete model')
self.session.rollback()
......@@ -852,4 +862,7 @@ class ModelView(BaseModelView):
count,
count=count))
except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
......@@ -396,6 +396,9 @@ class BaseModelView(BaseView, ActionsMixin):
'userview'
:param url:
Base URL. If not provided, will use endpoint as a URL.
:param debug:
Enable debugging mode. Won't catch exceptions on model
save failures.
"""
# If name not provided, it is model name
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment