FlaskAPI.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import threading
  2. from flask import jsonify
  3. from core.ConfigurationManager.BrainLoader import BrainLoader
  4. from core.RestAPI.utils import requires_auth
  5. from core.SynapseLauncher import SynapseLauncher
  6. class FlaskAPI(threading.Thread):
  7. def __init__(self, app, brain_file=None):
  8. super(FlaskAPI, self).__init__()
  9. self.app = app
  10. self.brain_file = brain_file
  11. self.brain_yaml = BrainLoader.get_yaml_config(file_path=self.brain_file)
  12. self.app.add_url_rule('/synapses/', view_func=self.get_synapses, methods=['GET'])
  13. self.app.add_url_rule('/synapses/<synapse_name>', view_func=self.get_synapse, methods=['GET'])
  14. self.app.add_url_rule('/synapses/<synapse_name>', view_func=self.run_synapse, methods=['POST'])
  15. def run(self):
  16. self.app.run(host='0.0.0.0', debug=True, threaded=True, use_reloader=False)
  17. def _get_synapse_by_name(self, synapse_name):
  18. """
  19. Find a synapse in the brain by its name
  20. :param synapse_name:
  21. :return:
  22. """
  23. all_synapse = self.brain_yaml
  24. for el in all_synapse:
  25. print el
  26. if el[0]["name"] in synapse_name:
  27. return el[0]
  28. return None
  29. @requires_auth
  30. def get_synapses(self):
  31. """
  32. get all synapse
  33. """
  34. data = jsonify(synapses=self.brain_yaml)
  35. return data, 200
  36. @requires_auth
  37. def get_synapse(self, synapse_name):
  38. """
  39. get a synapse by its name
  40. """
  41. synapse_target = self._get_synapse_by_name(synapse_name)
  42. if synapse_target is not None:
  43. data = jsonify(synapses=synapse_target)
  44. return data, 200
  45. data = {
  46. "synapse name not found": "%s" % synapse_name
  47. }
  48. return jsonify(error=data), 404
  49. @requires_auth
  50. def run_synapse(self, synapse_name):
  51. """
  52. Run a synapse by its name
  53. test with curl:
  54. curl -i --user admin:secret -X POST http://localhost:5000/synapses/say-hello
  55. :param synapse_name:
  56. :return:
  57. """
  58. synapse_target = self._get_synapse_by_name(synapse_name)
  59. if synapse_target is None:
  60. data = {
  61. "synapse name not found": "%s" % synapse_name
  62. }
  63. return jsonify(error=data), 404
  64. # run the synapse
  65. SynapseLauncher.start_synapse(synapse_name, brain_file=self.brain_file)
  66. data = jsonify(synapses=synapse_target)
  67. return data, 201