Use groupby()

This commit is contained in:
Behdad Esfahbod 2012-05-09 08:16:15 +02:00
parent c438a14b62
commit 98669ceb77
1 changed files with 8 additions and 18 deletions

View File

@ -150,7 +150,8 @@ class DiffFilters:
@staticmethod @staticmethod
def filter_failures (f): def filter_failures (f):
for lines in DiffHelpers.separate_test_cases (f): for key, lines in DiffHelpers.separate_test_cases (f):
lines = list (lines)
if not DiffHelpers.test_passed (lines): if not DiffHelpers.test_passed (lines):
for l in lines: yield l for l in lines: yield l
@ -160,7 +161,7 @@ class DiffSinks:
def print_stat (f): def print_stat (f):
passed = 0 passed = 0
failed = 0 failed = 0
for lines in DiffHelpers.separate_test_cases (f): for key, lines in DiffHelpers.separate_test_cases (f):
if DiffHelpers.test_passed (lines): if DiffHelpers.test_passed (lines):
passed += 1 passed += 1
else: else:
@ -176,22 +177,11 @@ class DiffHelpers:
have a colon character, groups them by identifier, have a colon character, groups them by identifier,
yielding lists of all lines with the same identifier.''' yielding lists of all lines with the same identifier.'''
acc = [] def identifier (l):
iden = None if ':' in l[1:]:
for l in f: return l[1:l.index (':')]
if ':' not in l: return l
if acc: yield acc return groupby (f, key=identifier)
acc = []
iden = None
yield [l]
continue
l_iden = l[1:l.index (':')]
if acc and iden != l_iden:
yield acc
acc = []
iden = l_iden
acc.append (l)
if acc: yield acc
@staticmethod @staticmethod
def test_passed (lines): def test_passed (lines):