Loading cccli/command/list.py +41 −15 Original line number Diff line number Diff line Loading @@ -77,32 +77,58 @@ class Command_list(TqlCommand): def list_table(self, objs): '''Listing table style''' term_height, term_width = self.printer.get_term_size() # get max size by tag tags = dict() for o in objs["objects"]: for (t,v) in o.items(): tags[t] = max(len(self.tdr(t, v)), tags.get(t, len(t))) size_id = tags["id"] + len(" ") # compute index width indexw = max(int(math.log10(len(objs["objects"]))+1), len("index ")) if size_id + indexw >= term_width: raise cmdError("term width is too small") # build initial print order order = [ t for t in objs.get("order", []) if t in tags ] order.extend(sorted(set(tags.keys()) - set(order))) # remove id of order order = order[1:] # print tag table by title group while order: tag_index = 0 line_pos = 0 if self.options.index: # compute index width indexw = max(int(math.log10(len(objs["objects"]))+1), len("index ")) # print index title self.printer.out("index ", nl="") # print tag title in order line_pos = indexw # print id title self.printer.out(self.tdtc("id") + "id".ljust(tags["id"]), nl=" ") line_pos += size_id # print tags title section in order for t in order: self.printer.out(self.tdtc(t), nl="") self.printer.out(t.ljust(tags[t]), nl=" ") # if the tag don't fit in space left, stop the title loop if line_pos + tags[t] + len(" ") > term_width and tag_index != 0: break self.printer.out(self.tdtc(t) + t.ljust(tags[t]), nl=" ") line_pos += tags[t] + len(" ") tag_index += 1 self.printer.out(color["reset"]) # print tags in order # print tags corresponding to the title for (i,o) in enumerate(objs["objects"]): for t in order: line_pos = 0 if self.options.index: self.printer.out(("%d "%i).ljust(indexw), nl="") line_pos += indexw # print id value self.printer.out(self.tdc("id") + self.tdr("id", o.get("id", u"")).ljust(tags["id"]), nl=" ") line_pos += size_id # print tag value for t in order[:tag_index]: self.printer.out(self.tdc(t), nl="") self.printer.out(self.tdr(t, o.get(t, u"")).ljust(tags[t]) ,nl=" ") buf, line_pos = self._format_indent_text(self.tdr(t, o.get(t, u"")).ljust(tags[t]) + " ", line_pos, size_id, term_width) self.printer.out(buf, nl="") self.printer.out(color["reset"]) order = order[tag_index:] def list_vertical(self, objs): '''Vertical display''' Loading Loading
cccli/command/list.py +41 −15 Original line number Diff line number Diff line Loading @@ -77,32 +77,58 @@ class Command_list(TqlCommand): def list_table(self, objs): '''Listing table style''' term_height, term_width = self.printer.get_term_size() # get max size by tag tags = dict() for o in objs["objects"]: for (t,v) in o.items(): tags[t] = max(len(self.tdr(t, v)), tags.get(t, len(t))) size_id = tags["id"] + len(" ") # compute index width indexw = max(int(math.log10(len(objs["objects"]))+1), len("index ")) if size_id + indexw >= term_width: raise cmdError("term width is too small") # build initial print order order = [ t for t in objs.get("order", []) if t in tags ] order.extend(sorted(set(tags.keys()) - set(order))) # remove id of order order = order[1:] # print tag table by title group while order: tag_index = 0 line_pos = 0 if self.options.index: # compute index width indexw = max(int(math.log10(len(objs["objects"]))+1), len("index ")) # print index title self.printer.out("index ", nl="") # print tag title in order line_pos = indexw # print id title self.printer.out(self.tdtc("id") + "id".ljust(tags["id"]), nl=" ") line_pos += size_id # print tags title section in order for t in order: self.printer.out(self.tdtc(t), nl="") self.printer.out(t.ljust(tags[t]), nl=" ") # if the tag don't fit in space left, stop the title loop if line_pos + tags[t] + len(" ") > term_width and tag_index != 0: break self.printer.out(self.tdtc(t) + t.ljust(tags[t]), nl=" ") line_pos += tags[t] + len(" ") tag_index += 1 self.printer.out(color["reset"]) # print tags in order # print tags corresponding to the title for (i,o) in enumerate(objs["objects"]): for t in order: line_pos = 0 if self.options.index: self.printer.out(("%d "%i).ljust(indexw), nl="") line_pos += indexw # print id value self.printer.out(self.tdc("id") + self.tdr("id", o.get("id", u"")).ljust(tags["id"]), nl=" ") line_pos += size_id # print tag value for t in order[:tag_index]: self.printer.out(self.tdc(t), nl="") self.printer.out(self.tdr(t, o.get(t, u"")).ljust(tags[t]) ,nl=" ") buf, line_pos = self._format_indent_text(self.tdr(t, o.get(t, u"")).ljust(tags[t]) + " ", line_pos, size_id, term_width) self.printer.out(buf, nl="") self.printer.out(color["reset"]) order = order[tag_index:] def list_vertical(self, objs): '''Vertical display''' Loading