浏览代码

crontab manager now based on model objects

Nicolas Marcq 8 年之前
父节点
当前提交
1a8dba4558

+ 25 - 17
core/ConfigurationManager/BrainLoader.py

@@ -34,6 +34,11 @@ class BrainLoader(YAMLLoader):
         return events_in_brain
 
     def get_brain(self):
+        """
+        return a brain object from YAML settings
+        :return: Brain object
+        :rtype: Brain
+        """
         # get the brain with dict
         dict_brain = self.get_config()
         # create a new brain
@@ -41,14 +46,16 @@ class BrainLoader(YAMLLoader):
         # create list of Synapse
         synapses = list()
         for synapes_dict in dict_brain:
-            print synapes_dict
+            # print synapes_dict
             if ConfigurationChecker().check_synape_dict(synapes_dict):
-                print "synapes_dict ok"
+                # print "synapes_dict ok"
                 name = synapes_dict["name"]
                 neurons = self._get_neurons(synapes_dict["neurons"])
                 signals = self._get_signals(synapes_dict["signals"])
                 new_synapse = Synapse(name=name, neurons=neurons, signals=signals)
                 synapses.append(new_synapse)
+        brain.synapes = synapses
+        return brain
 
     def _get_neurons(self, neurons_dict):
         """
@@ -58,25 +65,26 @@ class BrainLoader(YAMLLoader):
         """
         neurons = list()
         for neuron_dict in neurons_dict:
-            print neuron_dict
+            # print neuron_dict
             if ConfigurationChecker().check_neuron_dict(neuron_dict):
-                print "Neurons dict ok"
-            for neuron_name in neuron_dict:
-                name = neuron_name
-                parameters = neuron_dict[name]
-                # print parameters
-                new_neuron = Neurone(name=name, parameters=parameters)
-                neurons.append(new_neuron)
+                # print "Neurons dict ok"
+                for neuron_name in neuron_dict:
+                    name = neuron_name
+                    parameters = neuron_dict[name]
+                    # print parameters
+                    new_neuron = Neurone(name=name, parameters=parameters)
+                    neurons.append(new_neuron)
 
         return neurons
 
     def _get_signals(self, signals_dict):
-        print signals_dict
+        # print signals_dict
         signals = list()
         for signal_dict in signals_dict:
             if ConfigurationChecker().check_signal_dict(signal_dict):
-                print "Signals dict ok"
-                event_or_oder = self._get_event_or_order_from_dict(signal_dict)
+                # print "Signals dict ok"
+                event_or_order = self._get_event_or_order_from_dict(signal_dict)
+                signals.append(event_or_order)
 
         return signals
 
@@ -84,14 +92,14 @@ class BrainLoader(YAMLLoader):
     def _get_event_or_order_from_dict(signal_or_event_dict):
 
         if 'event' in signal_or_event_dict:
-            print "is event"
+            # print "is event"
             event = signal_or_event_dict["event"]
             if ConfigurationChecker.check_event_dict(event):
                 return Event(identifier=event["id"], period=event["period"])
 
         if 'order' in signal_or_event_dict:
-            print "is order"
-            if ConfigurationChecker.check_order_dict(signal_or_event_dict["order"]):
-                return Order(signal_or_event_dict["order"])
+            order = signal_or_event_dict["order"]
+            if ConfigurationChecker.check_order_dict(order):
+                return Order(sentence=order)
 
 

+ 3 - 3
core/ConfigurationManager/ConfigurationChecker.py

@@ -31,13 +31,13 @@ class ConfigurationChecker:
     def check_synape_dict(synape_dict):
 
         if 'name' not in synape_dict:
-            raise NoSynapeName("The Synape does not have a name: %s" % synape_dict)
+            raise NoSynapeName("The Synapse does not have a name: %s" % synape_dict)
 
         if 'neurons' not in synape_dict:
-            raise NoSynapeNeurons("The Synape does not have neurons: %s" % synape_dict)
+            raise NoSynapeNeurons("The Synapse does not have neurons: %s" % synape_dict)
 
         if 'signals' not in synape_dict:
-            raise NoSynapeSignals("The Synape does not have signals: %s" % synape_dict)
+            raise NoSynapeSignals("The Synapse does not have signals: %s" % synape_dict)
 
         return True
 

+ 14 - 6
core/CrontabManager.py

@@ -1,6 +1,9 @@
 from crontab import CronTab
 from crontab import CronSlices
 
+from core.ConfigurationManager.BrainLoader import BrainLoader
+from core.Models import Event
+
 
 class InvalidCrontabPeriod(Exception):
     pass
@@ -12,20 +15,25 @@ class CrontabManager:
 
     def __init__(self, brain_file=None):
         self.my_user_cron = CronTab(user=True)
