Browse Source

Merge branch 'refacto_brain_loading' into dev

monf 8 years ago
parent
commit
cac76de0f6

+ 2 - 2
core/CrontabManager.py

@@ -19,9 +19,9 @@ KALLIOPE_ENTRY_POINT_SCRIPT = "kalliope.py"
 
 class CrontabManager:
 
-    def __init__(self, brain_file=None):
+    def __init__(self, brain=None):
         self.my_user_cron = CronTab(user=True)
-        self.brain = BrainLoader.get_brain(file_path=brain_file)
+        self.brain = brain
         self.base_command = self._get_base_command()
 
     def load_events_in_crontab(self):

+ 2 - 8
core/MainController.py

@@ -18,17 +18,11 @@ logger = logging.getLogger("kalliope")
 
 
 class MainController:
-    def __init__(self, brain_file=None):
-        self.brain_file = brain_file
+    def __init__(self, brain=None):
+        self.brain = brain
         # get global configuration
         self.settings = SettingLoader.get_settings()
 
-        # load the brain
-        if brain_file is None:
-            self.brain = BrainLoader.get_brain()
-        else:
-            self.brain = BrainLoader.get_brain(file_path=brain_file)
-
         # run the api if the user want it
         if self.settings.rest_api.active:
             Utils.print_info("Starting REST API Listening port: %s" % self.settings.rest_api.port)

+ 1 - 1
core/RestAPI/FlaskAPI.py

@@ -85,7 +85,7 @@ class FlaskAPI(threading.Thread):
             return jsonify(error=data), 404
 
         # run the synapse
-        SynapseLauncher.start_synapse(synapse_name, brain_file=self.brain.brain_file)
+        SynapseLauncher.start_synapse(synapse_name, brain=self.brain)
         data = jsonify(synapses=synapse_target)
         return data, 201
 

+ 8 - 11
core/ShellGui.py

@@ -1,18 +1,16 @@
 # coding: utf8
 
+import locale
 import logging
-
+import signal
 import sys
 
-import signal
 from dialog import Dialog
-import locale
 
 from core import OrderListener
-from core.ConfigurationManager.BrainLoader import BrainLoader
+from core.ConfigurationManager import SettingLoader
 from core.SynapseLauncher import SynapseLauncher
 from core.Utils import Utils
-from core.ConfigurationManager import SettingLoader
 from neurons import Say
 
 logging.basicConfig()
@@ -28,9 +26,10 @@ signal.signal(signal.SIGINT, signal_handler)
 
 
 class ShellGui:
-    def __init__(self, brain_file=None):
+    def __init__(self, brain=None):
         # override brain
-        self.brain_file = brain_file
+        self.brain = brain
+
         # get settings
         self.settings = SettingLoader.get_settings()
         locale.setlocale(locale.LC_ALL, '')
@@ -155,13 +154,11 @@ class ShellGui:
         Show a list of available synapse in the brain to run it directly
         :return:
         """
-        # get the list of synapse from the brain
-        brain = BrainLoader.get_brain(file_path=self.brain_file)
 
         # create a tuple for the list menu
         choices = list()
         x = 0
-        for el in brain.synapses:
+        for el in self.brain.synapses:
             tup = (str(el.name), str(x))
             choices.append(tup)
             x += 1
@@ -173,5 +170,5 @@ class ShellGui:
             self.show_main_menu()
         if code == self.d.OK:
             logger.debug("Run synapse from GUI: %s" % tag)
-            SynapseLauncher.start_synapse(tag, brain_file=self.brain_file)
+            SynapseLauncher.start_synapse(tag, brain=self.brain)
             self.show_synapses_test_menu()

+ 4 - 7
core/SynapseLauncher.py

@@ -12,22 +12,19 @@ class SynapseLauncher(object):
         pass
 
     @classmethod
-    def start_synapse(cls, name, brain_file=None):
+    def start_synapse(cls, name, brain=None):
         """
         Start a synapse by it's name
         :param name: Name (Unique ID) of the synapse to launch
-        :param brain_file: Brain file path to load instead of the default one
+        :param brain: Brain instance
         """
         synapse_name_launch = name
         # get the brain
-        if brain_file is None:
-            brain = BrainLoader.get_brain()
-        else:
-            brain = BrainLoader.get_brain(file_path=brain_file)
+        cls.brain = brain
 
         # check if we have found and launched the synapse
         synapse_launched = False
-        for synapse in brain.synapses:
+        for synapse in cls.brain.synapses:
             if synapse.name == synapse_name_launch:
                 cls._run_synapse(synapse)
                 synapse_launched = True

+ 1 - 0
install/files/python_requirements.txt

@@ -13,4 +13,5 @@ ipaddress==1.0.16
 pyowm==2.5.0
 python-twitter==3.1
 flask==0.11.1
+Flask-Restful==0.3.5
 wikipedia==1.4.0

+ 10 - 7
kalliope.py

@@ -5,6 +5,7 @@ import logging
 
 from core import ShellGui
 from core import Utils
+from core.ConfigurationManager.BrainLoader import BrainLoader
 from core.CrontabManager import CrontabManager
 from core.MainController import MainController
 import signal
@@ -49,6 +50,11 @@ def main():
 
     # by default, no brain file is set. Use the default one: brain.yml in the root path
     brain_file = None
+    # check if user set a brain.yml file
+    if args.brain_file:
+        brain_file = args.brain_file
+    # load the brain once
+    brain = BrainLoader.get_brain(file_path=brain_file)
 
     # check the user provide a valid action
     if args.action not in ACTION_LIST:
@@ -56,17 +62,14 @@ def main():
         parser.print_help()
 
     if args.action == "start":
-        # check if user set a brain.yml file
-        if args.brain_file:
-            brain_file = args.brain_file
 
         # user set a synapse to start
         if args.run_synapse is not None:
-            SynapseLauncher.start_synapse(args.run_synapse, brain_file=brain_file)
+            SynapseLauncher.start_synapse(args.run_synapse, brain=brain)
 
         if args.run_synapse is None:
             # first, load events in crontab
-            crontab_manager = CrontabManager(brain_file=brain_file)
+            crontab_manager = CrontabManager(brain=brain)
             crontab_manager.load_events_in_crontab()
             Utils.print_success("Events loaded in crontab")
             # then start kalliope
@@ -75,10 +78,10 @@ def main():
             # catch signal for killing on Ctrl+C pressed
             signal.signal(signal.SIGINT, signal_handler)
             # start the main controller
-            MainController(brain_file=brain_file)
+            MainController(brain=brain)
 
     if args.action == "gui":
-        ShellGui(args.brain_file)
+        ShellGui(brain=brain)
 
 
 def configure_logging(debug=None):