def test_doubleNewline(self): """ Allow paragraphs delimited by two \ns. """ sampleText = "et\n\nphone\nhome." result = text.wordWrap(sampleText, self.lineWidth) self.assertEqual(result, ["et", "", "phone home.", ""])
class ShellOptions(Options): """ Command line options for "calendarserver_shell". """ synopsis = "\n".join( wordWrap( """ Usage: calendarserver_shell [options]\n """ + __doc__, int(os.environ.get("COLUMNS", "80")))) optParameters = [ [ "config", "f", DEFAULT_CONFIG_FILE, "Specify caldavd.plist configuration path." ], ] def __init__(self): super(ShellOptions, self).__init__()
def setUp(self): self.sampleSplitText = sampleText.split() self.output = text.wordWrap(sampleText, lineWidth)
if e: print(e) print("") try: UpgradeOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = '\n'.join( wordWrap( """ Usage: calendarserver_upgrade [options] [input specifiers]\n """ + __doc__, int(os.environ.get('COLUMNS', '80')))) class UpgradeOptions(Options): """ Command-line options for 'calendarserver_upgrade' @ivar upgraders: a list of L{DirectoryUpgradeer} objects which can identify the calendars to upgrade, given a directory service. This list is built by parsing --record and --collection options. """ synopsis = description optFlags = [
def setUp(self): self.sampleSplitText = string.split(sampleText) self.output = text.wordWrap(sampleText, lineWidth)
if e: print(e) print("") try: ValidOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = '\n'.join( wordWrap( """ Usage: validcalendardata [options] [input specifiers]\n """, int(os.environ.get('COLUMNS', '80')))) class ValidOptions(Options): """ Command-line options for 'validcalendardata' """ synopsis = description optFlags = [ ['verbose', 'v', "Verbose logging."], ['debug', 'D', "Debug logging."], ['parse-only', 'p', "Only validate parsing of the data."], ]
def setUp(self): self.lineWidth = 72 self.sampleSplitText = sampleText.split() self.output = text.wordWrap(sampleText, self.lineWidth)
def getUsage(self, width=None): # If subOptions exists by now, then there was probably an error while # parsing its options. if hasattr(self, 'subOptions'): return self.subOptions.getUsage(width=width) if not width: width = int(os.environ.get('COLUMNS', '80')) if hasattr(self, 'subCommands'): cmdDicts = [] for (cmd, short, parser, desc) in self.subCommands: cmdDicts.append( {'long': cmd, 'short': short, 'doc': desc, 'optType': 'command', 'default': None }) chunks = docMakeChunks(cmdDicts, width) commands = 'Commands:\n' + ''.join(chunks) else: commands = '' longToShort = {} for key, value in self.synonyms.items(): longname = value if (key != longname) and (len(key) == 1): longToShort[longname] = key else: if longname not in longToShort: longToShort[longname] = None else: pass optDicts = [] for opt in self.longOpt: if opt[-1] == '=': optType = 'parameter' opt = opt[:-1] else: optType = 'flag' optDicts.append( {'long': opt, 'short': longToShort[opt], 'doc': self.docs[opt], 'optType': optType, 'default': self.defaults.get(opt, None), 'dispatch': self._dispatch.get(opt, None) }) if not (getattr(self, "longdesc", None) is None): longdesc = self.longdesc else: import __main__ if getattr(__main__, '__doc__', None): longdesc = __main__.__doc__ else: longdesc = '' if longdesc: longdesc = ('\n' + '\n'.join(text.wordWrap(longdesc, width)).strip() + '\n') if optDicts: chunks = docMakeChunks(optDicts, width) s = "Options:\n%s" % (''.join(chunks)) else: s = "Options: None\n" return s + longdesc + commands
def getUsage(self, width=None): # If subOptions exists by now, then there was probably an error while # parsing its options. if hasattr(self, 'subOptions'): return self.subOptions.getUsage(width=width) if not width: width = int(os.environ.get('COLUMNS', '80')) if hasattr(self, 'subCommands'): cmdDicts = [] for (cmd, short, parser, desc) in self.subCommands: cmdDicts.append({ 'long': cmd, 'short': short, 'doc': desc, 'optType': 'command', 'default': None }) chunks = docMakeChunks(cmdDicts, width) commands = 'Commands:\n' + ''.join(chunks) else: commands = '' longToShort = {} for key, value in self.synonyms.items(): longname = value if (key != longname) and (len(key) == 1): longToShort[longname] = key else: if longname not in longToShort: longToShort[longname] = None else: pass optDicts = [] for opt in self.longOpt: if opt[-1] == '=': optType = 'parameter' opt = opt[:-1] else: optType = 'flag' optDicts.append({ 'long': opt, 'short': longToShort[opt], 'doc': self.docs[opt], 'optType': optType, 'default': self.defaults.get(opt, None), 'dispatch': self._dispatch.get(opt, None) }) if not (getattr(self, "longdesc", None) is None): longdesc = self.longdesc else: import __main__ if getattr(__main__, '__doc__', None): longdesc = __main__.__doc__ else: longdesc = '' if longdesc: longdesc = ('\n' + '\n'.join(text.wordWrap(longdesc, width)).strip() + '\n') if optDicts: chunks = docMakeChunks(optDicts, width) s = "Options:\n%s" % (''.join(chunks)) else: s = "Options: None\n" return s + longdesc + commands
print(e) print("") try: ImportOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = '\n'.join( wordWrap( """ Usage: calendarserver_import [options] [input specifiers]\n """ + __doc__, int(os.environ.get('COLUMNS', '80')) ) ) class ImportException(Exception): """ An error occurred during import """ class ImportOptions(Options): """
print(e) print("") try: ValidOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = '\n'.join( wordWrap( """ Usage: validcalendardata [options] [input specifiers]\n """, int(os.environ.get('COLUMNS', '80')) ) ) class ValidOptions(Options): """ Command-line options for 'validcalendardata' """ synopsis = description optFlags = [ ['verbose', 'v', "Verbose logging."], ['debug', 'D', "Debug logging."], ['parse-only', 'p', "Only validate parsing of the data."],
print(e) print("") try: MigrateVerifyOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = ''.join( wordWrap( """ Usage: calendarserver_migrate_verify [options] [input specifiers] """, int(os.environ.get('COLUMNS', '80')) ) ) description += "\nVersion: %s" % (VERSION,) class ConfigError(Exception): pass class MigrateVerifyOptions(Options): """ Command-line options for 'calendarserver_migrate_verify'
print(e) print("") try: DBInspectOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = '\n'.join( wordWrap( """ Usage: calendarserver_dbinspect [options] [input specifiers]\n """, int(os.environ.get('COLUMNS', '80')) ) ) class DBInspectOptions(Options): """ Command-line options for 'calendarserver_dbinspect' """ synopsis = description optFlags = [ ['verbose', 'v', "Verbose logging."], ['debug', 'D', "Debug logging."], ['purging', 'p', "Enable Purge command."],
def docMakeChunks(optList, width=80): """ Makes doc chunks for option declarations. Takes a list of dictionaries, each of which may have one or more of the keys 'long', 'short', 'doc', 'default', 'optType'. Returns a list of strings. The strings may be multiple lines, all of them end with a newline. """ # XXX: sanity check to make sure we have a sane combination of keys. maxOptLen = 0 for opt in optList: optLen = len(opt.get('long', '')) if optLen: if opt.get('optType', None) == "parameter": # these take up an extra character optLen = optLen + 1 maxOptLen = max(optLen, maxOptLen) colWidth1 = maxOptLen + len(" -s, -- ") colWidth2 = width - colWidth1 # XXX - impose some sane minimum limit. # Then if we don't have enough room for the option and the doc # to share one line, they can take turns on alternating lines. colFiller1 = " " * colWidth1 optChunks = [] seen = {} for opt in optList: if opt.get('short', None) in seen or opt.get('long', None) in seen: continue for x in opt.get('short', None), opt.get('long', None): if x is not None: seen[x] = 1 optLines = [] comma = " " if opt.get('short', None): short = "-%c" % (opt['short'], ) else: short = '' if opt.get('long', None): long = opt['long'] if opt.get("optType", None) == "parameter": long = long + '=' long = "%-*s" % (maxOptLen, long) if short: comma = "," else: long = " " * (maxOptLen + len('--')) if opt.get('optType', None) == 'command': column1 = ' %s ' % long else: column1 = " %2s%c --%s " % (short, comma, long) if opt.get('doc', ''): doc = opt['doc'].strip() else: doc = '' if (opt.get("optType", None) == "parameter") \ and not (opt.get('default', None) is None): doc = "%s [default: %s]" % (doc, opt['default']) if (opt.get("optType", None) == "parameter") \ and opt.get('dispatch', None) is not None: d = opt['dispatch'] if isinstance(d, CoerceParameter) and d.doc: doc = "%s. %s" % (doc, d.doc) if doc: column2_l = text.wordWrap(doc, colWidth2) else: column2_l = [''] optLines.append("%s%s\n" % (column1, column2_l.pop(0))) for line in column2_l: optLines.append("%s%s\n" % (colFiller1, line)) optChunks.append(''.join(optLines)) return optChunks
if e: print(e) print("") try: ObliterateOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = ''.join( wordWrap( """ Usage: calendarserver_obliterate [options] [input specifiers] """, int(os.environ.get('COLUMNS', '80')))) description += "\nVersion: %s" % (VERSION, ) class ConfigError(Exception): pass class ObliterateOptions(Options): """ Command-line options for 'calendarserver_obliterate' """ synopsis = description
if e: print(e) print("") try: DBInspectOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = '\n'.join( wordWrap( """ Usage: calendarserver_dbinspect [options] [input specifiers]\n """, int(os.environ.get('COLUMNS', '80')))) class DBInspectOptions(Options): """ Command-line options for 'calendarserver_dbinspect' """ synopsis = description optFlags = [ ['verbose', 'v', "Verbose logging."], ['debug', 'D', "Debug logging."], ['purging', 'p', "Enable Purge command."], ]
def docMakeChunks(optList, width=80): """ Makes doc chunks for option declarations. Takes a list of dictionaries, each of which may have one or more of the keys 'long', 'short', 'doc', 'default', 'optType'. Returns a list of strings. The strings may be multiple lines, all of them end with a newline. """ # XXX: sanity check to make sure we have a sane combination of keys. maxOptLen = 0 for opt in optList: optLen = len(opt.get('long', '')) if optLen: if opt.get('optType', None) == "parameter": # these take up an extra character optLen = optLen + 1 maxOptLen = max(optLen, maxOptLen) colWidth1 = maxOptLen + len(" -s, -- ") colWidth2 = width - colWidth1 # XXX - impose some sane minimum limit. # Then if we don't have enough room for the option and the doc # to share one line, they can take turns on alternating lines. colFiller1 = " " * colWidth1 optChunks = [] seen = {} for opt in optList: if opt.get('short', None) in seen or opt.get('long', None) in seen: continue for x in opt.get('short', None), opt.get('long', None): if x is not None: seen[x] = 1 optLines = [] comma = " " if opt.get('short', None): short = "-%c" % (opt['short'],) else: short = '' if opt.get('long', None): long = opt['long'] if opt.get("optType", None) == "parameter": long = long + '=' long = "%-*s" % (maxOptLen, long) if short: comma = "," else: long = " " * (maxOptLen + len('--')) if opt.get('optType', None) == 'command': column1 = ' %s ' % long else: column1 = " %2s%c --%s " % (short, comma, long) if opt.get('doc', ''): doc = opt['doc'].strip() else: doc = '' if (opt.get("optType", None) == "parameter") \ and not (opt.get('default', None) is None): doc = "%s [default: %s]" % (doc, opt['default']) if (opt.get("optType", None) == "parameter") \ and opt.get('dispatch', None) is not None: d = opt['dispatch'] if isinstance(d, CoerceParameter) and d.doc: doc = "%s. %s" % (doc, d.doc) if doc: column2_l = text.wordWrap(doc, colWidth2) else: column2_l = [''] optLines.append("%s%s\n" % (column1, column2_l.pop(0))) for line in column2_l: optLines.append("%s%s\n" % (colFiller1, line)) optChunks.append(''.join(optLines)) return optChunks
print("") try: ExportOptions().opt_help() except SystemExit: pass if e: sys.exit(64) else: sys.exit(0) description = "\n".join( wordWrap( """ Usage: calendarserver_export [options] [input specifiers]\n """ + __doc__, int(os.environ.get("COLUMNS", "80")), ) ) class ExportOptions(Options): """ Command-line options for 'calendarserver_export' @ivar exporters: a list of L{DirectoryExporter} objects which can identify the calendars to export, given a directory service. This list is built by parsing --record and --collection options. """