-        self.base_command = "/usr/bin/echo"
+        self.base_command = "/path/to/jarvis/"
+        self.brain = BrainLoader(filename=brain_file).get_brain()
 
     def load_events_in_crontab(self):
         # clean the current crontab from all jarvis event
         self._remove_all_jarvis_job()
         # # load the brain file
-        period_string = "* * 5 5 *"
-        event_id = 1
-        # for all tasks with an event, we add the task id to the crontab
-        self._add_event(period_string=period_string, event_id=event_id)
+        for synapse in self.brain.synapes:
+            for signal in synapse.signals:
+                print signal
+                # if it's an event we add it to the crontab
+                if type(signal) == Event:
+                    print "is event"
+                    # for all tasks with an event, we add the task id to the crontab
+                    self._add_event(period_string=signal.period, event_id=signal.identifier)
 
     def _add_event(self, period_string, event_id):
         my_user_cron = CronTab(user=True)
-        job = my_user_cron.new(command=self.base_command, comment=CRONTAB_COMMENT)
+        job = my_user_cron.new(command=self.base_command+" "+str(event_id), comment=CRONTAB_COMMENT)
         if CronSlices.is_valid(period_string):
             job.setall(period_string)
             job.enable()

+ 2 - 2
core/Models/Brain.py

@@ -1,4 +1,4 @@
 
-class Brain:
+class Brain(object):
     def __init__(self, synapes=None):
-        self.synapes = "synapes"
+        self.synapes = synapes

+ 6 - 1
core/Models/Event.py

@@ -1,4 +1,9 @@
-class Event:
+class Event(object):
     def __init__(self, identifier, period):
         self.identifier = identifier
         self.period = period
+
+    def __str__(self):
+        return "%s: Id: %s, period: %s" % (self.__class__.__name__,
+                                           self.identifier,
+                                           self.period)

+ 2 - 2
core/Models/Neurone.py

@@ -26,14 +26,14 @@ class TTSNotInstantiable(Exception):
     pass
 
 
-class Neurone:
+class Neurone(object):
     def __init__(self, name=None, parameters=None):
         # get the name of the plugin who load Neurone mother class
         # print self.__class__.__name__
         self.name = name
         self.parameters = parameters
 
-        print "Neurone class called with name %s and parameters: %s" % (name, parameters)
+        # print "Neurone class called with name %s and parameters: %s" % (name, parameters)
 
         # get the tts if is specified otherwise use default
         tts = self.parameters.get('tts', None)

+ 4 - 1
core/Models/Order.py

@@ -1,3 +1,6 @@
-class Order:
+class Order(object):
     def __init__(self, sentence):
         self.sentence = sentence
+
+    def __str__(self):
+        return "%s: Sentence: %s" % (self.__class__.__name__, self.sentence)

+ 0 - 5
core/Models/Signal.py

@@ -1,5 +0,0 @@
-class Signal:
-
-    def __init__(self, events, orders):
-        self.events = events
-        self.orders = orders

+ 1 - 1
core/Models/Synapse.py

@@ -1,4 +1,4 @@
-class Synapse:
+class Synapse(object):
     def __init__(self, name, neurons, signals):
         self.name = name
         self.neurons = neurons

+ 5 - 0
core/Models/__init__.py

@@ -0,0 +1,5 @@
+from Event import Event
+from Brain import Brain
+from Order import Order
+from Synapse import Synapse
+from Neurone import Neurone

+ 3 - 25
test.py

@@ -2,6 +2,7 @@
 from core import ConfigurationManager
 from core.ConfigurationManager.BrainLoader import BrainLoader
 from core.CrontabManager import CrontabManager
+from core.Models import Event
 from core.NeuroneLauncher import NeuroneLauncher
 from core.OrderAnalyser import OrderAnalyser
 from core.OrderListener import OrderListener
@@ -16,31 +17,8 @@ from crontab import CronSlices
 #
 # oa.start()
 
-# test
-# cron_manager = CrontabManager()
-# cron_manager.load_events_in_crontab()
 
-class NoEventsFound(Exception):
-    pass
+cron_manager = CrontabManager(brain_file="test.yml")
+cron_manager.load_events_in_crontab()
 
-class NoIdInEvent(Exception):
-    pass
-
-class NoPeriodInEvent(Exception):
-    pass
-
-# events = BrainLoader(filename="test.yml").get_events()
-#
-# # check there is some event in the brain file
-# if len(events) <= 0:
-#     raise NoEventsFound("There is no events in the brain file")
-#
-# # we must check that each event has an id and a period
-# for event in events:
-#     if "id" not in event:
-#         raise NoIdInEvent("No id found event must has an unique id")
-#     if "period" not in event:
-#         raise NoPeriodInEvent("An event must has a period")
-
-brain = BrainLoader(filename="test.yml").get_brain()