from __future__ import absolute_import
from celery.app.registry import _unpickle_task, _unpickle_task_v2
from celery.tests.case import AppCase, depends_on_current_app
def returns():
return 1
class test_unpickle_task(AppCase):
@depends_on_current_app
def test_unpickle_v1(self):
self.app.tasks['txfoo'] = 'bar'
self.assertEqual(_unpickle_task('txfoo'), 'bar')
@depends_on_current_app
def test_unpickle_v2(self):
self.app.tasks['txfoo1'] = 'bar1'
self.assertEqual(_unpickle_task_v2('txfoo1'), 'bar1')
self.assertEqual(_unpickle_task_v2('txfoo1', module='celery'), 'bar1')
class test_TaskRegistry(AppCase):
def setup(self):
self.mytask = self.app.task(name='A', shared=False)(returns)
self.myperiodic = self.app.task(
name='B', shared=False, type='periodic',
)(returns)
def test_NotRegistered_str(self):
self.assertTrue(repr(self.app.tasks.NotRegistered('tasks.add')))
def assertRegisterUnregisterCls(self, r, task):
r.unregister(task)
with self.assertRaises(r.NotRegistered):
r.unregister(task)
r.register(task)
self.assertIn(task.name, r)
def assertRegisterUnregisterFunc(self, r, task, task_name):
with self.assertRaises(r.NotRegistered):
r.unregister(task_name)
r.register(task, task_name)
self.assertIn(task_name, r)
def test_task_registry(self):
r = self.app._tasks
self.assertIsInstance(r, dict, 'TaskRegistry is mapping')
self.assertRegisterUnregisterCls(r, self.mytask)
self.assertRegisterUnregisterCls(r, self.myperiodic)
r.register(self.myperiodic)
r.unregister(self.myperiodic.name)
self.assertNotIn(self.myperiodic, r)
r.register(self.myperiodic)
tasks = dict(r)
self.assertIs(tasks.get(self.mytask.name), self.mytask)
self.assertIs(tasks.get(self.myperiodic.name), self.myperiodic)
self.assertIs(r[self.mytask.name], self.mytask)
self.assertIs(r[self.myperiodic.name], self.myperiodic)
r.unregister(self.mytask)
self.assertNotIn(self.mytask.name, r)
r.unregister(self.myperiodic)
self.assertNotIn(self.myperiodic.name, r)
self.assertTrue(self.mytask.run())
self.assertTrue(self.myperiodic.run())
def test_compat(self):
self.assertTrue(self.app.tasks.regular())
self.assertTrue(self.app.tasks.periodic())