Exemple #1
0
    def __str__(self):
        field_groups = utils.group_by(
            sum((r.fields for r in self.records), []), lambda f: f.name)
        sum_record = self.sum(field_groups)
        width_by_name = {
            name: max(map(len, (name, ) + tuple(f.formatted for f in fields)))
            for (name, fields) in field_groups.items()
        }
        for f in sum_record.fields:
            width_by_name[f.name] = max(width_by_name[f.name],
                                        len(f.formatted))
        for r in self.records:
            r.format(width_by_name)
        sum_record.format(width_by_name)

        title_record = deepcopy(self.records[0])  # TODO: will tox hate me
        for f in title_record.fields:
            f.value = f.name
            f.formatter = lambda x: x
        bar = '*' * (sum(width_by_name.values()) +
                     (len(width_by_name) - 1) * len(title_record.separator))
        title = self.title, bar, str(title_record), bar
        data = tuple(map(str, self.records))
        total = (bar, str(sum_record), bar)
        return self.separator.join(title + data + total)
Exemple #2
0
def get_unique(x, key, order='first'):
    assert order in ('first', 'last', 'unique')
    grouped = utils.group_by(x, key)
    if order == 'unique':
        assert all(len(v) == 1 for v in grouped.values())
    index = 0 if order == 'first' else -1
    return [grouped[k][index] for k in grouped]
Exemple #3
0
 def make_get_by_name(self):
     grouped = utils.group_by(self.xs, self.name)
     self.names = utils.by(map(lambda v: v.pop(), grouped.values()),
                           self.name)
     for name, g in grouped.items():
         if g:
             utils.log_debug('duplicate name, using first', name,
                             self.names[name], *g)
Exemple #4
0
def parse_items(item_dicts):
    utils.log_debug('parse_items', len(item_dicts))
    return utils.group_by(map(Item, item_dicts), lambda i: i.id)  # this is an Order.id
Exemple #5
0
 def make_get_by_name(self):
     self.names = utils.group_by(self.xs, self.name)