瀏覽代碼

Merge branch 'gthb/master'

Ask Solem 14 年之前
父節點
當前提交
334a13b017
共有 4 個文件被更改,包括 49 次插入2 次删除
  1. 41 0
      celery/db/dfd042c7.py
  2. 4 1
      celery/db/models.py
  3. 1 1
      celery/task/base.py
  4. 3 0
      celery/utils/compat.py

+ 41 - 0
celery/db/dfd042c7.py

@@ -0,0 +1,41 @@
+"""
+dfd042c7
+SQLAlchemy 0.5.8 version of a805d4bd, see the docstring of that module for an explanation of this workaround.
+"""
+from sqlalchemy.types import PickleType as _PickleType
+from sqlalchemy import util
+
+
+class PickleType(_PickleType):
+
+    def process_bind_param(self, value, dialect):
+        dumps = self.pickler.dumps
+        protocol = self.protocol
+        if value is None:
+            return None
+        return dumps(value, protocol)
+
+    def process_result_value(self, value, dialect):
+        loads = self.pickler.loads
+        if value is None:
+            return None
+        return loads(str(value))
+
+    def copy_value(self, value):
+        if self.mutable:
+            return self.pickler.loads(self.pickler.dumps(value, self.protocol))
+        else:
+            return value
+
+    def compare_values(self, x, y):
+        if self.comparator:
+            return self.comparator(x, y)
+        elif self.mutable and not hasattr(x, '__eq__') and x is not None:
+            util.warn_deprecated("Objects stored with PickleType when mutable=True must implement __eq__() for reliable comparison.")
+            return self.pickler.dumps(x, self.protocol) == self.pickler.dumps(y, self.protocol)
+        else:
+            return x == y
+
+    def is_mutable(self):
+        return self.mutable
+

+ 4 - 1
celery/db/models.py

@@ -5,7 +5,10 @@ import sqlalchemy as sa
 from celery import states
 from celery.db.session import ResultModelBase
 # See docstring of a805d4bd for an explanation for this workaround ;)
-from celery.db.a805d4bd import PickleType
+if sa.__version__.startswith('0.5'):
+    from celery.db.dfd042c7 import PickleType
+else:
+    from celery.db.a805d4bd import PickleType
 
 
 class Task(ResultModelBase):

+ 1 - 1
celery/task/base.py

@@ -147,7 +147,7 @@ class Task(object):
     .. attribute:: disable_error_emails
 
         Disable all error e-mails for this task (only applicable if
-        ``settings.SEND_CELERY_ERROR_EMAILS`` is on.)
+        ``settings.CELERY_SEND_TASK_ERROR_EMAILS`` is on.)
 
     .. attribute:: serializer
 

+ 3 - 0
celery/utils/compat.py

@@ -333,6 +333,9 @@ except ImportError:
             msg, kwargs = self.process(msg, kwargs)
             self.logger.log(level, msg, *args, **kwargs)
 
+        def isEnabledFor(self, level, *args, **kwargs):
+            return self.logger.isEnabledFor(level, *args, **kwargs)
+
 ############## itertools.izip_longest #######################################
 
 try: