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

Reply via email to