Commit 1b77de38 authored by Serge S. Koval's avatar Serge S. Koval

Fixed #215, added after_model_change event

parent 57f11713
...@@ -339,12 +339,15 @@ class ModelView(BaseModelView): ...@@ -339,12 +339,15 @@ class ModelView(BaseModelView):
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self.on_model_change(form, model)
model.save() model.save()
return True
except Exception, ex: except Exception, ex:
flash(gettext('Failed to create model. %(error)s', error=str(ex)), flash(gettext('Failed to create model. %(error)s', error=str(ex)),
'error') 'error')
logging.exception('Failed to create model') logging.exception('Failed to create model')
return False return False
else:
self.after_model_change(form, model, True)
return True
def update_model(self, form, model): def update_model(self, form, model):
""" """
...@@ -359,12 +362,15 @@ class ModelView(BaseModelView): ...@@ -359,12 +362,15 @@ class ModelView(BaseModelView):
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self.on_model_change(form, model)
model.save() model.save()
return True
except Exception, ex: except Exception, ex:
flash(gettext('Failed to update model. %(error)s', error=str(ex)), flash(gettext('Failed to update model. %(error)s', error=str(ex)),
'error') 'error')
logging.exception('Failed to update model') logging.exception('Failed to update model')
return False return False
else:
self.after_model_change(form, model, False)
return True
def delete_model(self, model): def delete_model(self, model):
""" """
...@@ -379,7 +385,7 @@ class ModelView(BaseModelView): ...@@ -379,7 +385,7 @@ class ModelView(BaseModelView):
return True return True
except Exception, ex: except Exception, ex:
flash(gettext('Failed to delete model. %(error)s', error=str(ex)), flash(gettext('Failed to delete model. %(error)s', error=str(ex)),
'error') 'error')
logging.exception('Failed to delete model') logging.exception('Failed to delete model')
return False return False
...@@ -408,4 +414,4 @@ class ModelView(BaseModelView): ...@@ -408,4 +414,4 @@ class ModelView(BaseModelView):
count=count)) count=count))
except Exception, ex: except Exception, ex:
flash(gettext('Failed to delete models. %(error)s', error=str(ex)), flash(gettext('Failed to delete models. %(error)s', error=str(ex)),
'error') 'error')
...@@ -342,12 +342,14 @@ class ModelView(BaseModelView): ...@@ -342,12 +342,14 @@ 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)
return True
except Exception, ex: except Exception, ex:
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
else:
self.after_model_change(form, model, True)
return True
def update_model(self, form, model): def update_model(self, form, model):
try: try:
...@@ -357,12 +359,14 @@ class ModelView(BaseModelView): ...@@ -357,12 +359,14 @@ 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)
return True
except Exception, ex: except Exception, ex:
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
else:
self.after_model_change(form, model, False)
return True
def delete_model(self, model): def delete_model(self, model):
try: try:
......
...@@ -269,12 +269,15 @@ class ModelView(BaseModelView): ...@@ -269,12 +269,15 @@ class ModelView(BaseModelView):
model = form.data model = form.data
self.on_model_change(form, model) self.on_model_change(form, model)
self.coll.insert(model) self.coll.insert(model)
return True
except Exception, ex: except Exception, ex:
flash(gettext('Failed to create model. %(error)s', error=str(ex)), flash(gettext('Failed to create model. %(error)s', error=str(ex)),
'error') 'error')
logging.exception('Failed to create model') logging.exception('Failed to create model')
return False return False
else:
self.after_model_change(form, model, True)
return True
def update_model(self, form, model): def update_model(self, form, model):
""" """
...@@ -291,12 +294,15 @@ class ModelView(BaseModelView): ...@@ -291,12 +294,15 @@ class ModelView(BaseModelView):
pk = self.get_pk_value(model) pk = self.get_pk_value(model)
self.coll.update({'_id': pk}, model) self.coll.update({'_id': pk}, model)
return True
except Exception, ex: except Exception, ex:
flash(gettext('Failed to update model. %(error)s', error=str(ex)), flash(gettext('Failed to update model. %(error)s', error=str(ex)),
'error') 'error')
logging.exception('Failed to update model') logging.exception('Failed to update model')
return False return False
else:
self.after_model_change(form, model, False)
return True
def delete_model(self, model): def delete_model(self, model):
""" """
...@@ -316,7 +322,7 @@ class ModelView(BaseModelView): ...@@ -316,7 +322,7 @@ class ModelView(BaseModelView):
return True return True
except Exception, ex: except Exception, ex:
flash(gettext('Failed to delete model. %(error)s', error=str(ex)), flash(gettext('Failed to delete model. %(error)s', error=str(ex)),
'error') 'error')
logging.exception('Failed to delete model') logging.exception('Failed to delete model')
return False return False
......
...@@ -752,12 +752,15 @@ class ModelView(BaseModelView): ...@@ -752,12 +752,15 @@ class ModelView(BaseModelView):
self.session.add(model) self.session.add(model)
self.on_model_change(form, model) self.on_model_change(form, model)
self.session.commit() self.session.commit()
return True
except Exception, ex: except Exception, ex:
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()
return False return False
else:
self.after_model_change(form, model, True)
return True
def update_model(self, form, model): def update_model(self, form, model):
""" """
...@@ -772,12 +775,15 @@ class ModelView(BaseModelView): ...@@ -772,12 +775,15 @@ class ModelView(BaseModelView):
form.populate_obj(model) form.populate_obj(model)
self.on_model_change(form, model) self.on_model_change(form, model)
self.session.commit() self.session.commit()
return True
except Exception, ex: except Exception, ex:
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:
self.after_model_change(form, model, False)
return True
def delete_model(self, model): def delete_model(self, model):
""" """
......
...@@ -658,7 +658,7 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -658,7 +658,7 @@ class BaseModelView(BaseView, ActionsMixin):
""" """
raise NotImplemented('Please implement get_one method') raise NotImplemented('Please implement get_one method')
# Model handlers # Model event handlers
def on_model_change(self, form, model): def on_model_change(self, form, model):
""" """
Perform some actions after a model is created or updated. Perform some actions after a model is created or updated.
...@@ -666,7 +666,30 @@ class BaseModelView(BaseView, ActionsMixin): ...@@ -666,7 +666,30 @@ class BaseModelView(BaseView, ActionsMixin):
Called from create_model and update_model in the same transaction Called from create_model and update_model in the same transaction
(if it has any meaning for a store backend). (if it has any meaning for a store backend).
By default do nothing. By default does nothing.
:param form:
Form used to create/update model
:param model:
Model that will be created/updated
"""
pass
def after_model_change(self, form, model, is_created):
"""
Perform some actions after a model was created or updated and
committed to the database.
Called from create_model after successful database commit.
By default does nothing.
:param form:
Form used to create/update model
:param model:
Model that was created/updated
:param is_created:
True if model was created, False if model was updated
""" """
pass pass
......
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