def interact(self, request, pk=None): '''Used for interactive widgets.''' w = self.get_object() if request.method == 'GET': input_dict = {} output_dict = {} for i in w.inputs.all(): if not i.parameter: if i.connections.count() > 0: i.value = i.connections.all()[0].output.value i.save() else: i.value = None i.save() if i.multi_id == 0: input_dict[i.variable] = i.value else: if not i.variable in input_dict: input_dict[i.variable] = [] if not i.value == None: input_dict[i.variable].append(i.value) for o in w.outputs.all(): output_dict[o.variable] = o.value view_to_call = getattr(workflows_app.interaction_views, w.abstract_widget.interaction_view) return view_to_call(request, input_dict, output_dict, w) else: # POST try: data = dict(request.POST) if request.POST else request.data WidgetRunner.run_post(w, data) # w.interaction_waiting = False # w.save() if w.abstract_widget.visualization_view != '': data = json.dumps( {'status': 'visualize', 'message': 'Visualizing widget {}.'.format(w.name), 'widget_id': w.id}) else: data = json.dumps( {'status': 'ok', 'message': 'Widget {} executed successfully.'.format(w.name), 'widget_id': w.id}) except Exception, e: w.error = True w.running = False w.finished = False w.interaction_waiting = False w.interaction_finished = False w.save() print traceback.format_exc(e) # raise for o in w.outputs.all(): o.value = None o.save() data = json.dumps({'status': 'error', 'message': 'Error occurred when trying to execute widget \'{}\': {}'.format(w.name, str(e))}) return HttpResponse(data, 'application/javascript')
def interact(self, request, pk=None): '''Used for interactive widgets.''' w = self.get_object() if request.method == 'GET': input_dict = {} output_dict = {} for i in w.inputs.all(): #.defer('value'): if i.multi_id == 0: input_dict[i.variable] = i.value else: if not i.variable in input_dict: input_dict[i.variable] = [] if i.value is not ValueNotSet: input_dict[i.variable].append(i.value) for o in w.outputs.all(): output_dict[o.variable] = o.value view_to_call = getattr(workflows_app.interaction_views, w.abstract_widget.interaction_view) return view_to_call(request, input_dict, output_dict, w) else: # POST try: data = dict(request.POST) if request.POST else request.data WidgetRunner.run_post(w, data) # w.interaction_waiting = False # w.save() if w.abstract_widget.visualization_view != '': data = json.dumps({ 'status': 'visualize', 'message': 'Visualizing widget {}.'.format(w.name), 'widget_id': w.id }) else: data = json.dumps({ 'status': 'ok', 'message': 'Widget {} executed successfully.'.format(w.name), 'widget_id': w.id }) except Exception as e: w.error = True w.running = False w.finished = False w.interaction_waiting = False w.interaction_finished = False w.save() print(traceback.format_exc(e)) # raise for o in w.outputs.all(): o.value = None o.save() data = json.dumps({ 'status': 'error', 'message': 'Error occurred when trying to execute widget \'{}\': {}'. format(w.name, str(e)) }) return HttpResponse(data, 'application/javascript')