Source code for pkgcore.resolver.util
__all__ = (
"group_attempts",
"fails_filter",
"reduce_to_failures",
)
[docs]
def group_attempts(sequence, filter_func=None):
if filter_func is None:
filter_func = lambda x: True
last, l = None, []
for x in sequence:
if isinstance(x, tuple) and x[0] == "inspecting":
if l:
yield last, l
last, l = x[1], []
elif last is not None:
if filter_func(x):
# inline ignored frames
if getattr(x, "ignored", False):
l.extend(y for y in x.events if filter_func(y))
else:
l.append(x)
if l:
yield last, l
[docs]
def fails_filter(x):
if not isinstance(x, tuple):
return not x.succeeded
if x[0] == "viable":
return not x[1]
return x[0] != "inspecting"
[docs]
def reduce_to_failures(frame):
if frame.succeeded:
return []
l = [frame]
for pkg, nodes in group_attempts(frame.events, fails_filter):
l2 = []
for x in nodes:
if not isinstance(x, tuple):
l2.append(reduce_to_failures(x))
else:
l2.append(x)
l.append((pkg, l2))
return l