Ask Solem 10 anni fa
parent
commit
43eabfd4fa

+ 3 - 1
celery/fixups/django.py

@@ -60,7 +60,9 @@ class DjangoFixup(object):
 
     @cached_property
     def worker_fixup(self):
-        return DjangoWorkerFixup(self.app)
+        if self._worker_fixup is None:
+            self._worker_fixup = DjangoWorkerFixup(self.app)
+        return self._worker_fixup
 
     def on_import_modules(self, **kwargs):
         # call django.setup() before task modules are imported

+ 2 - 2
celery/result.py

@@ -170,10 +170,10 @@ class AsyncResult(ResultBase):
         if meta:
             self._maybe_set_cache(meta)
             status = meta['status']
-            if status in EXCEPTION_STATES:
-                return self.backend.exception_to_python(meta['result'])
             if status in PROPAGATE_STATES and propagate:
                 raise self.backend.exception_to_python(meta['result'])
+            if status in EXCEPTION_STATES:
+                return self.backend.exception_to_python(meta['result'])
             return meta['result']
     wait = get  # deprecated alias to :meth:`get`.
 

+ 1 - 3
celery/tests/fixups/test_django.py

@@ -93,9 +93,7 @@ class test_DjangoFixup(FixupCase):
                 f.on_worker_init()
                 DWF.assert_called_with(f.app)
                 DWF.return_value.install.assert_called_with()
-                self.assertIs(
-                    f._worker_fixup, DWF.return_value.install.return_value,
-                )
+                self.assertIs(f._worker_fixup, DWF.return_value)
 
 
 class test_DjangoWorkerFixup(FixupCase):

+ 5 - 2
celery/tests/tasks/test_result.py

@@ -74,15 +74,18 @@ class test_AsyncResult(AppCase):
 
     def test_propagates_for_parent(self):
         x = self.app.AsyncResult(uuid())
-        x.backend = Mock()
+        x.backend = Mock(name='backend')
         x.backend.get_task_meta.return_value = {}
+        x.backend.wait_for.return_value = {
+            'status': states.SUCCESS, 'result': 84,
+        }
         x.parent = EagerResult(uuid(), KeyError('foo'), states.FAILURE)
         with self.assertRaises(KeyError):
             x.get(propagate=True)
         self.assertFalse(x.backend.wait_for.called)
 
         x.parent = EagerResult(uuid(), 42, states.SUCCESS)
-        x.get(propagate=True)
+        self.assertEqual(x.get(propagate=True), 84)
         self.assertTrue(x.backend.wait_for.called)
 
     def test_get_children(self):