OrderAnalyser.py 1.8 KB

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