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)): ...@@ -137,7 +137,8 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)):
return args 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. Constructor.
...@@ -157,6 +158,9 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)): ...@@ -157,6 +158,9 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)):
and '/admin/' prefix won't be applied. and '/admin/' prefix won't be applied.
:param static_url_path: :param static_url_path:
Static URL Path. If provided, this specifies the path to the static url directory. 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.name = name
self.category = category self.category = category
...@@ -295,6 +299,13 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)): ...@@ -295,6 +299,13 @@ class BaseView(with_metaclass(AdminViewMeta, BaseViewClass)):
if not self.is_accessible(): if not self.is_accessible():
return abort(404) 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): class AdminIndexView(BaseView):
""" """
......
...@@ -363,6 +363,9 @@ class ModelView(BaseModelView): ...@@ -363,6 +363,9 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, True) self._on_model_change(form, model, True)
model.save() model.save()
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to create model. %(error)s', flash(gettext('Failed to create model. %(error)s',
error=format_error(ex)), error=format_error(ex)),
'error') 'error')
...@@ -387,6 +390,9 @@ class ModelView(BaseModelView): ...@@ -387,6 +390,9 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, False) self._on_model_change(form, model, False)
model.save() model.save()
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to update model. %(error)s', flash(gettext('Failed to update model. %(error)s',
error=format_error(ex)), error=format_error(ex)),
'error') 'error')
...@@ -409,6 +415,9 @@ class ModelView(BaseModelView): ...@@ -409,6 +415,9 @@ class ModelView(BaseModelView):
model.delete() model.delete()
return True return True
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete model. %(error)s', flash(gettext('Failed to delete model. %(error)s',
error=format_error(ex)), error=format_error(ex)),
'error') 'error')
...@@ -461,5 +470,8 @@ class ModelView(BaseModelView): ...@@ -461,5 +470,8 @@ class ModelView(BaseModelView):
count, count,
count=count)) count=count))
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), flash(gettext('Failed to delete models. %(error)s', error=str(ex)),
'error') 'error')
...@@ -341,6 +341,9 @@ class ModelView(BaseModelView): ...@@ -341,6 +341,9 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved # For peewee have to save inline forms after model was saved
save_inline(form, model) save_inline(form, model)
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to create model') logging.exception('Failed to create model')
return False return False
...@@ -358,6 +361,9 @@ class ModelView(BaseModelView): ...@@ -358,6 +361,9 @@ class ModelView(BaseModelView):
# For peewee have to save inline forms after model was saved # For peewee have to save inline forms after model was saved
save_inline(form, model) save_inline(form, model)
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to update model') logging.exception('Failed to update model')
return False return False
...@@ -372,6 +378,9 @@ class ModelView(BaseModelView): ...@@ -372,6 +378,9 @@ class ModelView(BaseModelView):
model.delete_instance(recursive=True) model.delete_instance(recursive=True)
return True return True
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to delete model') logging.exception('Failed to delete model')
return False return False
...@@ -407,4 +416,7 @@ class ModelView(BaseModelView): ...@@ -407,4 +416,7 @@ class ModelView(BaseModelView):
count, count,
count=count)) count=count))
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
...@@ -768,6 +768,9 @@ class ModelView(BaseModelView): ...@@ -768,6 +768,9 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, True) self._on_model_change(form, model, True)
self.session.commit() self.session.commit()
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to create model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to create model') logging.exception('Failed to create model')
self.session.rollback() self.session.rollback()
...@@ -791,9 +794,13 @@ class ModelView(BaseModelView): ...@@ -791,9 +794,13 @@ class ModelView(BaseModelView):
self._on_model_change(form, model, False) self._on_model_change(form, model, False)
self.session.commit() self.session.commit()
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to update model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to update model') logging.exception('Failed to update model')
self.session.rollback() self.session.rollback()
return False return False
else: else:
self.after_model_change(form, model, False) self.after_model_change(form, model, False)
...@@ -814,6 +821,9 @@ class ModelView(BaseModelView): ...@@ -814,6 +821,9 @@ class ModelView(BaseModelView):
self.session.commit() self.session.commit()
return True return True
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to delete model. %(error)s', error=str(ex)), 'error')
logging.exception('Failed to delete model') logging.exception('Failed to delete model')
self.session.rollback() self.session.rollback()
...@@ -852,4 +862,7 @@ class ModelView(BaseModelView): ...@@ -852,4 +862,7 @@ class ModelView(BaseModelView):
count, count,
count=count)) count=count))
except Exception as ex: except Exception as ex:
if self._debug:
raise
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error') flash(gettext('Failed to delete models. %(error)s', error=str(ex)), 'error')
...@@ -396,6 +396,9 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -396,6 +396,9 @@ class BaseModelView(BaseView, ActionsMixin):
'userview' 'userview'
:param url: :param url:
Base URL. If not provided, will use endpoint as a 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 # 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