Преглед на файлове

Py2.5: TaskSet can't be UserList since it's an old-style class

Ask Solem преди 13 години
родител
ревизия
fea6f43836
променени са 1 файла, в които са добавени 7 реда и са изтрити 7 реда
  1. 7 7
      celery/task/sets.py

+ 7 - 7
celery/task/sets.py

@@ -9,7 +9,7 @@ from celery.utils import uuid
 from celery.utils.compat import UserList
 
 
-class TaskSet(UserList):
+class TaskSet(list):
     """A task containing several subtasks, making it possible
     to track how many, or when all of the tasks have been completed.
 
@@ -26,10 +26,10 @@ class TaskSet(UserList):
     app = None
 
     def __init__(self, tasks=None, app=None, Publisher=None):
+        super(TaskSet, self).__init__(maybe_subtask(t) for t in tasks or [])
         self.app = app_or_default(app or self.app)
-        self.data = [maybe_subtask(t) for t in tasks or []]
-        self.total = len(self.tasks)
         self.Publisher = Publisher or self.app.amqp.TaskProducer
+        self.total = len(self)  # XXX compat
 
     def apply_async(self, connection=None, connect_timeout=None,
             publisher=None, taskset_id=None):
@@ -52,7 +52,7 @@ class TaskSet(UserList):
 
     def _async_results(self, taskset_id, publisher):
         return [task.apply_async(taskset_id=taskset_id, publisher=publisher)
-                for task in self.tasks]
+                    for task in self]
 
     def apply(self, taskset_id=None):
         """Applies the TaskSet locally by blocking until all tasks return."""
@@ -60,11 +60,11 @@ class TaskSet(UserList):
         return self.app.TaskSetResult(setid, self._sync_results(setid))
 
     def _sync_results(self, taskset_id):
-        return [task.apply(taskset_id=taskset_id) for task in self.tasks]
+        return [task.apply(taskset_id=taskset_id) for task in self]
 
     def _get_tasks(self):
-        return self.data
+        return self
 
     def _set_tasks(self, tasks):
-        self.data = tasks
+        self[:] = tasks
     tasks = property(_get_tasks, _set_tasks)