def print_option_list(self, options, header, max_length): # Generate lines of help text. line_width = Terminfo.GetColumns() opt_width = max_length + 2 + 2 + 2 # room for indent + dashes + gutter text_width = line_width - opt_width big_indent = ' ' * opt_width print header for option in options: long, short, help = option[:3] if long[-1] == '=': long = long[0:-1] # Case 1: no short option at all if short is None: opt_names = long # Case 2: we have a short option, so we have to include it # just after the long option else: opt_names = "%s (-%s)" % (long, short) text = wrap_text(help, text_width) if text: print " --%-*s %s" % (max_length, opt_names, text[0]) for line in text[1:]: print big_indent + line else: print " --%-*s" % (max_length, opt_names) print return
def format_option (self, option): # The help for each option consists of two parts: # * the opt strings and metavars # eg. ("-x", or "-fFILENAME, --file=FILENAME") # * the user-supplied help string # eg. ("turn on expert mode", "read data from FILENAME") # # If possible, we write both of these on the same line: # -x turn on expert mode # # But if the opt string list is too long, we put the help # string on a second line, indented to the same column it would # start in if it fit on the first line. # -fFILENAME, --file=FILENAME # read data from FILENAME result = [] opts = option.option_strings opt_width = self.help_position - self.current_indent - 2 if len(opts) > opt_width: opts = "%*s%s\n" % (self.current_indent, "", opts) indent_first = self.help_position else: # start help on same line as opts opts = "%*s%-*s " % (self.current_indent, "", opt_width, opts) indent_first = 0 result.append(opts) if option.help: help_lines = wrap_text(option.help, self.help_width) result.append("%*s%s\n" % (indent_first, "", help_lines[0])) result.extend(["%*s%s\n" % (self.help_position, "", line) for line in help_lines[1:]]) elif opts[-1] != "\n": result.append("\n") return "".join(result)
def format_description (self, description): desc_width = self.width - self.current_indent desc_lines = wrap_text(description, desc_width) result = ["%*s%s\n" % (self.current_indent, "", line) for line in desc_lines] return "".join(result)
def generate_help(self, level=1, max_opt=0): """Generate help text (a list of strings, one per suggested line of output) from the option table for this FancyGetopt object. """ # If max_opt is > 0, this is help for a sub-option # maximum width has already been determined. if max_opt > 0: # The indent for sub-options is included in option length opt_width = max_opt - 2*(level-1) else: opt_width = max_opt = self.findMaxOption() # room for indent + short option + dashes + longest option + gutter + add'l indent col_width = 2*level + 4 + 2 + max_opt + 2 + 2 # Typical help block looks like this: # --foo controls foonabulation # Help block for longest option looks like this: # --flimflam set the flim-flam level # and with wrapped text: # --flimflam set the flim-flam level (must be between # 0 and 100, except on Tuesdays) # Options with short names will have the short name shown (but # it doesn't contribute to max_opt): # -f, --foo controls foonabulation # If adding the short option would make the left column too wide, # we push the explanation off to the next line # -l, --flimflam # set the flim-flam level # Important parameters: # - 2 spaces before option block start lines # - 2 dashes for each long option name # - min. 2 spaces between option and explanation (gutter) # Now generate lines of help text. line_width = CONSOLE_WIDTH text_width = line_width - col_width indent = ' ' * level big_indent = ' ' * (col_width) lines = [] for option in self: if isinstance(option, ExclusiveOptions): lines.extend(option.choices.generate_help(level, max_opt)) continue text = wrap_text(option.description, text_width) short_opt = option.shortName if option.takesArg: long_opt = '%s=<%s>' % (option.longName, option.argName) else: long_opt = option.longName if option.shortName: short_part = '-%s' % (short_opt) else: short_part = ' ' if option.shortName and option.longName: short_part += ', ' else: short_part += ' ' long_part = "--%-*s" % (opt_width, long_opt) if text: lines.append('%s%s%s %s' % (indent, short_part, long_part, text[0])) else: lines.append('%s%s%s' % (indent, short_part, long_part)) # Add any description that didn't fit on the first line for line in text[1:]: lines.append(big_indent + line) if isinstance(option, TypedOption): for (val, desc) in option.allowed: text = wrap_text(desc, text_width) lines.append('%s %-*s%s' % (indent, opt_width, val, text[0])) for line in text[1:]: lines.append(big_indent + line) if hasattr(option, 'subOptions'): lines.extend(option.subOptions.generate_help(level + 1, max_opt)) return lines
def print_help (self, file=None): from distutils.fancy_getopt import wrap_text if file is None: file = sys.stdout self.print_usage(file) # The help for each option consists of two parts: # * the opt strings and metavars # eg. ("-x", or "-fFILENAME, --file=FILENAME") # * the user-supplied help string # eg. ("turn on expert mode", "read data from FILENAME") # # If possible, we write both of these on the same line: # -x turn on expert mode # # But if the opt string list is too long, we put the help # string on a second line, indented to the same column it would # start in if it fit on the first line. # -fFILENAME, --file=FILENAME # read data from FILENAME print >>file, "options:" width = 78 # assume 80 cols for now option_help = [] # list of (string, string) tuples lengths = [] for option in self.option_list: takes_value = option.takes_value() if takes_value: metavar = option.metavar or option.dest.upper() opts = [] # list of "-a" or "--foo=FILE" strings if option.help is SUPPRESS_HELP: continue if takes_value: for sopt in option._short_opts: opts.append(sopt + metavar) for lopt in option._long_opts: opts.append(lopt + "=" + metavar) else: for opt in option._short_opts + option._long_opts: opts.append(opt) opts = ", ".join(opts) option_help.append((opts, option.help)) lengths.append(len(opts)) max_opts = min(max(lengths), 20) for (opts, help) in option_help: # how much to indent lines 2 .. N of help text indent_rest = 2 + max_opts + 2 help_width = width - indent_rest if len(opts) > max_opts: opts = " " + opts + "\n" indent_first = indent_rest else: # start help on same line as opts opts = " %-*s " % (max_opts, opts) indent_first = 0 file.write(opts) if help: help_lines = wrap_text(help, help_width) print >>file, "%*s%s" % (indent_first, "", help_lines[0]) for line in help_lines[1:]: print >>file, "%*s%s" % (indent_rest, "", line) elif opts[-1] != "\n": file.write("\n")
def print_help(self, file=None): from distutils.fancy_getopt import wrap_text if file is None: file = sys.stdout self.print_usage(file) # The help for each option consists of two parts: # * the opt strings and metavars # eg. ("-x", or "-fFILENAME, --file=FILENAME") # * the user-supplied help string # eg. ("turn on expert mode", "read data from FILENAME") # # If possible, we write both of these on the same line: # -x turn on expert mode # # But if the opt string list is too long, we put the help # string on a second line, indented to the same column it would # start in if it fit on the first line. # -fFILENAME, --file=FILENAME # read data from FILENAME print >> file, "options:" width = 78 # assume 80 cols for now option_help = [] # list of (string, string) tuples lengths = [] for option in self.option_list: takes_value = option.takes_value() if takes_value: metavar = option.metavar or option.dest.upper() opts = [] # list of "-a" or "--foo=FILE" strings if option.help is SUPPRESS_HELP: continue if takes_value: for sopt in option._short_opts: opts.append(sopt + metavar) for lopt in option._long_opts: opts.append(lopt + "=" + metavar) else: for opt in option._short_opts + option._long_opts: opts.append(opt) opts = ", ".join(opts) option_help.append((opts, option.help)) lengths.append(len(opts)) max_opts = min(max(lengths), 20) for (opts, help) in option_help: # how much to indent lines 2 .. N of help text indent_rest = 2 + max_opts + 2 help_width = width - indent_rest if len(opts) > max_opts: opts = " " + opts + "\n" indent_first = indent_rest else: # start help on same line as opts opts = " %-*s " % (max_opts, opts) indent_first = 0 file.write(opts) if help: help_lines = wrap_text(help, help_width) print >> file, "%*s%s" % (indent_first, "", help_lines[0]) for line in help_lines[1:]: print >> file, "%*s%s" % (indent_rest, "", line) elif opts[-1] != "\n": file.write("\n")
to be %r at the moment, contains modules with names that are the same as modules that 4Suite is trying to import. For example, 4Suite cannot be invoked from the source code directory that contains the setup.py that was used to install 4Suite. Try changing the current working directory to a suitable location outside of the 4Suite source. If you continue to have trouble, please send a message to the 4Suite mailing list at [email protected], along with any information that might explain why you got this message. """ % os.getcwd() # Wrap the message to 78 characters preserving paragraphs lines = [] for chunk in msg.split('\n\n'): lines.extend(wrap_text(chunk, 78)) lines.append('') raise SystemExit('\n'.join(lines)) def GetConfigVars(*names): """ With no arguments, return a dictionary of all configuration variables relevant for the current installation. With arguments, return a list of values that result from looking up each argument in the configuration variable dictionary. The following are the currently defined variables and their meaning: NAME, FULLNAME, VERSION, URL - fields as given for call to setup() BINDIR - directory for user executables
def generate_help(self, level=1, max_opt=0): """Generate help text (a list of strings, one per suggested line of output) from the option table for this FancyGetopt object. """ # If max_opt is > 0, this is help for a sub-option # maximum width has already been determined. if max_opt > 0: # The indent for sub-options is included in option length opt_width = max_opt - 2 * (level - 1) else: opt_width = max_opt = self.findMaxOption() # room for indent + short option + dashes + longest option + gutter + add'l indent col_width = 2 * level + 4 + 2 + max_opt + 2 + 2 # Typical help block looks like this: # --foo controls foonabulation # Help block for longest option looks like this: # --flimflam set the flim-flam level # and with wrapped text: # --flimflam set the flim-flam level (must be between # 0 and 100, except on Tuesdays) # Options with short names will have the short name shown (but # it doesn't contribute to max_opt): # -f, --foo controls foonabulation # If adding the short option would make the left column too wide, # we push the explanation off to the next line # -l, --flimflam # set the flim-flam level # Important parameters: # - 2 spaces before option block start lines # - 2 dashes for each long option name # - min. 2 spaces between option and explanation (gutter) # Now generate lines of help text. line_width = CONSOLE_WIDTH text_width = line_width - col_width indent = ' ' * level big_indent = ' ' * (col_width) lines = [] for option in self: if isinstance(option, ExclusiveOptions): lines.extend(option.choices.generate_help(level, max_opt)) continue text = wrap_text(option.description, text_width) short_opt = option.shortName if option.takesArg: long_opt = '%s=<%s>' % (option.longName, option.argName) else: long_opt = option.longName if option.shortName: short_part = '-%s' % (short_opt) else: short_part = ' ' if option.shortName and option.longName: short_part += ', ' else: short_part += ' ' long_part = "--%-*s" % (opt_width, long_opt) if text: lines.append('%s%s%s %s' % (indent, short_part, long_part, text[0])) else: lines.append('%s%s%s' % (indent, short_part, long_part)) # Add any description that didn't fit on the first line for line in text[1:]: lines.append(big_indent + line) if isinstance(option, TypedOption): for (val, desc) in option.allowed: text = wrap_text(desc, text_width) lines.append('%s %-*s%s' % (indent, opt_width, val, text[0])) for line in text[1:]: lines.append(big_indent + line) if hasattr(option, 'subOptions'): lines.extend( option.subOptions.generate_help(level + 1, max_opt)) return lines