def __init__(self, executable): 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._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
def __init__(self, executable): # Filter colors if self.PROGNAME is None: self.PROGNAME = os.path.basename(executable) elif isinstance(self.PROGNAME, colors._style): self.PROGNAME = self.PROGNAME | os.path.basename(executable) elif colors.filter(self.PROGNAME) == '': self.PROGNAME = colors.extract( self.PROGNAME) | os.path.basename(executable) if self.DESCRIPTION is None: self.DESCRIPTION = getdoc(self) # Allow None for the colors self.COLOR_GROUPS = defaultdict( lambda: colors.do_nothing, dict() if type(self).COLOR_GROUPS is None else type(self).COLOR_GROUPS) if type(self).COLOR_USAGE is None: self.COLOR_USAGE = colors.do_nothing 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): name = colors.filter(obj.name) if name.startswith("-"): raise SubcommandError( "Subcommand names cannot start with '-'") # it's okay for child classes to override subcommands set by their parents self._subcommands[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 __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