class Controller(object):

    def __init__(self):
        # vm registries
        self.label_vm   = []
        self.feature_vm = []
        self.classify_vm = []
        self.logger         = MyUtils.getLogger('controller')
        
        #file manager
        self.data_manager = StorageManager('test1')
        self.db_manager = DBManager()
        
        #engines

        # rpc server for now for handling client request
        rpc_paths = ('/RPC2',)
        # Create server
        self.server = SimpleXMLRPCServer(("0.0.0.0", 8888))
        self.server.register_introspection_functions()
        self.server.register_function(self.addImage, 'addImage')
        self.server.serve_forever()


    def decode_image_from_string(self,s):
        return np.fromstring(s, np.uint8)
        
    def addImage(self, image_name, image, override=False):
        # save image to disk first, and then upload to s3
        self.logger.debug('received data. override? {}'.format(override))

        full_path = './tmp/'+image_name
        with open(full_path, 'wb') as f:
            f.write(self.decode_image_from_string(image.data))

        added = False

        if (override or not self.db_manager.hasImage(image_name)):
            self.data_manager.uploadFile(image_name,'./tmp', image_name)
            # file path, is just its image name in s3
            added = self.db_manager.addImage(image_name, override)

#        os.remove(full_path)        
        return added