Fixed #29152 -- Allowed passing kwargs to ArgumentParser initialization in management commands.

This commit is contained in:
humbertotm 2018-06-11 10:20:50 -07:00 committed by Tim Graham
parent 11bfe3a83d
commit e95008f241
3 changed files with 21 additions and 1 deletions

View File

@ -244,7 +244,7 @@ class BaseCommand:
""" """
return django.get_version() return django.get_version()
def create_parser(self, prog_name, subcommand): def create_parser(self, prog_name, subcommand, **kwargs):
""" """
Create and return the ``ArgumentParser`` which will be used to Create and return the ``ArgumentParser`` which will be used to
parse the arguments to this command. parse the arguments to this command.
@ -255,6 +255,7 @@ class BaseCommand:
formatter_class=DjangoHelpFormatter, formatter_class=DjangoHelpFormatter,
missing_args_message=getattr(self, 'missing_args_message', None), missing_args_message=getattr(self, 'missing_args_message', None),
called_from_command_line=getattr(self, '_called_from_command_line', None), called_from_command_line=getattr(self, '_called_from_command_line', None),
**kwargs
) )
parser.add_argument('--version', action='version', version=self.get_version()) parser.add_argument('--version', action='version', version=self.get_version())
parser.add_argument( parser.add_argument(

View File

@ -255,6 +255,19 @@ the :meth:`~BaseCommand.handle` method must be implemented.
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
# ... # ...
.. method:: BaseCommand.create_parser(prog_name, subcommand, **kwargs)
Returns a ``CommandParser`` instance, which is an
:class:`~argparse.ArgumentParser` subclass with a few customizations for
Django.
You can customize the instance by overriding this method and calling
``super()`` with ``kwargs`` of :class:`~argparse.ArgumentParser` parameters.
.. versionchanged:: 2.2
``kwargs`` was added.
.. method:: BaseCommand.add_arguments(parser) .. method:: BaseCommand.add_arguments(parser)
Entry point to add parser arguments to handle command line arguments passed Entry point to add parser arguments to handle command line arguments passed

View File

@ -220,6 +220,12 @@ class CommandTests(SimpleTestCase):
with self.assertRaisesMessage(CommandError, msg): with self.assertRaisesMessage(CommandError, msg):
management.call_command('subparser', 'test', 12) management.call_command('subparser', 'test', 12)
def test_create_parser_kwargs(self):
"""BaseCommand.create_parser() passes kwargs to CommandParser."""
epilog = 'some epilog text'
parser = BaseCommand().create_parser('prog_name', 'subcommand', epilog=epilog)
self.assertEqual(parser.epilog, epilog)
class CommandRunTests(AdminScriptTestCase): class CommandRunTests(AdminScriptTestCase):
""" """