Repository: incubator-singa Updated Branches: refs/heads/master f94ec89fc -> d2a8d7737
SINGA-266 Add Rafiki python toolkits - change agent api to support genernal post request Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/d98ad694 Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/d98ad694 Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/d98ad694 Branch: refs/heads/master Commit: d98ad694404ca23255bedf51a7ec44dae387f76b Parents: f94ec89 Author: aaronwwf <[email protected]> Authored: Wed Jan 4 11:05:19 2017 +0800 Committer: aaronwwf <[email protected]> Committed: Wed Jan 4 11:08:28 2017 +0800 ---------------------------------------------------------------------- python/rafiki/agent.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/d98ad694/python/rafiki/agent.py ---------------------------------------------------------------------- diff --git a/python/rafiki/agent.py b/python/rafiki/agent.py index 8974051..d9e4e7a 100644 --- a/python/rafiki/agent.py +++ b/python/rafiki/agent.py @@ -21,6 +21,9 @@ from flask_cors import CORS, cross_origin import os, traceback, sys import time from werkzeug.utils import secure_filename +from werkzeug.datastructures import CombinedMultiDict, MultiDict +import pickle +import uuid class MsgType: def __init__(self, name): @@ -82,7 +85,10 @@ class Agent(): def pull(self): if not self.command_queue.empty(): - return self.command_queue.get() + msg,data=self.command_queue.get() + if msg.is_request(): + data = pickle.loads(data) + return msg,data return None,None def push(self,msg,value): @@ -162,12 +168,12 @@ def getTopKData(): def api(): global info_queue_,command_queue_ try: - file = request.files['image'] - filename = secure_filename(file.filename) - filepath=os.path.join(os.getcwd(), filename) - file.save(filepath) - command_queue_.put((MsgType.kRequest,filepath)) + files=transformFile(request.files) + values = CombinedMultiDict([request.args,request.form,files]) + req_str = pickle.dumps(values) + command_queue_.put((MsgType.kRequest,req_str)) msg,response=getDataFromInfoQueue(True) + deleteFiles(files) return response except: traceback.print_exc() @@ -194,3 +200,20 @@ def failure(message): '''return failure status in json format''' res = dict(result="message", message=message) return jsonify(res) + +def transformFile(files): + result= MultiDict([]) + for f in files.keys(): + file = files[f] + unique_filename = str(uuid.uuid4())+secure_filename(file.filename) + filepath=os.path.join(os.getcwd(),unique_filename) + file.save(filepath) + result.add(f,filepath) + return result + +def deleteFiles(files): + for f in files.keys(): + filepath = files[f] + os.remove(filepath) + #print "remove",filepath + return
