Commit 747dfb55 authored by Seblu's avatar Seblu
Browse files

list now use TqlCommand

parent 077105e1
Loading
Loading
Loading
Loading
+23 −29
Original line number Diff line number Diff line
@@ -8,29 +8,22 @@ CloudControl list command
from cccli.exception import *
from sjrpc.core.exceptions import *
from cccli.printer import Printer, color
from cccli.command.command import OptionCommand
from cccli.command.command import TqlCommand

class Command_list(OptionCommand):
class Command_list(TqlCommand):
    '''List objects'''

    def __init__(self, cli, argv0):
        OptionCommand.__init__(self, cli, argv0)
        TqlCommand.__init__(self, cli, argv0)
        self.set_usage("%prog [options] [tql]")
        self.add_option("-t", action="store_true", dest="table",
                        help="column aligment display")
        self.add_option("-l", action="store_true", dest="align",
                        help="line aligment display")
        self.add_option("-n", "--no-tagdisplay", action="store_false", dest="tagdisplay", default=True,
                        help="No tag display system")
        self.remove_option("-s")

    def __call__(self, argv):
        self.parse_args(argv)
        if self.options.tagdisplay:
            self.td = self.cli.tagdisplay.resolve
            self.tc = self.cli.tagdisplay.color
        else:
            self.td = lambda tagname, tagvalue: unicode(tagvalue)
            self.tc = lambda tagname: color["reset"]
        if len(self.args) == 0:
            self.args.append("")
        try:
@@ -49,13 +42,13 @@ class Command_list(OptionCommand):
    def _trivial_list(self, objs):
        '''Trivial listing of tag'''
        for o in objs:
            id = self.td("id", o.pop("id"))
            tags = " ".join([ "%s%s:%s%s"%(color["reset"],
            id = self.tdr("id", o.pop("id"))
            tags = " ".join([ "%s%s:%s%s"%(self.tdtc(t),
                                           t,
                                           self.tc(t),
                                           self.td(t, v))
                                           self.tdc(t),
                                           self.tdr(t, v))
                              for (t,v) in o.items() ])
            self.printer.out("%sid:%s%s %s%s"%(color["reset"], self.tc("id"), id, tags, color["reset"]))
            self.printer.out("%sid=%s%s %s%s"%(self.tdtc("id"), self.tdc("id"), id, tags, color["reset"]))

    def _list_align(self, objs):
        '''Listing line aligned'''
@@ -63,21 +56,21 @@ class Command_list(OptionCommand):
        tags = dict()
        for o in objs:
            for t,v in o.items():
                tags[t] = max(len(self.td(t, v)), tags.get(t, len(t)))
                tags[t] = max(len(self.tdr(t, v)), tags.get(t, len(t)))
        # extract id size
        idsize = tags.pop("id")
        # dislay each object by line
        for o in objs:
            # show id tag
            line = "%sid:%s%s"%(color["reset"],
                                  self.tc("id"),
                                  self.td("id", o.pop("id")).ljust(idsize + 2))
            line = "%sid=%s%s"%(self.tdtc("id"),
                                self.tdc("id"),
                                self.tdr("id", o.pop("id")).ljust(idsize + 2))
            # show others tags
            for tagname in sorted(tags.keys()):
                line += "%s%s:%s%s"%(color["reset"],
                line += "%s%s:%s%s"%(self.tdtc(tagname),
                                      tagname,
                                      self.tc(tagname),
                                      self.td(tagname, o.get(tagname, u"")).ljust(tags[tagname] + 1))
                                      self.tdc(tagname),
                                      self.tdr(tagname, o.get(tagname, u"")).ljust(tags[tagname] + 1))
            self.printer.out("%s%s"%(line, color["reset"]))

    def _list_table(self, objs):
@@ -86,23 +79,24 @@ class Command_list(OptionCommand):
        tags = dict()
        for o in objs:
            for t,v in o.items():
                tags[t] = max(len(self.td(t, v)), tags.get(t, len(t)))
                tags[t] = max(len(self.tdr(t, v)), tags.get(t, len(t)))
        # extract id size
        idsize = tags.pop("id")
        # print id title
        self.printer.out(color["reset"], nl="")
        self.printer.out(self.tdtc("id"), nl="")
        self.printer.out("id".ljust(idsize+1), nl=" ")
        # print others titles
        for t,v in tags.items():
            self.printer.out(self.tdtc(t), nl="")
            self.printer.out(t.ljust(v), nl=" ")
        self.printer.out(color["reset"])
        # print obj
        for obj in objs:
            # print id first
            self.printer.out(self.tc("id"), nl="")
            self.printer.out(self.td("id", obj.pop("id")).ljust(idsize+1), nl=" ")
            self.printer.out(self.tdc("id"), nl="")
            self.printer.out(self.tdr("id", obj.pop("id")).ljust(idsize+1), nl=" ")
            # print others tags
            for (t, v) in tags.items():
                self.printer.out(self.tc(t), nl="")
                self.printer.out(self.td(t, obj.get(t, u"")).ljust(v) ,nl=" ")
                self.printer.out(self.tdc(t), nl="")
                self.printer.out(self.tdr(t, obj.get(t, u"")).ljust(v) ,nl=" ")
            self.printer.out(color["reset"])