summaryrefslogtreecommitdiff
path: root/src/mailman/commands/cli_qfile.py
diff options
context:
space:
mode:
authorBarry Warsaw2017-07-22 03:02:05 +0000
committerBarry Warsaw2017-07-22 03:02:05 +0000
commitf00b94f18e1d82d1488cbcee6053f03423bc2f49 (patch)
tree1a8e56dff0eab71e58e5fc9ecc5f3c614d7edca7 /src/mailman/commands/cli_qfile.py
parentf54c045519300f6f70947d1114f46c2b8ae0d368 (diff)
downloadmailman-f00b94f18e1d82d1488cbcee6053f03423bc2f49.tar.gz
mailman-f00b94f18e1d82d1488cbcee6053f03423bc2f49.tar.zst
mailman-f00b94f18e1d82d1488cbcee6053f03423bc2f49.zip
Diffstat (limited to 'src/mailman/commands/cli_qfile.py')
-rw-r--r--src/mailman/commands/cli_qfile.py100
1 files changed, 50 insertions, 50 deletions
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 <file>'. 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 <file>'. 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