Explorar o código

celery.utils.compat.izip_longest: Compat version of itertools.izip_longest (Py2.6+)

Ask Solem %!s(int64=15) %!d(string=hai) anos
pai
achega
f98fbbf387
Modificáronse 2 ficheiros con 23 adicións e 1 borrados
  1. 21 0
      celery/utils/compat.py
  2. 2 1
      celery/worker/buckets.py

+ 21 - 0
celery/utils/compat.py

@@ -332,3 +332,24 @@ except ImportError:
         def log(self, level, msg, *args, **kwargs):
             msg, kwargs = self.process(msg, kwargs)
             self.logger.log(level, msg, *args, **kwargs)
+
+############## itertools.izip_longest #######################################
+
+try:
+    from itertools import izip_longest
+except ImportError:
+    import itertools
+    def izip_longest(*args, **kwds):
+        fillvalue = kwds.get("fillvalue")
+
+        def sentinel(counter=([fillvalue] * (len(args) - 1)).pop):
+            yield counter() # yields the fillvalue, or raises IndexError
+
+        fillers = itertools.repeat(fillvalue)
+        iters = [itertools.chain(it, sentinel(), fillers)
+                    for it in args]
+    try:
+        for tup in itertools.izip(*iters):
+            yield tup
+    except IndexError:
+        pass

+ 2 - 1
celery/worker/buckets.py

@@ -1,10 +1,11 @@
 import time
 from Queue import Queue, Empty as QueueEmpty
-from itertools import chain, izip_longest
+from itertools import chain
 
 from carrot.utils import partition
 
 from celery.utils import all
+from celery.utils.compat import izip_longest
 
 RATE_MODIFIER_MAP = {"s": lambda n: n,
                      "m": lambda n: n / 60.0,