Author: remi
Date: 2009-03-18 09:46:58 +0100 (Wed, 18 Mar 2009)
New Revision: 4112

Added:
   software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/
   software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Scheduler.py
   software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Task.py
   software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/__init__.py
Modified:
   
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
Log:
* moved the "Task" and "Scheduler" class from the resource scheduler to a 
python module

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-03-18 08:44:20 UTC (rev 4111)
+++ 
software_suite_v2/tuxware/tuxdroidserver/trunk/resources/01_robot_system/resourceScheduler.py
       2009-03-18 08:46:58 UTC (rev 4112)
@@ -6,245 +6,9 @@
 
 import datetime
 
-SCH_LOOP_ABS = 0
-SCH_LOOP_REL = 1
-SCH_ONCE_ABS = 2
-SCH_ONCE_REL = 3
+from util.scheduler.Scheduler import Scheduler
+from util.scheduler.Task import *
 
-class Task(object):
-    """Class the create a scheduled task.
-    """
-
-    def __init__(self, ruleType, weekMask, hour, minute, second, command,
-        year = None, month = None, day = None):
-        """Constructor.
-        @param ruleType: <SCH_LOOP_ABS|SCH_LOOP_REL|SCH_ONCE_ABS|SCH_ONCE_REL>
-        @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.
-        """
-        self.__ruleType = ruleType
-        self.__weekMask = weekMask
-        self.__hour = hour
-        self.__minute = minute
-        self.__second = second
-        self.__command = command
-        self.__year = year
-        self.__month = month
-        self.__day = day
-        now = datetime.datetime.now()
-        self.__monthAtStart = now.month
-        self.__monthMask = self.__createMonthMask(self.__monthAtStart)
-        if self.__ruleType == SCH_LOOP_ABS:
-            if self.__hour == 0:
-                m = int(now.minute / self.__minute) * self.__minute
-                self.__startTime = datetime.datetime(now.year, now.month, 
now.day,
-                    now.hour - self.__hour, m, self.__second)
-                self.__incrementTime = datetime.timedelta(minutes = 
self.__minute)
-            else:
-                self.__startTime = datetime.datetime(now.year, now.month, 
now.day,
-                    now.hour - self.__hour, self.__minute, self.__second)
-                self.__incrementTime = datetime.timedelta(hours = self.__hour)
-        elif self.__ruleType == SCH_LOOP_REL:
-            self.__startTime = datetime.datetime.now()
-            self.__incrementTime = datetime.timedelta(seconds = self.__second,
-                minutes = self.__minute, hours = self.__hour)
-        elif self.__ruleType == SCH_ONCE_ABS:
-            if (self.__year != None) and (self.__month != None) and 
(self.__day != None):
-                self.__startTime = datetime.datetime(self.__year, self.__month,
-                    self.__day, self.__hour, self.__minute, self.__second)
-                self.__incrementTime = None
-            else:
-                self.__startTime = datetime.datetime(now.year, now.month,
-                    now.day, self.__hour, self.__minute, self.__second)
-                self.__incrementTime = datetime.timedelta(days = 1)
-        elif self.__ruleType == SCH_ONCE_REL:
-            self.__startTime = datetime.datetime.now()
-            self.__incrementTime = datetime.timedelta(hours = self.__hour,
-                minutes = self.__minute, seconds = self.__second)
-        self.__lastExecuteTime = None
-
-    def __createMonthMask(self, month):
-        """Create the month mask.
-        @param month: Month index of the year.
-        @return: The month mask.
-        """
-        now = datetime.datetime.now()
-        firstDayOfMonth = datetime.datetime(now.year, month, 1, 0, 0,
-            0).weekday()
-        result = []
-        dayIndex = firstDayOfMonth
-        for i in range(40):
-            result.append(self.__weekMask[dayIndex])
-            dayIndex += 1
-            if dayIndex > 6:
-                dayIndex = 0
-        return result
-
-    def __getNextAllowedDay(self, day):
-        """Get the next allowed day for executing the task.
-        @param day: Day index of the month.
-        @return: The number of day to skip.
-        """
-        inc = day
-        while not self.__monthMask[inc]:
-            inc += 1
-        return inc - day
-
-    def getNextExecuteTime(self):
-        """Get the next time date of task execute.
-        @return: The datetime value of the next execution.
-        """
-        result = None
-        now = datetime.datetime.now()
-        if self.__ruleType == SCH_LOOP_ABS:
-            if self.__lastExecuteTime == None:
-                result = self.__startTime + self.__incrementTime
-            else:
-                result = self.__lastExecuteTime + self.__incrementTime
-        elif self.__ruleType == SCH_LOOP_REL:
-            if self.__lastExecuteTime == None:
-                result = self.__startTime + self.__incrementTime
-            else:
-                result = self.__lastExecuteTime + self.__incrementTime
-        elif self.__ruleType == SCH_ONCE_ABS:
-            if self.__lastExecuteTime == None:
-                result = self.__startTime
-            else:
-                if self.__incrementTime == None:
-                    result = None
-                else:
-                    result = self.__lastExecuteTime + self.__incrementTime
-        elif self.__ruleType == SCH_ONCE_REL:
-            if self.__lastExecuteTime == None:
-                result = self.__startTime + self.__incrementTime
-            else:
-                result = None
-        if result == None:
-            return None
-        if result.month != self.__monthAtStart:
-            self.__monthAtStart = result.month
-            self.__monthMask = self.__createMonthMask(self.__monthAtStart)
-        if not self.__monthMask[result.day - 1]:
-            inc = self.__getNextAllowedDay(result.day - 1)
-            result += datetime.timedelta(days = inc)
-        self.__lastExecuteTime = result
-        return result
-
-    def execute(self):
-        """Execute the task.
-        """
-        def async():
-            try:
-                if str(type(self.__command)) == "<type 'str'>":
-                    exec(self.__command) in globals()
-                else:
-                    self.__command()
-            except:
-                pass
-        t = threading.Thread(target = async)
-        t.start()
-
-class Scheduler(object):
-    """Scheduler task.
-    """
-
-    def __init__(self):
-        """Constructor.
-        """
-        self.__started = False
-        self.__startedMutex = threading.Lock()
-        self.__tasksToExecuteStack = []
-        self.__tasksToExecuteStackMutex = threading.Lock()
-
-    def start(self):
-        """Start the scheduler.
-        """
-        t = threading.Thread(target = self.__tasksCheckerLoop)
-        t.start()
-
-    def stop(self):
-        """Stop the scheduler.
-        """
-        self.__setStarted(False)
-
-    def isStarted(self):
-        """Get if the scheduler is started or not.
-        @return: True or False.
-        """
-        self.__startedMutex.acquire()
-        result = self.__started
-        self.__startedMutex.release()
-        return result
-
-    def __setStarted(self, value):
-        """Set the started flag of the scheduler.
-        @param value: True or False.
-        """
-        self.__startedMutex.acquire()
-        self.__started = value
-        self.__startedMutex.release()
-
-    def insertTask(self, task):
-        """Insert a task in the scheduler.
-        @param task: Task object.
-        @return: The task identifier or None if fail.
-        """
-        nextTime = task.getNextExecuteTime()
-        id = clientsManager.generateSingleId()
-        self.__tasksToExecuteStackMutex.acquire()
-        if nextTime != None:
-            self.__tasksToExecuteStack.append([nextTime, task, id])
-        self.__tasksToExecuteStackMutex.release()
-        return id
-
-    def removeTask(self, taskId):
-        """Remove a task from the scheduler.
-        @param taskId: Task identifier.
-        """
-        self.__tasksToExecuteStackMutex.acquire()
-        for taskInfo in self.__tasksToExecuteStack:
-            if taskInfo[2] == taskId:
-                self.__tasksToExecuteStack.remove(taskInfo)
-                break
-        self.__tasksToExecuteStackMutex.release()
-
-    def clear(self):
-        """Clear the scheduler.
-        """
-        self.__tasksToExecuteStackMutex.acquire()
-        self.__tasksToExecuteStack = []
-        self.__tasksToExecuteStackMutex.release()
-
-    def __tasksCheckerLoop(self):
-        """Loop of the tasks checker.
-        """
-        if self.isStarted():
-            return
-        self.__setStarted(True)
-        while self.isStarted():
-            now = datetime.datetime.now()
-            tasksToRemove = []
-            tasksToAdd = []
-            self.__tasksToExecuteStackMutex.acquire()
-            for taskInfo in self.__tasksToExecuteStack:
-                if now > taskInfo[0]:
-                    tasksToRemove.append(taskInfo)
-                    nextTime = taskInfo[1].getNextExecuteTime()
-                    diff = now - taskInfo[0]
-                    if diff.seconds <= 10:
-                        taskInfo[1].execute()
-                    if nextTime != None:
-                        tasksToAdd.append([nextTime, taskInfo[1], taskInfo[2]])
-            for taskInfo in tasksToRemove:
-                self.__tasksToExecuteStack.remove(taskInfo)
-            for taskInfo in tasksToAdd:
-                self.__tasksToExecuteStack.append(taskInfo)
-            self.__tasksToExecuteStackMutex.release()
-            time.sleep(1.0)
-
 # 
