OrderAnalyser.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import re
  2. from core import ConfigurationManager
  3. from core.ConfigurationManager.BrainLoader import BrainLoader
  4. from core.Models import Order
  5. from core.NeuroneLauncher import NeuroneLauncher
  6. import logging
  7. class OrderAnalyser:
  8. def __init__(self, order, main_controller=None, brain_file=None):
  9. """
  10. Class used to load brain and run neuron attached to the received order
  11. :param order: spelt order
  12. :param main_controller
  13. :param brain_file: To override the default brain.yml file
  14. """
  15. self.main_controller = main_controller
  16. self.order = order
  17. if brain_file is None:
  18. self.brain = BrainLoader.get_brain()
  19. else:
  20. self.brain = BrainLoader(brain_file).get_brain()
  21. logging.info("Receiver order: %s" % self.order)
  22. def start(self):
  23. for synapse in self.brain.synapes:
  24. for signal in synapse.signals:
  25. if type(signal) == Order:
  26. if self._spelt_order_match_brain_order(signal.sentence):
  27. print "Order found! Run neurons: %s" % synapse.neurons
  28. for neuron in synapse.neurons:
  29. NeuroneLauncher.start_neurone(neuron)
  30. # once we ran all plugin, we can start back jarvis trigger
  31. if self.main_controller is not None:
  32. self.main_controller.unpause_jarvis_trigger()
  33. def _spelt_order_match_brain_order(self, order_to_test):
  34. """
  35. test if the current order match the order spelt by the user
  36. :param order_to_test:
  37. :return:
  38. """
  39. my_regex = r"\b(?=\w)" + re.escape(order_to_test) + r"\b(?!\w)"
  40. if re.search(my_regex, self.order, re.IGNORECASE):
  41. return True
  42. return False