Browse Source

Django: Perform model validation on worker init. Closes #1681

Ask Solem 11 years ago
parent
commit
32558fba57
1 changed files with 11 additions and 0 deletions
  1. 11 0
      celery/fixups/django.py

+ 11 - 0
celery/fixups/django.py

@@ -1,5 +1,6 @@
 from __future__ import absolute_import
 
+import io
 import os
 import sys
 import warnings
@@ -132,12 +133,22 @@ class DjangoWorkerFixup(object):
             _oracle_database_errors
         )
 
+    def validate_models(self):
+        from django.core.management.validation import get_validation_errors
+        s = io.StringIO()
+        num_errors = get_validation_errors(s, None)
+        if num_errors:
+            raise RuntimeError(
+                'One or more Django models did not validate:\n{0}'.format(
+                    s.getvalue()))
+
     def install(self):
         signals.beat_embedded_init.connect(self.close_database)
         signals.worker_ready.connect(self.on_worker_ready)
         signals.task_prerun.connect(self.on_task_prerun)
         signals.task_postrun.connect(self.on_task_postrun)
         signals.worker_process_init.connect(self.on_worker_process_init)
+        self.validate_models()
         self.close_database()
         self.close_cache()
         return self