1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import re
- from core.Utils import Utils
- from core.ConfigurationManager.BrainLoader import BrainLoader
- from core.Models import Order
- from core.NeuroneLauncher import NeuroneLauncher
- import logging
- logging.basicConfig()
- logger = logging.getLogger("jarvis")
- class OrderAnalyser:
- def __init__(self, order, main_controller=None, brain_file=None):
- """
- Class used to load brain and run neuron attached to the received order
- :param order: spelt order
- :param main_controller
- :param brain_file: To override the default brain.yml file
- """
- self.main_controller = main_controller
- self.order = order
- if brain_file is None:
- self.brain = BrainLoader.get_brain()
- else:
- self.brain = BrainLoader.get_brain(file_path=brain_file)
- logger.debug("Receiver order: %s" % self.order)
- def start(self):
- synapses_found = False
- for synapse in self.brain.synapses:
- for signal in synapse.signals:
- if type(signal) == Order:
- if self._spelt_order_match_brain_order(signal.sentence):
- synapses_found = True
- logger.debug("Order found! Run neurons: %s" % synapse.neurons)
- Utils.print_success("Order matched in the brain. Running synapse \"%s\"" % synapse.name)
- for neuron in synapse.neurons:
- NeuroneLauncher.start_neurone(neuron)
- if not synapses_found:
- Utils.print_info("No synapse match the captured order: %s" % self.order)
- def _spelt_order_match_brain_order(self, order_to_test):
- """
- test if the current order match the order spelt by the user
- :param order_to_test:
- :return:
- """
- my_regex = r"\b(?=\w)" + re.escape(order_to_test) + r"\b(?!\w)"
- if re.search(my_regex, self.order, re.IGNORECASE):
- return True
- return False
|