------------------------------------------------------------------------------
 # Declaration of the resource "scheduler".
 # 
------------------------------------------------------------------------------

Added: 
software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Scheduler.py
===================================================================
--- software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Scheduler.py  
                        (rev 0)
+++ software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Scheduler.py  
2009-03-18 08:46:58 UTC (rev 4112)
@@ -0,0 +1,138 @@
+#    Copyright (C) 2009 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+import datetime
+import threading
+import time
+
+from Task import Task
+
+# 
------------------------------------------------------------------------------
+# Scheduler task manager.
+# 
------------------------------------------------------------------------------
+class Scheduler(object):
+    """Scheduler task manager.
+    """
+
+    # 
--------------------------------------------------------------------------
+    # Constructor of the class.
+    # 
--------------------------------------------------------------------------
+    def __init__(self):
+        """Constructor.
+        """
+        self.__started = False
+        self.__startedMutex = threading.Lock()
+        self.__tasksToExecuteStack = []
+        self.__tasksToExecuteStackMutex = threading.Lock()
+
+    # 
--------------------------------------------------------------------------
+    # Start the scheduler.
+    # 
--------------------------------------------------------------------------
+    def start(self):
+        """Start the scheduler.
+        """
+        t = threading.Thread(target = self.__tasksCheckerLoop)
+        t.start()
+
+    # 
--------------------------------------------------------------------------
+    # Stop the scheduler.
+    # 
--------------------------------------------------------------------------
+    def stop(self):
+        """Stop the scheduler.
+        """
+        self.__setStarted(False)
+
+    # 
--------------------------------------------------------------------------
+    # Get if the scheduler is started or not.
+    # 
--------------------------------------------------------------------------
+    def isStarted(self):
+        """Get if the scheduler is started or not.
+        @return: True or False.
+        """
+        self.__startedMutex.acquire()
+        result = self.__started
+        self.__startedMutex.release()
+        return result
+
+    # 
--------------------------------------------------------------------------
+    # Set the started flag of the scheduler.
+    # 
--------------------------------------------------------------------------
+    def __setStarted(self, value):
+        """Set the started flag of the scheduler.
+        @param value: True or False.
+        """
+        self.__startedMutex.acquire()
+        self.__started = value
+        self.__startedMutex.release()
+
+    # 
--------------------------------------------------------------------------
+    # Insert a task in the scheduler.
+    # 
--------------------------------------------------------------------------
+    def insertTask(self, task):
+        """Insert a task in the scheduler.
+        @param task: Task object.
+        @return: The task identifier or None if fail.
+        """
+        nextTime = task.getNextExecuteTime()
+        id = clientsManager.generateSingleId()
+        self.__tasksToExecuteStackMutex.acquire()
+        if nextTime != None:
+            self.__tasksToExecuteStack.append([nextTime, task, id])
+        self.__tasksToExecuteStackMutex.release()
+        return id
+
+    # 
--------------------------------------------------------------------------
+    # Remove a task from the scheduler.
+    # 
--------------------------------------------------------------------------
+    def removeTask(self, taskId):
+        """Remove a task from the scheduler.
+        @param taskId: Task identifier.
+        """
+        self.__tasksToExecuteStackMutex.acquire()
+        for taskInfo in self.__tasksToExecuteStack:
+            if taskInfo[2] == taskId:
+                self.__tasksToExecuteStack.remove(taskInfo)
+                break
+        self.__tasksToExecuteStackMutex.release()
+
+    # 
--------------------------------------------------------------------------
+    # Clear the scheduler.
+    # 
--------------------------------------------------------------------------
+    def clear(self):
+        """Clear the scheduler.
+        """
+        self.__tasksToExecuteStackMutex.acquire()
+        self.__tasksToExecuteStack = []
+        self.__tasksToExecuteStackMutex.release()
+
+    # 
--------------------------------------------------------------------------
+    # Loop of the tasks checker.
+    # 
--------------------------------------------------------------------------
+    def __tasksCheckerLoop(self):
+        """Loop of the tasks checker.
+        """
+        if self.isStarted():
+            return
+        self.__setStarted(True)
+        while self.isStarted():
+            now = datetime.datetime.now()
+            tasksToRemove = []
+            tasksToAdd = []
+            self.__tasksToExecuteStackMutex.acquire()
+            for taskInfo in self.__tasksToExecuteStack:
+                if now > taskInfo[0]:
+                    tasksToRemove.append(taskInfo)
+                    nextTime = taskInfo[1].getNextExecuteTime()
+                    diff = now - taskInfo[0]
+                    if diff.seconds <= 10:
+                        taskInfo[1].execute()
+                    if nextTime != None:
+                        tasksToAdd.append([nextTime, taskInfo[1], taskInfo[2]])
+            for taskInfo in tasksToRemove:
+                self.__tasksToExecuteStack.remove(taskInfo)
+            for taskInfo in tasksToAdd:
+                self.__tasksToExecuteStack.append(taskInfo)
+            self.__tasksToExecuteStackMutex.release()
+            time.sleep(1.0)


