Skip to content

Commit cb6f020

Browse files
committed
Issue dbader#319: be able to skip a job
1 parent 41f88b3 commit cb6f020

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

schedule/__init__.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ class CancelJob(object):
7373
pass
7474

7575

76+
class SkipJob(object):
77+
"""
78+
Can be returned from a job to skip a run.
79+
"""
80+
pass
81+
82+
7683
class Scheduler(object):
7784
"""
7885
Objects instantiated by the :class:`Scheduler <Scheduler>` are
@@ -483,7 +490,8 @@ def run(self):
483490
"""
484491
logger.info('Running job %s', self)
485492
ret = self.job_func()
486-
self.last_run = datetime.datetime.now()
493+
if not isinstance(ret, SkipJob) and ret is not SkipJob:
494+
self.last_run = datetime.datetime.now()
487495
self._schedule_next_run()
488496
return ret
489497

test_schedule.py

+25
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,31 @@ def stop_job():
444444
schedule.run_all()
445445
assert len(schedule.jobs) == 0
446446

447+
def test_skip_job(self):
448+
skip = True
449+
450+
def skip_job():
451+
if skip:
452+
return schedule.SkipJob
453+
else:
454+
return None
455+
456+
job = every().second.do(skip_job)
457+
458+
assert len(schedule.jobs) == 1
459+
assert job.last_run is None
460+
461+
schedule.run_all()
462+
463+
assert len(schedule.jobs) == 1
464+
assert job.last_run is None
465+
466+
skip = False
467+
schedule.run_all()
468+
469+
assert len(schedule.jobs) == 1
470+
assert job.last_run is not None
471+
447472
def test_tag_type_enforcement(self):
448473
job1 = every().second.do(make_mock_job(name='job1'))
449474
self.assertRaises(TypeError, job1.tag, {})

0 commit comments

Comments
 (0)