From 5d5e89d96d7a78d28399d955e28eabee36ed28d6 Mon Sep 17 00:00:00 2001
From: Zooko O'Whielacronx <zooko@zooko.com>
Date: Sun, 4 Jan 2009 10:52:02 -0700
Subject: [PATCH] util: add gatherResults which is a deferred-list-like thing
 that doesn't wrap failures in a FirstError

---
 src/allmydata/util/deferredutil.py | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/allmydata/util/deferredutil.py b/src/allmydata/util/deferredutil.py
index ca62e5ae..8f37ce0d 100644
--- a/src/allmydata/util/deferredutil.py
+++ b/src/allmydata/util/deferredutil.py
@@ -15,3 +15,22 @@ def DeferredListShouldSucceed(dl):
     d.addCallback(_check_deferred_list)
     return d
 
+def _parseDListResult(l):
+    return [x[1] for x in l]
+
+def _unwrapFirstError(f):
+    f.trap(defer.FirstError)
+    raise f.value.subFailure
+
+def gatherResults(deferredList):
+    """Returns list with result of given Deferreds.
+
+    This builds on C{DeferredList} but is useful since you don't
+    need to parse the result for success/failure.
+
+    @type deferredList:  C{list} of L{Deferred}s
+    """
+    d = defer.DeferredList(deferredList, fireOnOneErrback=True, consumeErrors=True)
+    d.addCallbacks(_parseDListResult, _unwrapFirstError)
+    return d
+
-- 
2.45.2