Exemple #1
0
 def next_scheduled(self, jobnames=None):
     if not self.schedule_periodic:
         return
     if jobnames:
         entries = (self._entries.get(name, None) for name in jobnames)
     else:
         entries = itervalues(self._entries)
     next_entry = None
     next_time = None
     for entry in entries:
         if entry is None:
             continue
         is_due, next_time_to_run = entry.is_due()
         if is_due:
             next_time = 0
             next_entry = entry
             break
         elif next_time_to_run is not None:
             if next_time is None or next_time_to_run < next_time:
                 next_time = next_time_to_run
                 next_entry = entry
     if next_entry:
         return (next_entry.name, max(next_time, 0))
     else:
         return (jobnames, None)
Exemple #2
0
 def get_tasks(cls, scheduler, **filters):
     TASKS = cls.task_container(scheduler)
     tasks = []
     if filters:
         fs = []
         for name, value in iteritems(filters):
             if not isinstance(value, (list, tuple)):
                 value = (value,)
             fs.append((name, value))
         for t in itervalues(TASKS):
             for name, values in fs:
                 value = getattr(t, name, None)
                 if value in values:
                     tasks.append(t)
     return tasks
Exemple #3
0
    def tick(self, monitor, now=None):
        '''Run a tick, that is one iteration of the scheduler.
Executes all due tasks calculate the time in seconds to wait before
running a new :meth:`tick`. For testing purposes a :class:`datetime.datetime`
value ``now`` can be passed.'''
        remaining_times = []
        try:
            for entry in itervalues(self._entries):
                is_due, next_time_to_run = entry.is_due(now=now)
                if is_due:
                    self.queue_task(monitor, entry.name)
                if next_time_to_run:
                    remaining_times.append(next_time_to_run)
        except:
            self.logger.error('Error in task scheduler', exc_info=True)
        self.next_run = now or datetime.now()
        if remaining_times:
            self.next_run += timedelta(seconds = min(remaining_times))
Exemple #4
0
 def home(self, environ):
     data = '<ul>\n%s\n</ul>' % '\n'.join(
                         (r.route.render() for r in itervalues(self.routes)))
     return self.render(data)