def test_parameters_schedule_eta(self): with self.settings(DJANGO_CELERY_FULLDBRESULT_SCHEDULE_ETA=True, DJANGO_CELERY_FULLDBRESULT_MONKEY_PATCH_ASYNC=True): apply_async_monkey_patch() a_date = datetime(1990, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] self.assertEqual("test_app.tasks.do_something", task.task) self.assertEqual(SCHEDULED, task.status) send_scheduled_task() task = TaskResultMeta.objects.order_by("pk")[0] new_task = TaskResultMeta.objects.order_by("pk")[1] # Old task has been marked as sent self.assertEqual(SCHEDULED_SENT, task.status) # Old task has a scheduling id self.assertIsNotNone(task.scheduled_id) # New task is pending (sent for execution) self.assertEqual(PENDING, new_task.status) # No ETA on the new task self.assertIsNone(new_task.eta) # The task is of the new task is in the result of the scheduled # task for traceability. self.assertEqual(task.result["new_task_id"], new_task.task_id) unapply_async_monkey_patch()
def test_parameters_schedule_eta(self): with self.settings( DJANGO_CELERY_FULLDBRESULT_SCHEDULE_ETA=True, DJANGO_CELERY_FULLDBRESULT_MONKEY_PATCH_ASYNC=True): apply_async_monkey_patch() a_date = datetime(1990, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] self.assertEqual( "test_app.tasks.do_something", task.task) self.assertEqual(SCHEDULED, task.status) send_scheduled_task() task = TaskResultMeta.objects.order_by("pk")[0] new_task = TaskResultMeta.objects.order_by("pk")[1] # Old task has been marked as sent self.assertEqual(SCHEDULED_SENT, task.status) # Old task has a scheduling id self.assertIsNotNone(task.scheduled_id) # New task is pending (sent for execution) self.assertEqual(PENDING, new_task.status) # No ETA on the new task self.assertIsNone(new_task.eta) # The task is of the new task is in the result of the scheduled # task for traceability. self.assertEqual(task.result["new_task_id"], new_task.task_id) unapply_async_monkey_patch()
def test_parameters_schedule_eta_ignore_result(self): with self.settings(DJANGO_CELERY_FULLDBRESULT_SCHEDULE_ETA=True, CELERY_IGNORE_RESULT=True, DJANGO_CELERY_FULLDBRESULT_MONKEY_PATCH_ASYNC=True): apply_async_monkey_patch() a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] self.assertEqual( "test_app.tasks.do_something", task.task) # This is new and was never set in previous backend. It is only set # before the task is published. self.assertIsNotNone(task.date_submitted) self.assertEqual(SCHEDULED, task.status) # Attributes such as eta are preserved self.assertEqual(a_date, task.eta) kwargs = serialization.loads(task.kwargs) self.assertEqual(kwargs, {"param": "testing"}) unapply_async_monkey_patch()
def test_param_result_as_json_unserializable(self): a_date = datetime(2080, 1, 1, tzinfo=utc) with self.settings(DJANGO_CELERY_FULLDBRESULT_USE_JSON=True): do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] with self.assertRaises(TypeError): # Fake result result = ["testing", "test", a_date] task.result = result task.save()
def test_param_result_as_json_unserializable(self): a_date = datetime(2080, 1, 1, tzinfo=utc) with self.settings(DJANGO_CELERY_FULLDBRESULT_USE_JSON=True): do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] with self.assertRaises(TypeError): # Fake result result = ["testing", "test", a_date] task.result = result task.save()
def test_param_result_as_json(self): a_date = datetime(2080, 1, 1, tzinfo=utc) with self.settings(DJANGO_CELERY_FULLDBRESULT_USE_JSON=True): do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] # Fake result result = ["testing", "test"] task.result = result task.save() # Test pickling/unpickling task = TaskResultMeta.objects.all()[0] self.assertEqual(task.result, result)
def test_param_result(self): a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] # Fake result with objects that are not serializable by json but that # are serializable by pickle. result = ("testing", "test", a_date) task.result = result task.save() # Test pickling/unpickling task = TaskResultMeta.objects.all()[0] self.assertEqual(task.result, result)
def test_param_result_as_json(self): a_date = datetime(2080, 1, 1, tzinfo=utc) with self.settings(DJANGO_CELERY_FULLDBRESULT_USE_JSON=True): do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] # Fake result result = ["testing", "test"] task.result = result task.save() # Test pickling/unpickling task = TaskResultMeta.objects.all()[0] self.assertEqual(task.result, result)
def test_param_result(self): a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] # Fake result with objects that are not serializable by json but that # are serializable by pickle. result = ("testing", "test", a_date) task.result = result task.save() # Test pickling/unpickling task = TaskResultMeta.objects.all()[0] self.assertEqual(task.result, result)
def test_param_result_as_json_unserializable_but_force(self): a_date = datetime(2080, 1, 1, tzinfo=utc) with self.settings(DJANGO_CELERY_FULLDBRESULT_USE_JSON=True, DJANGO_CELERY_FULLDBRESULT_FORCE_JSON=True): do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] result = ["testing", "test", a_date] task.result = result task.save() # Test pickling/unpickling task = TaskResultMeta.objects.all()[0] self.assertEqual(task.result, { "value": str(result), "forced_json": True })
def test_parameters(self): a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] self.assertEqual("test_app.tasks.do_something", task.task) # This is new and was never set in previous backend. It is only set # before the task is published. self.assertIsNotNone(task.date_submitted) # Task is never executed because eager = false self.assertEqual(PENDING, task.status) # Attributes such as eta are preserved self.assertEqual(a_date, task.eta) kwargs = serialization.loads(task.kwargs) self.assertEqual(kwargs, {"param": "testing"})
def test_param_result_as_json_unserializable_but_force(self): a_date = datetime(2080, 1, 1, tzinfo=utc) with self.settings( DJANGO_CELERY_FULLDBRESULT_USE_JSON=True, DJANGO_CELERY_FULLDBRESULT_FORCE_JSON=True): do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.all()[0] result = ["testing", "test", a_date] task.result = result task.save() # Test pickling/unpickling task = TaskResultMeta.objects.all()[0] self.assertEqual( task.result, {"value": str(result), "forced_json": True})
def test_get_stale_scheduled_tasks(self): with self.settings(DJANGO_CELERY_FULLDBRESULT_SCHEDULE_ETA=True, DJANGO_CELERY_FULLDBRESULT_MONKEY_PATCH_ASYNC=True): apply_async_monkey_patch() a_date = datetime(1990, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] # Mock bad execution task.scheduled_id = uuid4().hex task.save() self.assertEqual( 1, len(TaskResultMeta.objects.get_stale_scheduled_tasks())) self.assertEqual( 0, len( TaskResultMeta.objects.get_stale_scheduled_tasks( timedelta(days=365 * 100)))) unapply_async_monkey_patch()
def test_parameters(self): a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] self.assertEqual( "test_app.tasks.do_something", task.task) # This is new and was never set in previous backend. It is only set # before the task is published. self.assertIsNotNone(task.date_submitted) # Task is never executed because eager = false self.assertEqual(PENDING, task.status) # Attributes such as eta are preserved self.assertEqual(a_date, task.eta) kwargs = serialization.loads(task.kwargs) self.assertEqual(kwargs, {"param": "testing"})
def test_parameters_schedule_eta(self): with self.settings(DJANGO_CELERY_FULLDBRESULT_SCHEDULE_ETA=True, DJANGO_CELERY_FULLDBRESULT_MONKEY_PATCH_ASYNC=True): apply_async_monkey_patch() a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] self.assertEqual("test_app.tasks.do_something", task.task) # This is new and was never set in previous backend. It is only set # before the task is published. self.assertIsNotNone(task.date_submitted) self.assertEqual(SCHEDULED, task.status) # Attributes such as eta are preserved self.assertEqual(a_date, task.eta) kwargs = serialization.loads(task.kwargs) self.assertEqual(kwargs, {"param": "testing"}) unapply_async_monkey_patch()
def test_get_stale_scheduled_tasks(self): with self.settings( DJANGO_CELERY_FULLDBRESULT_SCHEDULE_ETA=True, DJANGO_CELERY_FULLDBRESULT_MONKEY_PATCH_ASYNC=True): apply_async_monkey_patch() a_date = datetime(1990, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) task = TaskResultMeta.objects.order_by("pk")[0] # Mock bad execution task.scheduled_id = uuid4().hex task.save() self.assertEqual( 1, len(TaskResultMeta.objects.get_stale_scheduled_tasks())) self.assertEqual( 0, len(TaskResultMeta.objects.get_stale_scheduled_tasks( timedelta(days=365*100)))) unapply_async_monkey_patch()
def test_parameters_ignore_result(self): with self.settings(CELERY_IGNORE_RESULT=True): a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) self.assertEqual(0, TaskResultMeta.objects.count())
def test_find_stale_scheduled_tasks_command(self): # Just make sure that there is no exception a_date = datetime(1990, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) call_command("find_stale_scheduled_tasks", microseconds=1)
def test_find_stale_scheduled_tasks_command(self): # Just make sure that there is no exception a_date = datetime(1990, 1, 1, tzinfo=utc) do_something.apply_async(kwargs={"param": "testing"}, eta=a_date) call_command("find_stale_scheduled_tasks", microseconds=1)
def test_parameters_ignore_result(self): with self.settings(CELERY_IGNORE_RESULT=True): a_date = datetime(2080, 1, 1, tzinfo=utc) do_something.apply_async( kwargs={"param": "testing"}, eta=a_date) self.assertEqual(0, TaskResultMeta.objects.count())