Ejemplo n.º 1
0
    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()
Ejemplo n.º 4
0
    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()
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
    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)
Ejemplo n.º 10
0
    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
            })
Ejemplo n.º 11
0
    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})
Ejemplo n.º 13
0
    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"})
Ejemplo n.º 15
0
    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()
Ejemplo n.º 17
0
 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)
Ejemplo n.º 19
0
 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())