def row(self, values): if len(values) != len(self.cols): raise ValueError("wrong number of values; expected {}".format( len(self.cols))) _, r, _, l = self.edge parts = [] if l is not None: # Left. parts.append(self.style(get(l, 0, l, 0))) for i, (col, val) in enumerate(zip(self.cols, values)): if i > 0 and col.sep is not None: # Column separator. parts.append(self.style(get(col.sep, 0, col.sep, 0))) # Contents. if string_length(val) != col.width: raise ValueError( "wrong length for value in position {}; expected {}". format(i, col.width)) parts.append(col.pad + val + col.pad) if r is not None: # Right. parts.append(self.style(get(r, 0, r, 0))) return "".join(parts)
def row(self, values): if len(values) != len(self.cols): raise ValueError( "wrong number of values; expected {}".format(len(self.cols))) _, r, _, l = self.edge parts = [] if l is not None: # Left. parts.append(self.style(get(l, 0, l, 0))) for i, (col, val) in enumerate(zip(self.cols, values)): if i > 0 and col.sep is not None: # Column separator. parts.append(self.style(get(col.sep, 0, col.sep, 0))) # Contents. if string_length(val) != col.width: raise ValueError( "wrong length for value in position {}; expected {}" .format(i, col.width)) parts.append(col.pad + val + col.pad) if r is not None: # Right. parts.append(self.style(get(r, 0, r, 0))) return "".join(parts)
def __init__(self, width, sep=SINGLE, pad=" "): self.width = width self.sep = sep self.pad = pad self._width = width + 2 * string_length(pad)
def test_string_length(): assert string_length("") == 0 assert string_length("x") == 1 assert string_length("xxx") == 3 assert string_length("-x-x-x-x-x-") == 11 assert string_length("\u2026") == 1 assert string_length("x\u2026x") == 3 assert string_length("\u2026...\u2026\u2026") == 6 assert string_length("\x1b[m") == 0 assert string_length("\x1b[32m\u2502") == 1 assert string_length("\u2502\x1b[m") == 1 assert string_length("\x1b[32m\u2502\x1b[m") == 1 assert string_length(" \x1b[32m\u2502\x1b[m ") == 3