TurboGears: Changeset [6943]: re-organize the code - move custom methods into into a Scheduler class - …

TurboGears

6943
at 2009-11-06 23:01:29
by vinces1979@gmail.com

Index: /projects/TGScheduler/trunk/tgscheduler/scheduler.py
===================================================================
--- /projects/TGScheduler/trunk/tgscheduler/scheduler.py (revision 6943)
+++ /projects/TGScheduler/trunk/tgscheduler/scheduler.py (revision 6943)
@@ -0,0 +1,91 @@
+""" create the scheduler object and expose function """
+
+import kronos
+from kronos import method
+import atexit
+import logging
+
+log = logging.getLogger("tgscheduler")
+
+class Scheduler:
+    """ Handle Task Scheduling """
+    
+    def __init__(self):
+        self._scheduler_instance = None
+    
+    def start_scheduler(self):
+        """ start the scheduler, and register shutdown at exit """
+        
+        log.info("Starting Scheduler")
+        si = self._get_scheduler()
+        si.start()
+        atexit.register(self.stop_scheduler)
+        return si
+
+    def stop_scheduler(self):
+        """ stop the scheduler """
+        
+        log.info("Shutting down scheduler")
+        if not self._scheduler_instance:
+            return
+        si = self._get_scheduler()
+        si.stop()
+
+    def _get_scheduler(self):
+        """ find available scheduler """
+        
+        if not self._scheduler_instance:
+            if hasattr(kronos, "ThreadedScheduler"):
+                log.debug("Using threaded scheduler")
+                self._scheduler_instance = kronos.ThreadedScheduler()
+            elif hasattr(kronos, "ForkedScheduler"):
+                log.debug("Using Forked scheduler")
+                self._scheduler_instance = kronos.ForkedScheduler()
+            else:
+                log.debug("Using Sequential scheduler")
+                self._scheduler_instance = kronos.Scheduler()
+                
+        return self._scheduler_instance
+
+    def add_interval_task(self, action, interval, args=None, kw=None, initialdelay=0, 
+            processmethod=method.threaded, taskname=None):
+        si = self._get_scheduler()
+        return si.add_interval_task(action=action, interval=interval, args=args,
+            kw=kw, initialdelay=initialdelay, processmethod=processmethod, 
+            taskname=taskname)
+    
+    def add_single_task(self, action, args=None, kw=None, initialdelay=0, 
+            processmethod=method.threaded, taskname=None):
+        si = self._get_scheduler()
+        return si.add_single_task(action=action, args=args, kw=kw, 
+            initialdelay=initialdelay, processmethod=processmethod, 
+            taskname=taskname)
+    
+    def add_weekday_task(self, action, weekdays, timeonday, args=None, kw=None,
+            processmethod=method.threaded, taskname=None):
+        si = self._get_scheduler()
+        return si.add_daytime_task(action=action, taskname=taskname, 
+            weekdays=weekdays, monthdays=None, timeonday=timeonday,
+            processmethod=processmethod, args=args, kw=kw)
+    
+    def add_monthday_task(self, action, monthdays, timeonday, args=None, kw=None,
+            processmethod=method.threaded, taskname=None):
+        si = self._get_scheduler()
+        return si.add_daytime_task(action=action, taskname=taskname,
+            weekdays=None, monthdays=monthdays, timeonday=timeonday,
+            processmethod=processmethod, args=args, kw=kw)
+    
+    def cancel(self, task):
+        si = self._get_scheduler()
+        si.cancel(task)    
+
+scheduler = Scheduler()
+
+#: backwards compatibility 
+start_scheduler = scheduler.start_scheduler
+stop_scheduler = scheduler.stop_scheduler
+
+add_monthly_task = scheduler.add_monthday_task
+add_weekday_task = scheduler.add_weekday_task
+add_single_task = scheduler.add_single_task
+add_interval_task = scheduler.add_interval_task
Index: /projects/TGScheduler/trunk/tgscheduler/__init__.py
===================================================================
--- /projects/TGScheduler/trunk/tgscheduler/__init__.py (revision 6940)
+++ /projects/TGScheduler/trunk/tgscheduler/__init__.py (revision 6943)
@@ -1,73 +1,5 @@
 """  Scheduled background tasks using kronos.py """
 
-import kronos as scheduler
-from kronos import method
-import atexit
-import logging
-
-log = logging.getLogger("tgscheduler")
-
-_scheduler_instance = None
-
-def start_scheduler():
-    log.info("Starting Scheduler")
-    si = _get_scheduler()
-    si.start()
-    atexit.register(stop_scheduler)
-
-def stop_scheduler():
-    log.info("Shutting down scheduler")
-    if not _scheduler_instance:
-        return
-    si = _get_scheduler()
-    si.stop()
-
-def _get_scheduler():
-    """ find available scheduler """
-    global _scheduler_instance
-    si = _scheduler_instance
-    if not si:
-        if hasattr(scheduler, "ThreadedScheduler"):
-            log.debug("Using threaded scheduler")
-            si = scheduler.ThreadedScheduler()
-        elif hasattr(scheduler, "ForkedScheduler"):
-            log.debug("Using Forked scheduler")
-            si = scheduler.ForkedScheduler()
-        else:
-            log.debug("Using Sequential scheduler")
-            si = scheduler.Sceduler()
-            
-        _scheduler_instance = si
-    return si
-
-def add_interval_task(action, interval, args=None, kw=None, initialdelay=0, 
-        processmethod=method.threaded, taskname=None):
-    si = _get_scheduler()
-    return si.add_interval_task(action=action, interval=interval, args=args,
-        kw=kw, initialdelay=initialdelay, processmethod=processmethod, 
-        taskname=taskname)
-
-def add_single_task(action, args=None, kw=None, initialdelay=0, 
-        processmethod=method.threaded, taskname=None):
-    si = _get_scheduler()
-    return si.add_single_task(action=action, args=args, kw=kw, 
-        initialdelay=initialdelay, processmethod=processmethod, 
-        taskname=taskname)
-
-def add_weekday_task(action, weekdays, timeonday, args=None, kw=None,
-        processmethod=method.threaded, taskname=None):
-    si = _get_scheduler()
-    return si.add_daytime_task(action=action, taskname=taskname, 
-        weekdays=weekdays, monthdays=None, timeonday=timeonday,
-        processmethod=processmethod, args=args, kw=kw)
-
-def add_monthday_task(action, monthdays, timeonday, args=None, kw=None,
-        processmethod=method.threaded, taskname=None):
-    si = _get_scheduler()
-    return si.add_daytime_task(action=action, taskname=taskname,
-        weekdays=None, monthdays=monthdays, timeonday=timeonday,
-        processmethod=processmethod, args=args, kw=kw)
-
-def cancel(task):
-    si = _get_scheduler()
-    si.cancel(task)    
+from scheduler import scheduler, start_scheduler, stop_scheduler, \
+                add_interval_task, add_monthly_task, add_single_task, \
+                add_weekday_task

TurboGears

TurboGears

homepage: http://www.turbogears.org/
language: python
category: waf

Copyright Surgo. twitter: @Surgo
Powered by Google App Engine.