def handle_result(self): """ Check every 100 ms if there is something new in the queue. Handle all the messages currently in the queue (if any). """ if not self.scidb_connector.running and self.scidb_connector.result_queue.qsize() == 0: print >> sys.stdout, 'Stopping Image Loader...' return if self.scidb_connector.result_queue.qsize(): try: print >> sys.stdout, 'Loading image...' start_time = time.clock() query_json = self.scidb_connector.result_queue.get(0) result = SciDB.SciDB_Result(query_json) # Make figure if query_json['request']['options']['iterative']: scatter = scalrr_vis.plot_image(result, ZSCALE, master=self.master, title="Iteration " + str(len(self.iterations) + 1)) self.master = result.data_array self.add_graph(scatter) else: self.master = None scatter = scalrr_vis.plot_image(result, ZSCALE, title=query_json['request']['query']) self.update_graph(scatter) end_time = time.clock() print >> sys.stdout, 'Done... ', end_time-start_time self.ui_root.after(500, self.handle_result) except Queue.Empty: pass else: self.ui_root.after(1000, self.handle_result)
def process_query_image(): if request.args['iterative']: query_text = request.args['query'].replace("@","@"+str(request.args['iteration'])) title = "Iteration " + str(request.args['iteration']) else: query_text = str(request.args['query']) title = query_text iterative = request.args['iterative'] z_scale = request.args['z_scale'] language = str(request.args['language']) callback = request.args['callback'] query_lines = query_text.split("\n") db_interface.connect() # process all queries except for the last one for query_line in query_lines[:-1]: # process all lines except the last one db_interface.executeQuery(str(query_line), str(language)) # process last query query_result = db_interface.executeQuery(str(query_lines[-1]), str(language)) if query_result is None: # error processing query return make_response(json.dumps({ 'request': request.json, 'status': 'ERROR', 'message': "error processing query", })) data_array, array_dim = db_interface.getFirstAttrArrFromQueryInNumPY(query_result) db_interface.disconnect() #print >> sys.stdout, response_json result = SciDB.SciDB_Result(data_array) # Get the image array if not iterative: img_array = result.get_data_array() elif request.args['iteration'] == 1: img_array = result.get_data_array() else: master = memcache.get(session.pop('previous_data_key', None), None) img_array = result.get_img_array(master) # Get z min and max if z_scale == True: z_min, z_max = zscale.zscale(result.data_array, nsamples=2000, contrast=0.25) else: z_min, z_max = (array_dim[2][0], array_dim[2][1]) #TODO fix this, currently zmin and zmax are unknown # Make figure output = scalrr_vis.plot_image(img_array, z_min, z_max) encoded_image = base64.b64encode(output.getvalue()) # Save session data memcache[query_text] = result.get_data_array() session['previous_data_key'] = query_text # Make response json_message = { 'request': request.args, 'status': 'OK', 'image': encoded_image, #"plot": {"title": title, "x_axis": result.x_name, "y_axis": result.y_name, "z_axis": result.z_name}, "dimensions": { "x":{"min": array_dim[0][0], "max": array_dim[0][1]}, "y":{"min": array_dim[1][0], "max": array_dim[1][1]}, "z":{"min": array_dim[2][0], "max": array_dim[2][1]} } } message = callback + "(" + json.dumps(json_message) + ")" response = make_response(message) #print >> sys.stdout, json_message return response