From f00b94f18e1d82d1488cbcee6053f03423bc2f49 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Sat, 22 Jul 2017 03:02:05 +0000 Subject: Convert to click for CLI options --- src/mailman/commands/cli_qfile.py | 100 +++++++++++++++++++------------------- 1 file changed, 50 insertions(+), 50 deletions(-) (limited to 'src/mailman/commands/cli_qfile.py') diff --git a/src/mailman/commands/cli_qfile.py b/src/mailman/commands/cli_qfile.py index b6702643c..f7fc0b338 100644 --- a/src/mailman/commands/cli_qfile.py +++ b/src/mailman/commands/cli_qfile.py @@ -17,70 +17,70 @@ """Getting information out of a qfile.""" +import click import pickle from mailman.core.i18n import _ from mailman.interfaces.command import ICLISubCommand from mailman.utilities.interact import interact +from mailman.utilities.options import I18nCommand from pprint import PrettyPrinter from public import public from zope.interface import implementer # This is deliberately called 'm' for use with --interactive. -m = [] +m = None + + +@click.command( + cls=I18nCommand, + help=_('Get information out of a queue file.')) +@click.option( + '--print/--no-print', '-p/-n', 'doprint', + default=True, + help=_("""\ + Don't attempt to pretty print the object. This is useful if there is some + problem with the object and you just want to get an unpickled + representation. Useful with 'bin/dumpdb -i '. In that case, the + list of unpickled objects will be left in a variable called 'm'.""")) +@click.option( + '--interactive', '-i', + is_flag=True, default=False, + help=_("""\ + Start an interactive Python session, with a variable called 'm' + containing the list of unpickled objects.""")) +@click.argument('qfile') +def qfile(doprint, interactive, qfile): + global m + # Reinitialize 'm' every time this command is run. This isn't normally + # needed for command line use, but is important for the test suite. + m = [] + printer = PrettyPrinter(indent=4) + with open(qfile, 'rb') as fp: + while True: + try: + m.append(pickle.load(fp)) + except EOFError: + break + if doprint: + print(_('[----- start pickle -----]')) + for i, obj in enumerate(m): + count = i + 1 + print(_('<----- start object $count ----->')) + if isinstance(obj, (bytes, str)): + print(obj) + else: + printer.pprint(obj) + print(_('[----- end pickle -----]')) + count = len(m) # noqa: F841 + banner = _("Number of objects found (see the variable 'm'): $count") + if interactive: + interact(banner=banner) @public @implementer(ICLISubCommand) class QFile: - """Get information out of a queue file.""" - name = 'qfile' - - def add(self, parser, command_parser): - """See `ICLISubCommand`.""" - self.parser = parser - command_parser.add_argument( - '-n', '--noprint', - dest='doprint', default=True, action='store_false', - help=_("""\ - Don't attempt to pretty print the object. This is useful if there - is some problem with the object and you just want to get an - unpickled representation. Useful with 'bin/dumpdb -i '. In - that case, the list of unpickled objects will be left in a - variable called 'm'.""")) - command_parser.add_argument( - '-i', '--interactive', - default=False, action='store_true', - help=_("""\ - Start an interactive Python session, with a variable called 'm' - containing the list of unpickled objects.""")) - command_parser.add_argument( - 'qfile', metavar='FILENAME', nargs=1, - help=_('The queue file to dump.')) - - def process(self, args): - """See `ICLISubCommand`.""" - printer = PrettyPrinter(indent=4) - assert len(args.qfile) == 1, 'Wrong number of positional arguments' - with open(args.qfile[0], 'rb') as fp: - while True: - try: - m.append(pickle.load(fp)) - except EOFError: - break - if args.doprint: - print(_('[----- start pickle -----]')) - for i, obj in enumerate(m): - count = i + 1 - print(_('<----- start object $count ----->')) - if isinstance(obj, (bytes, str)): - print(obj) - else: - printer.pprint(obj) - print(_('[----- end pickle -----]')) - count = len(m) # noqa: F841 - banner = _("The variable 'm' contains $count objects") - if args.interactive: - interact(banner=banner) + command = qfile -- cgit v1.2.3-70-g09d2