def run_action(ar,elem): try: rv = ar.bound_action.action.run(elem,ar) if rv is None: rv = ui.success() return ar.ui.action_response(rv) #~ return rv #~ except actions.ConfirmationRequired,e: #~ r = dict( #~ success=True, #~ confirm_message='\n'.join([unicode(m) for m in e.messages]), #~ step=e.step) #~ return ar.ui.action_response(r) #~ except actions.DialogRequired,e: #~ r = dict( #~ success=True, #~ dialog_fn=e.dialog, #~ step=e.step) #~ return ar.ui.action_response(r) #~ except actions.DecisionRequired,e: #~ r = dict( #~ success=True, #~ message=unicode(e), #~ decide_id=ar.ui.add_decision(e)) #~ return ar.ui.action_response(r) except Warning as e: r = dict( success=False, message=unicode(e), alert=True) return ar.ui.action_response(r) except Exception as e: if elem is None: msg = unicode(e) else: msg = _( "Action \"%(action)s\" failed for %(record)s:") % dict( action=ar.bound_action.full_name(), record=obj2unicode(elem)) msg += "\n" + unicode(e) msg += '.\n' + _( "An error report has been sent to the system administrator.") logger.warning(msg) logger.exception(e) r = ar.ui.error(e,msg,alert=_("Oops!")) return ar.ui.action_response(r)
def delete_element(ar,elem): assert elem is not None msg = ar.actor.disable_delete(elem,ar) if msg is not None: rv = ar.ui.error(None,msg,alert=True) return ar.ui.action_response(rv) #~ dblogger.log_deleted(ar.request,elem) #~ changes.log_delete(ar.request,elem) dd.pre_ui_delete.send(sender=elem,request=ar.request) try: elem.delete() except Exception,e: dblogger.exception(e) msg = _("Failed to delete %(record)s : %(error)s." ) % dict(record=obj2unicode(elem),error=e) #~ msg = "Failed to delete %s." % element_name(elem) rv = ar.ui.error(None,msg) return ar.ui.action_response(rv)
def form2obj_and_save(ar,data,elem,is_new,restful,file_upload=False): # **kw2save): """ Parses the data from HttpRequest to the model instance and saves it. """ #~ self = settings.LINO.ui request = ar.request rh = ar.ah #~ logger.info('20120814 form2obj_and_save %r', data) #~ print 'form2obj_and_save %r' % data #~ logger.info('20120228 before store.form2obj , elem is %s' % obj2str(elem)) # store normal form data (POST or PUT) #~ original_state = dict(elem.__dict__) if not is_new: watcher = dd.ChangeWatcher(elem) try: rh.store.form2obj(ar,data,elem,is_new) elem.full_clean() except CATCHED_AJAX_EXCEPTIONS as e: return ajax_error(e) kw = dict(success=True) #~ except exceptions.ValidationError, e: #~ kw = settings.LINO.ui.error(e) #~ return json_response(kw) #~ dirty = False #~ missing = object() #~ for k, v in original_state.iteritems(): #~ if v != elem.__dict__.get(k, missing): #~ dirty = True #~ if not dirty: if is_new or watcher.is_dirty(): elem.before_ui_save(ar) #~ if not is_new: #~ dblogger.log_changes(request,elem) kw2save = {} if is_new: kw2save.update(force_insert=True) else: kw2save.update(force_update=True) try: elem.save(**kw2save) except CATCHED_AJAX_EXCEPTIONS,e: return ajax_error(e) #~ return views.json_response_kw(success=False, #~ msg=_("There was a problem while saving your data:\n%s") % e) if is_new: dd.pre_ui_create.send(elem,request=request) #~ changes.log_create(request,elem) kw.update( message=_("%s has been created.") % obj2unicode(elem)) #~ record_id=elem.pk) else: watcher.send_update(request) #~ watcher.log_diff(request) kw.update(message=_("%s has been updated.") % obj2unicode(elem))
#~ msg=_("There was a problem while saving your data:\n%s") % e) if is_new: dd.pre_ui_create.send(elem,request=request) #~ changes.log_create(request,elem) kw.update( message=_("%s has been created.") % obj2unicode(elem)) #~ record_id=elem.pk) else: watcher.send_update(request) #~ watcher.log_diff(request) kw.update(message=_("%s has been updated.") % obj2unicode(elem)) else: kw.update(message=_("%s : nothing to save.") % obj2unicode(elem)) kw = elem.after_ui_save(ar,**kw) if restful: # restful mode (used only for Ext.ensible) needs list_fields, not detail_fields kw.update(rows=[rh.store.row2dict(ar,elem,rh.store.list_fields)]) elif file_upload: kw.update(record_id=elem.pk) return json_response(kw,content_type='text/html') else: # 20120814 #~ logger.info("20120816 %r", ar.action) #~ if isinstance(ar.bound_action.action,actions.GridEdit): #~ if ar.bound_action.action.action_name in ('put','post'): # grid.on_afteredit #~ kw.update(rows=[rh.store.row2list(ar,elem)]) #~ else: