Commit 395d75ea authored by Tim Graham's avatar Tim Graham
Browse files

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

Thanks Elvard for the patch.
parent b513fa5f
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -64,8 +64,10 @@ class CheckRegistry(object):
        return errors

    def tag_exists(self, tag):
        tags = chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')])
        return tag in tags
        return tag in self.tags_available()

    def tags_available(self):
        return set(chain(*[check.tags for check in self.registered_checks if hasattr(check, 'tags')]))


registry = CheckRegistry()
+7 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ from optparse import make_option

from django.apps import apps
from django.core import checks
from django.core.checks.registry import registry
from django.core.management.base import BaseCommand, CommandError


@@ -16,9 +17,15 @@ class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--tag', '-t', action='append', dest='tags',
            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):
        if options.get('list_tags'):
            self.stdout.write('\n'.join(sorted(registry.tags_available())))
            return

        if app_labels:
            app_configs = [apps.get_app_config(app_label) for app_label in app_labels]
        else:
+4 −0
Original line number Diff line number Diff line
@@ -126,6 +126,10 @@ to perform only security and compatibility checks, you would run::

    python manage.py check --tag security --tag compatibility

.. django-admin-option:: --list-tags

List all available tags.

compilemessages
---------------

+10 −0
Original line number Diff line number Diff line
@@ -194,6 +194,16 @@ class CheckCommandTests(TestCase):
    def test_invalid_tag(self):
        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):
    return [