OrderAnalyser.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. logging.basicConfig()
  8. logger = logging.getLogger("jarvis")
  9. class OrderAnalyser:
  10. def __init__(self, order, main_controller=None, brain_file=None):
  11. """
  12. Class used to load brain and run neuron attached to the received order
  13. :param order: spelt order
  14. :param main_controller
  15. :param brain_file: To override the default brain.yml file
  16. """
  17. self.main_controller = main_controller
  18. self.order = order
  19. if brain_file is None:
  20. self.brain = BrainLoader().get_brain()
  21. else:
  22. self.brain = BrainLoader(brain_file).get_brain()
  23. logger.info("Receiver order: %s" % self.order)
  24. def start(self):
  25. for synapse in self.brain.synapes:
  26. for signal in synapse.signals:
  27. if type(signal) == Order:
  28. if self._spelt_order_match_brain_order(signal.sentence):
  29. logger.debug("Order found! Run neurons: %s" % synapse.neurons)
  30. for neuron in synapse.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