Kaydet (Commit) 395d75ea authored tarafından Tim Graham's avatar Tim Graham

Fixed #22194 -- Added --list-tags option to check command.

Thanks Elvard for the patch.
üst b513fa5f
...@@ -64,8 +64,10 @@ class CheckRegistry(object): ...@@ -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()
......
...@@ -5,6 +5,7 @@ from optparse import make_option ...@@ -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): ...@@ -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:
......
...@@ -126,6 +126,10 @@ to perform only security and compatibility checks, you would run:: ...@@ -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
--------------- ---------------
......
...@@ -194,6 +194,16 @@ class CheckCommandTests(TestCase): ...@@ -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 [
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment