Author: remi
Date: 2009-04-06 09:35:25 +0200 (Mon, 06 Apr 2009)
New Revision: 4343

Modified:
   
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
Log:
* refactored the "scheduler" resource according the last scheduler module 
modifications

Modified: 
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
===================================================================
--- 
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
       2009-04-06 07:34:22 UTC (rev 4342)
+++ 
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
       2009-04-06 07:35:25 UTC (rev 4343)
@@ -3,12 +3,24 @@
 # 
==============================================================================
 
 # This resource depends of the following resources :
-'''
+
 import datetime
 
 from util.scheduler.Scheduler import Scheduler
 from util.scheduler.Task import *
 
+# Scheduler manager events/statuses
+ST_NAME_SCM_RUN = "scheduler_manager_run"
+ST_NAME_SCM_TASK_ADDED = "scheduler_manager_task_added"
+ST_NAME_SCM_TASK_REMOVED = "scheduler_manager_task_removed"
+
+# Attitune manager events/statuses list
+SW_NAME_SCHEDULER_MANAGER = [
+    ST_NAME_SCM_RUN,
+    ST_NAME_SCM_TASK_ADDED,
+    ST_NAME_SCM_TASK_REMOVED,
+]
+
 # 
------------------------------------------------------------------------------
 # Declaration of the resource "scheduler".
 # 
------------------------------------------------------------------------------
@@ -22,62 +34,141 @@
         self.name = "scheduler"
         self.comment = "Resource to manage the scheduler."
         self.fileName = RESOURCE_FILENAME
-        self.scheduler = Scheduler()
+        # Create the scheduler.
+        self.__scheduler = Scheduler(globals())
+        self.__scheduler.setOnTaskAddedCallback(self.__onTaskAdded)
+        self.__scheduler.setOnTaskRemovedCallback(self.__onTaskRemoved)
+        # Registering the scheduler manager statuses.
+        for statusName in SW_NAME_SCHEDULER_MANAGER:
+            eventsHandler.insert(statusName)
 
     def start(self):
-        self.scheduler.start()
+        self.__scheduler.start()
+        self.__publishEvents(True, ST_NAME_SCM_RUN, ["True",])
 
     def stop(self):
-        self.scheduler.stop()
+        self.__scheduler.stop()
+        self.__publishEvents(True, ST_NAME_SCM_RUN, ["False",])
 
     # 
--------------------------------------------------------------------------
+    # Private methods
+    # 
--------------------------------------------------------------------------
+
+    def __publishEvents(self, sendToClients, eventName, eventValues = []):
+        def async():
+            values = ""
+            for value in eventValues:
+                values += value + ":"
+            if len(values) > 0:
+                values = values[:-1]
+            eventStruct = {
+                'name' : eventName,
+                'value' : values,
+                'delay' : "0.0",
+                'type' : "string"
+            }
+            if sendToClients:
+                clientsManager.pushEvents([eventStruct,])
+            eventsHandler.emit(eventName, (values, 0.0))
+        t = threading.Thread(target = async)
+        t.start()
+
+    def __onTaskAdded(self, task):
+        print "Task added :", task.getDescription().getName(), 
task.getDescription().toString()
+        self.__publishEvents(True, ST_NAME_SCM_TASK_ADDED,
+            [task.getDescription().getId(), task.getDescription().getName()])
+
+    def __onTaskRemoved(self, task):
+        print "Task removed :", task.getDescription().toString()
+        self.__publishEvents(True, ST_NAME_SCM_TASK_REMOVED,
+            [task.getDescription().getId(), task.getDescription().getName()])
+
+    def weekMaskStringToList(self, weekMaskString):
+        result = [True, True, True, True, True, True, True]
+        if weekMaskString <= 2:
+            return result
+        weekMaskString = weekMaskString[1:-1]
+        try:
+            splitedStr = weekMaskString.split(",")
+            if len(splitedStr) == 7:
+                for i, value in enumerate(splitedStr):
+                    if value == "1":
+                        result[i] = True
+                    else:
+                        result[i] = False
+        except:
+            pass
+        return result
+
+    # 
--------------------------------------------------------------------------
     # Public methods
     # 
--------------------------------------------------------------------------
 
-    def createTask_RunEveryX(self, weekMask, hour, minute, second, command):
+    def getScheduler(self):
+        """Get the scheduler.
+        @return: A Scheduler object.
+        """
+        return self.__scheduler
+
+    def createTask_RunEveryX(self, name, weekMask, hour, minute, second,
+        command, arguments, data):
         """Create a task which start every x delay.
         - hour, minute, second define the time delay between 2 executions.
         - Typically for a pooling task.
+        @param name: Task name.
         @param weekMask: Week mask. [True, True, True, True, True, True, True]
         @param hour: <0..23>
         @param minute: <0..59>
         @param second: <0..59>
         @param command: Command to execute.
-        @return: The task id.
+        @param arguments: Arguments of the command.
+        @param data: User data.
+        @return: The task id and the task name or None None.
         """
-        task = Task(SCH_LOOP_REL, weekMask, hour, minute, second, command)
-        return self.scheduler.insertTask(task)
+        task = Task(SCH_LOOP_REL, weekMask, hour, minute, second, -1, -1, -1,
+            command, arguments, data)
+        return self.__scheduler.insertTask(task, name)
 
-    def createTask_RunEveryXFromFullHour(self, weekMask, hour, minute, second,
-        command):
+    def createTask_RunEveryXFromFullHour(self, name, weekMask, hour, minute, 
second,
+        command, arguments, data):
         """Create a task which start every x delay synchronized with hh:00:00.
         - Typically for an alarm task. (Clock gadget start at hour:00, 15, 30, 
45)
         - The first execution will be at hour begin + delay time.
+        @param name: Task name.
         @param weekMask: Week mask. [True, True, True, True, True, True, True]
         @param hour: <0..23>
         @param minute: <0..59>
         @param second: <0..59>
         @param command: Command to execute.
-        @return: The task id.
+        @param arguments: Arguments of the command.
+        @param data: User data.
+        @return: The task id and the task name or None None.
         """
-        task = Task(SCH_LOOP_ABS, weekMask, hour, minute, second, command)
-        return self.scheduler.insertTask(task)
+        task = Task(SCH_LOOP_ABS, weekMask, hour, minute, second, -1, -1, -1,
+            command, arguments, data)
+        return self.__scheduler.insertTask(task, name)
 
-    def createTask_RunDailyAtTime(self, weekMask, hour, minute, second, 
command):
+    def createTask_RunDailyAtTime(self, name, weekMask, hour, minute, second,
+        command, arguments, data):
         """Create a daily task which run at fixed time.
+        @param name: Task name.
         @param weekMask: Week mask. [True, True, True, True, True, True, True]
         @param hour: <0..23>
         @param minute: <0..59>
         @param second: <0..59>
         @param command: Command to execute.
-        @return: The task id.
+        @param arguments: Arguments of the command.
+        @param data: User data.
+        @return: The task id and the task name or None None.
         """
-        task = Task(SCH_ONCE_ABS, weekMask, hour, minute, second, command)
-        return self.scheduler.insertTask(task)
+        task = Task(SCH_ONCE_ABS, weekMask, hour, minute, second, -1, -1, -1,
+            command, arguments, data)
+        return self.__scheduler.insertTask(task, name)
 
-    def createTask_RunOnceAtDateTime(self, year, month, day, hour, minute,
-        second, command):
+    def createTask_RunOnceAtDateTime(self, name, year, month, day, hour, 
minute,
+        second, command, arguments, data):
         """Create a task which run once time at a specific date time.
+        @param name: Task name.
         @param year: Year.
         @param month: <1..12>
         @param day: <1..31>
@@ -85,34 +176,75 @@
         @param minute: <0..59>
         @param second: <0..59>
         @param command: Command to execute.
-        @return: The task id.
+        @param arguments: Arguments of the command.
+        @param data: User data.
+        @return: The task id and the task name or None None.
         """
         task = Task(SCH_ONCE_ABS, [True, True, True, True, True, True, True],
-            hour, minute, second, command, year, month, day)
-        return self.scheduler.insertTask(task)
+            hour, minute, second, year, month, day, command, arguments, data)
+        return self.__scheduler.insertTask(task, name)
 
-    def createTask_RunOnceDelayed(self, hour, minute, second, command):
+    def createTask_RunOnceDelayed(self, name, hour, minute, second, command,
+        arguments, data):
         """Create a task which run once time after a delay.
+        @param name: Task name.
         @param hour: <0..23>
         @param minute: <0..59>
         @param second: <0..59>
         @param command: Command to execute.
-        @return: The task id.
+        @param arguments: Arguments of the command.
+        @param data: User data.
+        @return: The task id and the task name or None None.
         """
         task = Task(SCH_ONCE_REL, [True, True, True, True, True, True, True],
-            hour, minute, second, command)
-        return self.scheduler.insertTask(task)
+            hour, minute, second, -1, -1, -1, command, arguments, data)
+        return self.__scheduler.insertTask(task, name)
 
+    def createTask(self, command, arguments, taskType, taskName, weekMask, 
hour,
+        minute, second, year, month, day, data):
+        """Create a task to start a gadget.
+        @param command: Command to execute.
+        @param arguments: Arguments of the command.
+        @param taskType: <EVERY X|EVERY X FROM FULL HOUR|DAILY AT|ONCE AT|
+                          ONCE DELAYED>
+        @param taskName: Task name.
+        @param weekMask: Week mask. [True, True, True, True, True, True, True]
+        @param hour: <0..23>
+        @param minute: <0..59>
+        @param second: <0..59>
+        @param year: Year.
+        @param month: <1..12>
+        @param day: <1..31>
+        @param data: User data.
+        @return: The task id and the task name or None None.
+        """
+        if taskType == "EVERY X":
+            return self.createTask_RunEveryX(taskName, weekMask, hour, minute,
+                second, command, arguments, data)
+        if taskType == "EVERY X FROM FULL HOUR":
+            return self.createTask_RunEveryXFromFullHour(taskName, weekMask,
+                hour, minute, second, command, arguments, data)
+        if taskType == "DAILY AT":
+            return self.createTask_RunDailyAtTime(taskName, weekMask, hour,
+                minute, second, command, arguments, data)
+        if taskType == "ONCE AT":
+            return self.createTask_RunOnceAtDateTime(taskName, year, month, 
day,
+                hour, minute, second, command, arguments, data)
+        if taskType == "ONCE DELAYED":
+            return self.createTask_RunOnceDelayed(taskName, hour, minute,
+                second, command, arguments, data)
+        return None, None
+
     def removeTask(self, taskId):
         """Remove a task from the scheduler.
         @param taskId: Task id.
         """
-        self.scheduler.removeTask(taskId)
+        self.__scheduler.removeTask(taskId)
 
     def clear(self):
         """Clear the scheduler.
         """
-        self.scheduler.clear()
+        self.__scheduler.clear()
 
 # Create an instance of the resource
 resourceScheduler = TDSResourceScheduler("resourceScheduler")
@@ -120,193 +252,6 @@
 resourcesManager.addResource(resourceScheduler)
 
 # 
------------------------------------------------------------------------------
-# Declaration of the service "run_daily_at_time".
-# 
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunDailyAtTime(TDSService):
-
-    def configure(self):
-        self.parametersDict = {
-            'command' : 'string',
-            'hour' : 'uint8',
-            'minute' : 'uint8',
-            'second' : 'uint8',
-            'week_mask' : 'string',
-        }
-        self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
-        self.exclusiveExecution = False
-        self.name = "run_daily_at_time"
-        self.comment = "Create a daily task which run at fixed time."
-
-    def execute(self, id, parameters):
-        headersStruct = self.getDefaultHeadersStruct()
-        contentStruct = self.getDefaultContentStruct()
-        contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
-        command = parameters['command']
-        if len(parameters['week_mask']) < 38:
-            weekMask = [True, True, True, True, True, True, True]
-        else:
-            weekMask = eval(parameters['week_mask'][1:-1])
-        hour = parameters['hour']
-        minute = parameters['minute']
-        second = parameters['second']
-        id = resourceScheduler.createTask_RunDailyAtTime(weekMask, hour, 
minute,
-            second, command)
-        contentStruct['root']['data'] = id
-        return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunDailyAtTime)
-
-
-# 
------------------------------------------------------------------------------
-# Declaration of the service "run_every_x".
-# 
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunEveryX(TDSService):
-
-    def configure(self):
-        self.parametersDict = {
-            'command' : 'string',
-            'hour' : 'uint8',
-            'minute' : 'uint8',
-            'second' : 'uint8',
-            'week_mask' : 'string',
-        }
-        self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
-        self.exclusiveExecution = False
-        self.name = "run_every_x"
-        self.comment = "Create a task which start every x delay."
-
-    def execute(self, id, parameters):
-        headersStruct = self.getDefaultHeadersStruct()
-        contentStruct = self.getDefaultContentStruct()
-        contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
-        command = parameters['command']
-        if len(parameters['week_mask']) < 38:
-            weekMask = [True, True, True, True, True, True, True]
-        else:
-            weekMask = eval(parameters['week_mask'][1:-1])
-        hour = parameters['hour']
-        minute = parameters['minute']
-        second = parameters['second']
-        id = resourceScheduler.createTask_RunEveryX(weekMask, hour, minute,
-            second, command)
-        contentStruct['root']['data'] = id
-        return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunEveryX)
-
-# 
------------------------------------------------------------------------------
-# Declaration of the service "run_every_x_from_full_hour".
-# 
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunEveryXFromFullHour(TDSService):
-
-    def configure(self):
-        self.parametersDict = {
-            'command' : 'string',
-            'hour' : 'uint8',
-            'minute' : 'uint8',
-            'second' : 'uint8',
-            'week_mask' : 'string',
-        }
-        self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
-        self.exclusiveExecution = False
-        self.name = "run_every_x_from_full_hour"
-        self.comment = "Create a task which start every x delay synchronized 
with hh:00:00."
-
-    def execute(self, id, parameters):
-        headersStruct = self.getDefaultHeadersStruct()
-        contentStruct = self.getDefaultContentStruct()
-        contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
-        command = parameters['command']
-        if len(parameters['week_mask']) < 38:
-            weekMask = [True, True, True, True, True, True, True]
-        else:
-            weekMask = eval(parameters['week_mask'][1:-1])
-        hour = parameters['hour']
-        minute = parameters['minute']
-        second = parameters['second']
-        id = resourceScheduler.createTask_RunEveryXFromFullHour(weekMask, hour,
-            minute, second, command)
-        contentStruct['root']['data'] = id
-        return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunEveryXFromFullHour)
-
-# 
------------------------------------------------------------------------------
-# Declaration of the service "run_once_delayed".
-# 
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunOnceDelayed(TDSService):
-
-    def configure(self):
-        self.parametersDict = {
-            'command' : 'string',
-            'hour' : 'uint8',
-            'minute' : 'uint8',
-            'second' : 'uint8',
-        }
-        self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
-        self.exclusiveExecution = False
-        self.name = "run_once_delayed"
-        self.comment = "Create a task which start every x delay synchronized 
with hh:00:00."
-
-    def execute(self, id, parameters):
-        headersStruct = self.getDefaultHeadersStruct()
-        contentStruct = self.getDefaultContentStruct()
-        contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
-        command = parameters['command']
-        hour = parameters['hour']
-        minute = parameters['minute']
-        second = parameters['second']
-        id = resourceScheduler.createTask_RunOnceDelayed(hour, minute, second,
-            command)
-        contentStruct['root']['data'] = id
-        return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunOnceDelayed)
-
-# 
------------------------------------------------------------------------------
-# Declaration of the service "run_once_at_date_time".
-# 
------------------------------------------------------------------------------
-class TDSServiceSchedulerRunOnceAtDateTime(TDSService):
-
-    def configure(self):
-        self.parametersDict = {
-            'command' : 'string',
-            'year' : 'int',
-            'month' : 'uint8',
-            'day' : 'uint8',
-            'hour' : 'uint8',
-            'minute' : 'uint8',
-            'second' : 'uint8',
-        }
-        self.minimalUserLevel = TDS_CLIENT_LEVEL_ANONYMOUS
-        self.exclusiveExecution = False
-        self.name = "run_once_at_date_time"
-        self.comment = "Create a task which run once time at a specific date 
time."
-
-    def execute(self, id, parameters):
-        headersStruct = self.getDefaultHeadersStruct()
-        contentStruct = self.getDefaultContentStruct()
-        contentStruct['root']['result'] = getStrError(E_TDREST_SUCCESS)
-        command = parameters['command']
-        year = parameters['year']
-        month = parameters['month']
-        day = parameters['day']
-        hour = parameters['hour']
-        minute = parameters['minute']
-        second = parameters['second']
-        id = resourceScheduler.createTask_RunOnceAtDateTime(year, month, day,
-            hour, minute, second, command)
-        contentStruct['root']['data'] = id
-        return headersStruct, contentStruct
-
-# Register the service into the resource
-resourceScheduler.addService(TDSServiceSchedulerRunOnceAtDateTime)
-
-# 
------------------------------------------------------------------------------
 # Declaration of the service "clear".
 # 
------------------------------------------------------------------------------
 class TDSServiceSchedulerClear(TDSService):
@@ -351,4 +296,3 @@
 
 # Register the service into the resource
 resourceScheduler.addService(TDSServiceSchedulerRemoveTask)
-'''


------------------------------------------------------------------------------
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to