浏览代码

run a synapse by its name over the api ok

nico 8 年之前
父节点
当前提交
24f845e492
共有 2 个文件被更改,包括 45 次插入14 次删除
  1. 43 12
      core/RestAPI/FlaskAPI.py
  2. 2 2
      test.py

+ 43 - 12
core/RestAPI/FlaskAPI.py

@@ -4,22 +4,36 @@ from flask import jsonify
 
 from core.ConfigurationManager.BrainLoader import BrainLoader
 from core.RestAPI.utils import requires_auth
+from core.SynapseLauncher import SynapseLauncher
 
 
 class FlaskAPI(threading.Thread):
-    def __init__(self, app, brain):
+    def __init__(self, app, brain_file=None):
         super(FlaskAPI, self).__init__()
         self.app = app
-        self.brain = brain
+        self.brain_file = brain_file
+        self.brain_yaml = BrainLoader.get_yaml_config(file_path=self.brain_file)
 
-        self.brain_yaml = BrainLoader.get_yaml_config()
-
-        self.app.add_url_rule('/synapses', view_func=self.get_synapses, methods=['GET'])
+        self.app.add_url_rule('/synapses/', view_func=self.get_synapses, methods=['GET'])
         self.app.add_url_rule('/synapses/<synapse_name>', view_func=self.get_synapse, methods=['GET'])
+        self.app.add_url_rule('/synapses/<synapse_name>', view_func=self.run_synapse, methods=['POST'])
 
     def run(self):
         self.app.run(host='0.0.0.0', debug=True, threaded=True, use_reloader=False)
 
+    def _get_synapse_by_name(self, synapse_name):
+        """
+        Find a synapse in the brain by its name
+        :param synapse_name:
+        :return:
+        """
+        all_synapse = self.brain_yaml
+        for el in all_synapse:
+            print el
+            if el[0]["name"] in synapse_name:
+                return el[0]
+        return None
+
     @requires_auth
     def get_synapses(self):
         """
@@ -31,14 +45,9 @@ class FlaskAPI(threading.Thread):
     @requires_auth
     def get_synapse(self, synapse_name):
         """
-        get all synapse
+        get a synapse by its name
         """
-        synapse_target = None
-        all_synapse = self.brain_yaml
-        for el in all_synapse:
-            print el
-            if el[0]["name"] in synapse_name:
-                synapse_target = el[0]
+        synapse_target = self._get_synapse_by_name(synapse_name)
         if synapse_target is not None:
             data = jsonify(synapses=synapse_target)
             return data, 200
@@ -47,3 +56,25 @@ class FlaskAPI(threading.Thread):
             "synapse name not found": "%s" % synapse_name
         }
         return jsonify(error=data), 404
+
+    @requires_auth
+    def run_synapse(self, synapse_name):
+        """
+        Run a synapse by its name
+        test with curl:
+        curl -i --user admin:secret -X POST  http://localhost:5000/synapses/say-hello
+        :param synapse_name:
+        :return:
+        """
+        synapse_target = self._get_synapse_by_name(synapse_name)
+
+        if synapse_target is None:
+            data = {
+                "synapse name not found": "%s" % synapse_name
+            }
+            return jsonify(error=data), 404
+
+        # run the synapse
+        SynapseLauncher.start_synapse(synapse_name, brain_file=self.brain_file)
+        data = jsonify(synapses=synapse_target)
+        return data, 201

+ 2 - 2
test.py

@@ -22,10 +22,10 @@ logger.setLevel(logging.DEBUG)
 # oa.start()
 
 
-brain = BrainLoader.get_brain()
+
 
 app = Flask(__name__)
-flask_api = FlaskAPI(app, brain)
+flask_api = FlaskAPI(app)
 flask_api.start()