OrderAnalyser.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import re
  2. from core.Utils import Utils
  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.get_brain(file_path=brain_file)
  23. logger.debug("Receiver order: %s" % self.order)
  24. def start(self):
  25. synapses_found = False
  26. for synapse in self.brain.synapses:
  27. for signal in synapse.signals:
  28. if type(signal) == Order:
  29. if self._spelt_order_match_brain_order(signal.sentence):
  30. synapses_found = True
  31. logger.debug("Order found! Run neurons: %s" % synapse.neurons)
  32. Utils.print_success("Order matched in the brain. Running synapse \"%s\"" % synapse.name)
  33. for neuron in synapse.neurons:
  34. NeuroneLauncher.start_neurone(neuron)
  35. if not synapses_found:
  36. Utils.print_info("No synapse match the captured order: %s" % self.order)
  37. def _spelt_order_match_brain_order(self, order_to_test):
  38. """
  39. test if the current order match the order spelt by the user
  40. :param order_to_test:
  41. :return:
  42. """
  43. my_regex = r"\b(?=\w)" + re.escape(order_to_test) + r"\b(?!\w)"
  44. if re.search(my_regex, self.order, re.IGNORECASE):
  45. return True
  46. return False