Bläddra i källkod

more confusion with binary types in Py3K

Piotr Maślanka 9 år sedan
förälder
incheckning
3a14446774
2 ändrade filer med 16 tillägg och 11 borttagningar
  1. 12 9
      celery/backends/new_cassandra.py
  2. 4 2
      celery/tests/backends/test_new_cassandra.py

+ 12 - 9
celery/backends/new_cassandra.py

@@ -9,6 +9,7 @@
 from __future__ import absolute_import
 
 import sys
+import six
 try:  # pragma: no cover
     import cassandra
 except ImportError:  # pragma: no cover
@@ -157,16 +158,18 @@ class NewCassandraBackend(BaseBackend):
         self._get_connection(write=True)
 
         import sys
-        if sys.version_info > (3,):
-            buffer = memoryview
+        if six.PY3:
+            buf = lambda x: bytes(x, 'utf8')
+        else:
+            buf = buffer
 
         self._session.execute(self._write_stmt, (
             task_id,
             status,
-            buffer(self.encode(result)),
+            buf(self.encode(result)),
             self.app.now(),
-            buffer(self.encode(traceback)),
-            buffer(self.encode(self.current_task_children(request)))
+            buf(self.encode(traceback)),
+            buf(self.encode(self.current_task_children(request)))
         ))
 
     def _get_task_meta_for(self, task_id):
@@ -181,11 +184,11 @@ class NewCassandraBackend(BaseBackend):
 
         return self.meta_from_decoded({
             'task_id': task_id,
-            'status': str(status),
-            'result': self.decode(str(result)),
+            'status': status,
+            'result': self.decode(result),
             'date_done': date_done.strftime('%Y-%m-%dT%H:%M:%SZ'),
-            'traceback': self.decode(str(traceback)),
-            'children': self.decode(str(children)),
+            'traceback': self.decode(traceback),
+            'children': self.decode(children),
         })
 
     def __reduce__(self, args=(), kwargs={}):

+ 4 - 2
celery/tests/backends/test_new_cassandra.py

@@ -1,7 +1,8 @@
 from __future__ import absolute_import
-
 from pickle import loads, dumps
 from datetime import datetime
+
+import six
 from celery import states
 from celery.exceptions import ImproperlyConfigured
 from celery.tests.case import (
@@ -71,7 +72,8 @@ class test_NewCassandraBackend(AppCase):
             session = x._session = Mock()
             execute = session.execute = Mock()
             execute.return_value = [
-                [states.SUCCESS, '1', datetime.now(), '', None]
+                [states.SUCCESS, '1', datetime.now(), six.binary_type(''),
+                 six.binary_type('')]
             ]
             x.decode = Mock()
             meta = x._get_task_meta_for('task_id')