[1.7.x] Fixed #22194 -- Added --list-tags option to check command.

Thanks Elvard for the patch.

Backport of 395d75ea6b from master
This commit is contained in:
Tim Graham 2014-04-10 09:43:55 -04:00
parent 32e6237450
commit ddd25b280f
4 changed files with 25 additions and 2 deletions

View File

@ -64,8 +64,10 @@ class CheckRegistry(object):
return errors return errors
def tag_exists(self, tag): def tag_exists(self, tag):
tags = chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')]) return tag in self.tags_available()
return tag in tags
def tags_available(self):
return set(chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')]))
registry = CheckRegistry() registry = CheckRegistry()

View File

@ -5,6 +5,7 @@ from optparse import make_option
from django.apps import apps from django.apps import apps
from django.core import checks from django.core import checks
from django.core.checks.registry import registry
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
@ -16,9 +17,15 @@ class Command(BaseCommand):
option_list = BaseCommand.option_list + ( option_list = BaseCommand.option_list + (
make_option('--tag', '-t', action='append', dest='tags', make_option('--tag', '-t', action='append', dest='tags',
help='Run only checks labeled with given tag.'), help='Run only checks labeled with given tag.'),
make_option('--list-tags', action='store_true', dest='list_tags',
help='List available tags.'),
) )
def handle(self, *app_labels, **options): def handle(self, *app_labels, **options):
if options.get('list_tags'):
self.stdout.write('\n'.join(sorted(registry.tags_available())))
return
if app_labels: if app_labels:
app_configs = [apps.get_app_config(app_label) for app_label in app_labels] app_configs = [apps.get_app_config(app_label) for app_label in app_labels]
else: else:

View File

@ -126,6 +126,10 @@ to perform only security and compatibility checks, you would run::
python manage.py check --tag security --tag compatibility python manage.py check --tag security --tag compatibility
.. django-admin-option:: --list-tags
List all available tags.
compilemessages compilemessages
--------------- ---------------

View File

@ -194,6 +194,16 @@ class CheckCommandTests(TestCase):
def test_invalid_tag(self): def test_invalid_tag(self):
self.assertRaises(CommandError, call_command, 'check', tags=['missingtag']) self.assertRaises(CommandError, call_command, 'check', tags=['missingtag'])
@override_system_checks([simple_system_check])
def test_list_tags_empty(self):
call_command('check', list_tags=True)
self.assertEqual('\n', sys.stdout.getvalue())
@override_system_checks([tagged_system_check])
def test_list_tags(self):
call_command('check', list_tags=True)
self.assertEqual('simpletag\n', sys.stdout.getvalue())
def custom_error_system_check(app_configs, **kwargs): def custom_error_system_check(app_configs, **kwargs):
return [ return [