Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
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