12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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
- class Command(BaseCommand):
- help = "Checks the entire Django project for potential problems."
- requires_system_checks = []
- def add_arguments(self, parser):
- parser.add_argument('args', metavar='app_label', nargs='*')
- parser.add_argument(
- '--tag', '-t', action='append', dest='tags',
- help='Run only checks labeled with given tag.',
- )
- parser.add_argument(
- '--list-tags', action='store_true',
- help='List available tags.',
- )
- parser.add_argument(
- '--deploy', action='store_true',
- help='Check deployment settings.',
- )
- parser.add_argument(
- '--fail-level',
- default='ERROR',
- choices=['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'],
- help=(
- 'Message level that will cause the command to exit with a '
- 'non-zero status. Default is ERROR.'
- ),
- )
- parser.add_argument(
- '--database', action='append', dest='databases',
- help='Run database related checks against these aliases.',
- )
- def handle(self, *app_labels, **options):
- include_deployment_checks = options['deploy']
- if options['list_tags']:
- self.stdout.write('\n'.join(sorted(registry.tags_available(include_deployment_checks))))
- return
- if app_labels:
- app_configs = [apps.get_app_config(app_label) for app_label in app_labels]
- else:
- app_configs = None
- tags = options['tags']
- if tags:
- try:
- invalid_tag = next(
- tag for tag in tags if not checks.tag_exists(tag, include_deployment_checks)
- )
- except StopIteration:
- # no invalid tags
- pass
- else:
- raise CommandError('There is no system check with the "%s" tag.' % invalid_tag)
- self.check(
- app_configs=app_configs,
- tags=tags,
- display_num_errors=True,
- include_deployment_checks=include_deployment_checks,
- fail_level=getattr(checks, options['fail_level']),
- databases=options['databases'],
- )
|