Property changes on: 
software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Scheduler.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Task.py
===================================================================
--- software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Task.py       
                        (rev 0)
+++ software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Task.py       
2009-03-18 08:46:58 UTC (rev 4112)
@@ -0,0 +1,166 @@
+#    Copyright (C) 2009 C2ME Sa
+#    Remi Jocaille <[email protected]>
+#    Distributed under the terms of the GNU General Public License
+#    http://www.gnu.org/copyleft/gpl.html
+
+import datetime
+import threading
+
+SCH_LOOP_ABS = 0
+SCH_LOOP_REL = 1
+SCH_ONCE_ABS = 2
+SCH_ONCE_REL = 3
+
+# 
------------------------------------------------------------------------------
+# Class the create a scheduled task.
+# 
------------------------------------------------------------------------------
+class Task(object):
+    """Class the create a scheduled task.
+    """
+
+    # 
--------------------------------------------------------------------------
+    # Constructor of the class.
+    # 
--------------------------------------------------------------------------
+    def __init__(self, ruleType, weekMask, hour, minute, second, command,
+        year = None, month = None, day = None):
+        """Constructor of the class.
+        @param ruleType: <SCH_LOOP_ABS|SCH_LOOP_REL|SCH_ONCE_ABS|SCH_ONCE_REL>
+        @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.
+        """
+        self.__ruleType = ruleType
+        self.__weekMask = weekMask
+        self.__hour = hour
+        self.__minute = minute
+        self.__second = second
+        self.__command = command
+        self.__year = year
+        self.__month = month
+        self.__day = day
+        now = datetime.datetime.now()
+        self.__monthAtStart = now.month
+        self.__monthMask = self.__createMonthMask(self.__monthAtStart)
+        if self.__ruleType == SCH_LOOP_ABS:
+            if self.__hour == 0:
+                m = int(now.minute / self.__minute) * self.__minute
+                self.__startTime = datetime.datetime(now.year, now.month, 
now.day,
+                    now.hour - self.__hour, m, self.__second)
+                self.__incrementTime = datetime.timedelta(minutes = 
self.__minute)
+            else:
+                self.__startTime = datetime.datetime(now.year, now.month, 
now.day,
+                    now.hour - self.__hour, self.__minute, self.__second)
+                self.__incrementTime = datetime.timedelta(hours = self.__hour)
+        elif self.__ruleType == SCH_LOOP_REL:
+            self.__startTime = datetime.datetime.now()
+            self.__incrementTime = datetime.timedelta(seconds = self.__second,
+                minutes = self.__minute, hours = self.__hour)
+        elif self.__ruleType == SCH_ONCE_ABS:
+            if (self.__year != None) and (self.__month != None) and 
(self.__day != None):
+                self.__startTime = datetime.datetime(self.__year, self.__month,
+                    self.__day, self.__hour, self.__minute, self.__second)
+                self.__incrementTime = None
+            else:
+                self.__startTime = datetime.datetime(now.year, now.month,
+                    now.day, self.__hour, self.__minute, self.__second)
+                self.__incrementTime = datetime.timedelta(days = 1)
+        elif self.__ruleType == SCH_ONCE_REL:
+            self.__startTime = datetime.datetime.now()
+            self.__incrementTime = datetime.timedelta(hours = self.__hour,
+                minutes = self.__minute, seconds = self.__second)
+        self.__lastExecuteTime = None
+
+    # 
--------------------------------------------------------------------------
+    # Create the month mask.
+    # 
--------------------------------------------------------------------------
+    def __createMonthMask(self, month):
+        """Create the month mask.
+        @param month: Month index of the year.
+        @return: The month mask.
+        """
+        now = datetime.datetime.now()
+        firstDayOfMonth = datetime.datetime(now.year, month, 1, 0, 0,
+            0).weekday()
+        result = []
+        dayIndex = firstDayOfMonth
+        for i in range(40):
+            result.append(self.__weekMask[dayIndex])
+            dayIndex += 1
+            if dayIndex > 6:
+                dayIndex = 0
+        return result
+
+    # 
--------------------------------------------------------------------------
+    # Get the next allowed day for executing the task.
+    # 
--------------------------------------------------------------------------
+    def __getNextAllowedDay(self, day):
+        """Get the next allowed day for executing the task.
+        @param day: Day index of the month.
+        @return: The number of day to skip.
+        """
+        inc = day
+        while not self.__monthMask[inc]:
+            inc += 1
+        return inc - day
+
+    # 
--------------------------------------------------------------------------
+    # Get the next time date of task execute.
+    # 
--------------------------------------------------------------------------
+    def getNextExecuteTime(self):
+        """Get the next time date of task execute.
+        @return: The datetime value of the next execution.
+        """
+        result = None
+        now = datetime.datetime.now()
+        if self.__ruleType == SCH_LOOP_ABS:
+            if self.__lastExecuteTime == None:
+                result = self.__startTime + self.__incrementTime
+            else:
+                result = self.__lastExecuteTime + self.__incrementTime
+        elif self.__ruleType == SCH_LOOP_REL:
+            if self.__lastExecuteTime == None:
+                result = self.__startTime + self.__incrementTime
+            else:
+                result = self.__lastExecuteTime + self.__incrementTime
+        elif self.__ruleType == SCH_ONCE_ABS:
+            if self.__lastExecuteTime == None:
+                result = self.__startTime
+            else:
+                if self.__incrementTime == None:
+                    result = None
+                else:
+                    result = self.__lastExecuteTime + self.__incrementTime
+        elif self.__ruleType == SCH_ONCE_REL:
+            if self.__lastExecuteTime == None:
+                result = self.__startTime + self.__incrementTime
+            else:
+                result = None
+        if result == None:
+            return None
+        if result.month != self.__monthAtStart:
+            self.__monthAtStart = result.month
+            self.__monthMask = self.__createMonthMask(self.__monthAtStart)
+        if not self.__monthMask[result.day - 1]:
+            inc = self.__getNextAllowedDay(result.day - 1)
+            result += datetime.timedelta(days = inc)
+        self.__lastExecuteTime = result
+        return result
+
+    # 
--------------------------------------------------------------------------
+    # Execute the task.
+    # 
--------------------------------------------------------------------------
+    def execute(self):
+        """Execute the task.
+        """
+        def async():
+            try:
+                if str(type(self.__command)) == "<type 'str'>":
+                    exec(self.__command) in globals()
+                else:
+                    self.__command()
+            except:
+                pass
+        t = threading.Thread(target = async)
+        t.start()


Property changes on: 
software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/Task.py
___________________________________________________________________
Name: svn:keywords
   + Id

Added: software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/__init__.py
===================================================================


Property changes on: 
software_suite_v2/tuxware/tuxdroidserver/trunk/util/scheduler/__init__.py
___________________________________________________________________
Name: svn:keywords
   + Id


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to