def __init__(self, executable): # Convert the colors to plumbum.colors on the instance (class remains the same) for item in ('COLOR_PROGNAME', 'COLOR_DISCRIPTION', 'COLOR_VERSION', 'COLOR_HEADING', 'COLOR_USAGE', 'COLOR_SUBCOMMANDS'): setattr(self, item, colors(getattr(type(self), item))) self.COLOR_GROUPS = defaultdict(lambda: colors()) self.COLOR_GROUPS_BODY = defaultdict(lambda: colors()) for item in type(self).COLOR_GROUPS: self.COLOR_GROUPS[item] = colors(type(self).COLOR_GROUPS[item]) for item in type(self).COLOR_GROUPS_BODY: self.COLOR_GROUPS_BODY[item] = colors( type(self).COLOR_GROUPS_BODY[item]) if self.PROGNAME is None: self.PROGNAME = os.path.basename(executable) if self.DESCRIPTION is None: self.DESCRIPTION = inspect.getdoc(self) self.executable = executable self._switches_by_name = {} self._switches_by_func = {} self._switches_by_envar = {} self._subcommands = {} for cls in reversed(type(self).mro()): for obj in cls.__dict__.values(): if isinstance(obj, Subcommand): if obj.name.startswith("-"): raise SubcommandError( "Subcommand names cannot start with '-'") # it's okay for child classes to override subcommands set by their parents self._subcommands[obj.name] = obj continue swinfo = getattr(obj, "_switch_info", None) if not swinfo: continue for name in swinfo.names: if name in self._unbound_switches: continue if name in self._switches_by_name and not self._switches_by_name[ name].overridable: raise SwitchError( "Switch %r already defined and is not overridable" % (name, )) self._switches_by_name[name] = swinfo self._switches_by_func[swinfo.func] = swinfo if swinfo.envname: self._switches_by_envar[swinfo.envname] = swinfo
def testUndoColor(self): assert '\033[39m' == ~colors.fg assert '\033[49m' == ~colors.bg assert '\033[22m' == ~colors.bold assert '\033[22m' == ~colors.dim for i in range(7): assert '\033[39m' == ~colors(i) assert '\033[49m' == ~colors.bg(i) assert '\033[39m' == ~colors.fg(i) assert '\033[49m' == ~colors.bg(i) for i in range(256): assert '\033[39m' == ~colors.fg[i] assert '\033[49m' == ~colors.bg[i] assert '\033[0m' == ~colors.reset assert colors.do_nothing == ~colors.do_nothing assert colors.bold.reset == ~colors.bold
def testUndoColor(self): assert "\033[39m" == ~colors.fg assert "\033[49m" == ~colors.bg assert "\033[22m" == ~colors.bold assert "\033[22m" == ~colors.dim for i in range(7): assert "\033[39m" == ~colors(i) assert "\033[49m" == ~colors.bg(i) assert "\033[39m" == ~colors.fg(i) assert "\033[49m" == ~colors.bg(i) for i in range(256): assert "\033[39m" == ~colors.fg[i] assert "\033[49m" == ~colors.bg[i] assert "\033[0m" == ~colors.reset assert colors.do_nothing == ~colors.do_nothing assert colors.bold.reset == ~colors.bold
def testUndoColor(self): self.assertEqual('\033[39m', ~colors.fg) self.assertEqual('\033[49m', ~colors.bg) self.assertEqual('\033[21m', ~colors.bold) self.assertEqual('\033[22m', ~colors.dim) for i in range(7): self.assertEqual('\033[39m', ~colors(i)) self.assertEqual('\033[49m', ~colors.bg(i)) self.assertEqual('\033[39m', ~colors.fg(i)) self.assertEqual('\033[49m', ~colors.bg(i)) for i in range(256): self.assertEqual('\033[39m', ~colors.fg[i]) self.assertEqual('\033[49m', ~colors.bg[i]) self.assertEqual('\033[0m', ~colors.reset) self.assertEqual(colors.do_nothing, ~colors.do_nothing) self.assertEqual(colors.bold.reset, ~colors.bold)
def testFromCode(self): self.assertEqual(colors('\033[31m'),colors.red)
def testFromPreviousColor(self): self.assertEqual(colors(colors.red), colors.red) self.assertEqual(colors(colors.bg.red), colors.bg.red) self.assertEqual(colors(colors.bold), colors.bold)
def testLoadNumericalColor(self): self.assertEqual(colors.full(2), colors[2]) self.assertEqual(colors.simple(2), colors(2)) self.assertEqual(colors(54), colors[54]) self.assertEqual(colors(1,30,77),colors.rgb(1,30,77)) self.assertEqual(colors[1,30,77],colors.rgb(1,30,77))
def testEmptyStyle(self): assert str(colors()) == '' assert str(colors('')) == '' assert str(colors(None)) == ''
def testEmptyStyle(self): assert str(colors()) == "" assert str(colors("")) == "" assert str(colors(None)) == ""
def testLoadNumericalColor(self): self.assertEqual(colors.full(2), colors[2]) self.assertEqual(colors.simple(2), colors(2)) self.assertEqual(colors(54), colors[54]) self.assertEqual(colors(1, 30, 77), colors.rgb(1, 30, 77)) self.assertEqual(colors[1, 30, 77], colors.rgb(1, 30, 77))
def testFromCode(self): self.assertEqual(colors('\033[31m'), colors.red)
def testEmptyStyle(self): self.assertEqual(str(colors()), '') self.assertEqual(str(colors('')), '') self.assertEqual(str(colors(None)), '')
def testFromCode(self): assert colors('\033[31m') == colors.red
def testFromPreviousColor(self): assert colors(colors.red) == colors.red assert colors(colors.bg.red) == colors.bg.red assert colors(colors.bold) == colors.bold
def testLoadNumericalColor(self): assert colors.full(2) == colors[2] assert colors.simple(2) == colors(2) assert colors(54) == colors[54] assert colors(1,30,77) == colors.rgb(1,30,77) assert colors[1,30,77] == colors.rgb(1,30,77)
def testLoadNumericalColor(self): assert colors.full(2) == colors[2] assert colors.simple(2) == colors(2) assert colors(54) == colors[54] assert colors(1, 30, 77) == colors.rgb(1, 30, 77) assert colors[1, 30, 77] == colors.rgb(1, 30, 77)
def testFromCode(self): assert colors("\033[31m") == colors.red