def update_variables(self, watch, watch_extras, event, whitelist): self.last_line_no = self.frame.f_lineno old_local_reprs = self.local_reprs self.local_reprs = OrderedDict( (source, my_cheap_repr(value)) for source, value in self.get_local_reprs(watch, watch_extras, whitelist)) if self.comprehension_type: for name, value_repr in self.local_reprs.items(): values = self.comprehension_variables.setdefault(name, []) if not values or values[-1] != value_repr: values.append(value_repr) values[:] = truncate_list(values, 11) if event in ('return', 'exception'): return [ (name, ', '.join(values)) for name, values in self.comprehension_variables.items() ] else: return [] variables = [] for name, value_repr in self.local_reprs.items(): if name not in old_local_reprs or old_local_reprs[ name] != value_repr: variables.append((name, value_repr)) return variables
def test_truncate_list(): max_length = 5 for i in range(max_length * 2): lst = i * ['a'] truncated = truncate_list(lst, max_length) if len(lst) <= max_length: assert lst == truncated else: assert truncated == ['a', 'a', '...', 'a', 'a'] assert len(truncated) == max_length