summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2014-04-10 09:43:55 -0400
committerTim Graham <timograham@gmail.com>2014-04-10 09:43:55 -0400
commit395d75ea6bd1ee5259fd5a3b3ac1b028739a22d2 (patch)
tree61737bd9f7f4d6fddc55340aa8aaded2de544322
parentb513fa5fc6f10a6e224d602bfac8f850040cef7c (diff)
Fixed #22194 -- Added --list-tags option to check command.
Thanks Elvard for the patch.
-rw-r--r--django/core/checks/registry.py6
-rw-r--r--django/core/management/commands/check.py7
-rw-r--r--docs/ref/django-admin.txt4
-rw-r--r--tests/check_framework/tests.py10
4 files changed, 25 insertions, 2 deletions
diff --git a/django/core/checks/registry.py b/django/core/checks/registry.py
index e88e0b8c37..8217d534c6 100644
--- a/django/core/checks/registry.py
+++ b/django/core/checks/registry.py
@@ -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()
diff --git a/django/core/management/commands/check.py b/django/core/management/commands/check.py
index b6d2571ab0..3532ab4fa9 100644
--- a/django/core/management/commands/check.py
+++ b/django/core/management/commands/check.py
@@ -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:
diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt
index 1accc95278..7a4a5211e6 100644
--- a/docs/ref/django-admin.txt
+++ b/docs/ref/django-admin.txt
@@ -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
---------------
diff --git a/tests/check_framework/tests.py b/tests/check_framework/tests.py
index c770ee517b..af407f5c7e 100644
--- a/tests/check_framework/tests.py
+++ b/tests/check_framework/tests.py
@@ -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 [