def test_forget(self): b = DatabaseBackend() tid = gen_unique_id() b.mark_as_done(tid, {'foo': 'bar'}) x = AsyncResult(tid) self.assertEqual(x.result.get('foo'), 'bar') x.forget() self.assertIsNone(x.result)
def test_forget(self): b = DatabaseBackend() tid = gen_unique_id() b.mark_as_done(tid, {"foo": "bar"}) x = AsyncResult(tid) self.assertEqual(x.result.get("foo"), "bar") x.forget() self.assertIsNone(x.result)
def test_forget(self): b = DatabaseBackend(app=app) tid = gen_unique_id() b.mark_as_done(tid, {'foo': 'bar'}) x = AsyncResult(tid) self.assertEqual(x.result.get('foo'), 'bar') x.forget() if celery.VERSION[0:3] == (3, 1, 10): # bug in 3.1.10 means result did not clear cache after forget. x._cache = None self.assertIsNone(x.result)
def test_taskset_store(self): b = DatabaseBackend() tid = gen_unique_id() self.assertIsNone(b.restore_taskset(tid)) result = {"foo": "baz", "bar": SomeClass(12345)} b.save_taskset(tid, result) rindb = b.restore_taskset(tid) self.assertIsNotNone(rindb) self.assertEqual(rindb.get("foo"), "baz") self.assertEqual(rindb.get("bar").data, 12345)
def test_cleanup(self): b = DatabaseBackend() b.TaskModel._default_manager.all().delete() ids = [gen_unique_id() for _ in xrange(3)] for i, res in enumerate((16, 32, 64)): b.mark_as_done(ids[i], res) self.assertEqual(b.TaskModel._default_manager.count(), 3) then = now() - current_app.conf.CELERY_TASK_RESULT_EXPIRES * 2 # Have to avoid save() because it applies the auto_now=True. b.TaskModel._default_manager.filter(task_id__in=ids[:-1]) \ .update(date_done=then) b.cleanup() self.assertEqual(b.TaskModel._default_manager.count(), 1)
def test_taskset_store(self): b = DatabaseBackend() tid = gen_unique_id() self.assertIsNone(b.restore_taskset(tid)) result = {"foo": "baz", "bar": SomeClass(12345)} b.save_taskset(tid, result) rindb = b.restore_taskset(tid) self.assertIsNotNone(rindb) self.assertEqual(rindb.get("foo"), "baz") self.assertEqual(rindb.get("bar").data, 12345) b.delete_taskset(tid) self.assertIsNone(b.restore_taskset(tid))
def test_group_store(self): b = DatabaseBackend() tid = gen_unique_id() self.assertIsNone(b.restore_group(tid)) result = {'foo': 'baz', 'bar': SomeClass(12345)} b.save_group(tid, result) rindb = b.restore_group(tid) self.assertIsNotNone(rindb) self.assertEqual(rindb.get('foo'), 'baz') self.assertEqual(rindb.get('bar').data, 12345) b.delete_group(tid) self.assertIsNone(b.restore_group(tid))
def test_backend(self): b = DatabaseBackend() tid = gen_unique_id() self.assertEqual(b.get_status(tid), states.PENDING) self.assertIsNone(b.get_result(tid)) b.mark_as_done(tid, 42) self.assertEqual(b.get_status(tid), states.SUCCESS) self.assertEqual(b.get_result(tid), 42) tid2 = gen_unique_id() result = {'foo': 'baz', 'bar': SomeClass(12345)} b.mark_as_done(tid2, result) # is serialized properly. rindb = b.get_result(tid2) self.assertEqual(rindb.get('foo'), 'baz') self.assertEqual(rindb.get('bar').data, 12345) tid3 = gen_unique_id() try: raise KeyError('foo') except KeyError, exception: pass
def on_success_patched(self, retval, task_id, args, kwargs): app = current_app._get_current_object() DatabaseBackend(app=app).store_result(task_id, retval, 'SUCCESS')
import traceback from uuid import uuid4 from celery.app import default_app from celery.task import task from django.conf import settings from django.core.mail import mail_admins from django.template import loader from django.utils import translation from djcelery.backends.database import DatabaseBackend from platforms.models import TradingAccount from notification import models as notification @task(backend=DatabaseBackend(default_app), acks_late=True, track_started=True, queue="reports") def generate_report(context, template, decimal_separator, saved_report, language, user): translation.activate(language) if context.get('account'): if isinstance(context['account'], int): context['account'] = TradingAccount(mt4_id=context['account']) api = context['account'].get_api("db") else: api = DatabaseAPI() try:
def on_success_patched(self, retval, task_id, args, kwargs): DatabaseBackend().store_result(task_id, retval, 'SUCCESS')
def failure(task_id, exception, args, kwargs, traceback, einfo, *margs, **mkwargs): app = current_app._get_current_object() DatabaseBackend(app=app).mark_as_failure(task_id, exception, traceback)
def postrun(sender, task_id, task, args, kwargs, retval, *margs, **mkwargs): app = current_app._get_current_object() DatabaseBackend(app=app).mark_as_done(task_id, retval)