1
2
3
4
5
6
7
8
9
10
11
12
13
15 """
16 OMERO-addition to make working with Tables easier
17 """
18
20 self.headers = list(headers)
21 self.results = [[] for x in self.headers]
22
23 - def col(self, name):
24 """
25 Add a new column and back fill spaces
26 """
27 self.headers.append(name)
28 self.results.append(["" for x in range(len(self.results[0]))])
29
30 - def cols(self, names):
31 """
32 Similar to col() but only adds unknown columns
33 """
34 for name in names:
35 if name not in self.headers:
36 self.col(name)
37
38 - def row(self, *items, **by_name):
39
40 if len(items) > len(self.headers):
41 raise ValueError("Size mismatch: %s != %s" % (len(items), len(self.headers)))
42
43
44 for idx in range(len(self.results)):
45 value = None
46 if idx < len(items):
47 value = items[idx]
48 self.results[idx].append(value)
49
50 size = len(self.results[0])
51 for k, v in by_name.items():
52 if k not in self.headers:
53 raise KeyError("%s not in %s" % (k, self.headers))
54 idx = self.headers.index(k)
55 self.results[idx][-1] = by_name[self.headers[idx]]
56
62
64 return str(self.build())
65
66
69
70
72
74 list.__init__(self, data)
75 self.name = name
76 self.width = max(len(str(x)) for x in data + [name])
77 self.format = ' %%%s%ds ' % (align, self.width)
78
79
81
85
87 for x in self.columns:
88 if i is None:
89 yield x.format % x.name
90 else:
91 yield x.format % x[i]
92
94 yield '|'.join(self.get_row(None))
95 yield "+".join(["-"* (x.width+2) for x in self.columns])
96 for i in range(0, self.length):
97 yield '|'.join(self.get_row(i))
98 yield "(%s %s)" % (self.length, (self.length == 1 and "row" or "rows"))
99
102