OrderAnalyser.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from Utils import *
  2. import re
  3. class OrderAnalyser:
  4. def __init__(self, main_controller, order):
  5. """
  6. Class used to load
  7. :param order: spelt order
  8. :param main_controller
  9. """
  10. self.main_controller = main_controller
  11. self.order = order
  12. self.brain = get_brain()
  13. print "Receiver order: %s" % self.order
  14. def start(self):
  15. print self.brain
  16. for el in self.brain:
  17. # print el
  18. # print el["when"]
  19. whens = el["when"]
  20. for when in whens:
  21. brain_order = when["order"]
  22. print "order to test: %s" % brain_order
  23. if self._spelt_order_match_brain_order(brain_order):
  24. print "Order found! Run neurons: %s" % el["neurons"]
  25. neurons = el["neurons"]
  26. for neuron in neurons:
  27. for plugin, parameter in neuron.items():
  28. # capitalizes the first letter (because classes have first letter upper case)
  29. plugin = plugin.capitalize()
  30. print "Run plugin %s with parameter %s" % (plugin, parameter)
  31. mod = __import__('neurons', fromlist=[plugin])
  32. klass = getattr(mod, plugin)
  33. # run the plugin
  34. if not parameter:
  35. klass()
  36. else:
  37. klass(parameter)
  38. # once we ran all plugin, we can start back jarvis triger
  39. self.main_controller.unpause_jarvis_trigger()
  40. def _spelt_order_match_brain_order(self, order_to_test):
  41. """
  42. test if the current order match the order spelt by the user
  43. :param order_to_test:
  44. :return:
  45. """
  46. my_regex = r"\b(?=\w)" + re.escape(order_to_test) + r"\b(?!\w)"
  47. if re.search(my_regex, self.order, re.IGNORECASE):
  48. return True