def run_task(self, task): """Actually run a task, inserting a DB row and generating the celery task.""" job = tables.BadpennyJob(task_id=task.task_id, created_at=time.now()) current_app.db.session('relengapi').add(job) current_app.db.session('relengapi').commit() execution.submit_job(task_name=task.name, job_id=job.id)
def create_job(app): with app.app_context(): session = app.db.session('relengapi') task = tables.BadpennyTask(id=10, name='test.task') session.add(task) job = tables.BadpennyJob(task_id=10, created_at=dt(2014, 9, 16)) session.add(job) session.commit() return job.id
def run_task_now(task_name): """Force the given badpenny task to run now.""" t = tables.BadpennyTask.query.filter( tables.BadpennyTask.name == task_name).first() if not t: raise NotFound session = current_app.db.session('relengapi') job = tables.BadpennyJob(task=t, created_at=time.now()) session.add(job) session.commit() execution.submit_job(task_name=t.name, job_id=job.id) return job.to_jsonjob()
def test_cron_task(): """The cron_task decorator takes a cron spec argument and creates a task""" with empty_registry(): @badpenny.cron_task('13 * * * *') def run_me(js): pass t = badpenny.Task.get('{}.run_me'.format(__name__)) eq_(t.schedule, 'cron: 13 * * * *') when = datetime.datetime(2014, 8, 12, 15, 59, 17) bpt = tables.BadpennyTask(jobs=[ tables.BadpennyJob(created_at=when), ]) assert not t.runnable_now( bpt, datetime.datetime(2014, 8, 12, 15, 59, 17)) assert t.runnable_now(bpt, datetime.datetime(2014, 8, 12, 16, 13, 0))
def test_periodic_task(): """The periodic_task decorator takes a `seconds` argument and creates a task""" with empty_registry(): @badpenny.periodic_task(seconds=10) def run_me(js): pass t = badpenny.Task.get('{}.run_me'.format(__name__)) eq_(t.schedule, 'every 10 seconds') when = datetime.datetime(2014, 8, 12, 15, 59, 17) bpt = tables.BadpennyTask(jobs=[ tables.BadpennyJob(created_at=when), ]) assert not t.runnable_now(bpt, when) assert not t.runnable_now(bpt, when + delta(5)) assert t.runnable_now(bpt, when + delta(10))
def newjob(id, created_at, log=None): job = tables.BadpennyJob(id=id, task=task, created_at=created_at) session.add(job) if log: session.add(tables.BadpennyJobLog(id=id, content=log))
def insert_job(app, task_id, created_at, **kwargs): session = app.db.session('relengapi') j = tables.BadpennyJob(task_id=task_id, created_at=created_at, **kwargs) session.add(j) session.commit() return j