FlaskAPI.py 2.5 KB

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