2014-01-20 10:45:21 +08:00
|
|
|
from django.apps import apps
|
|
|
|
from django.core import checks
|
2014-04-10 21:43:55 +08:00
|
|
|
from django.core.checks.registry import registry
|
2014-01-20 10:45:21 +08:00
|
|
|
from django.core.management.base import BaseCommand, CommandError
|
2013-06-14 09:39:02 +08:00
|
|
|
|
|
|
|
|
2014-01-20 10:45:21 +08:00
|
|
|
class Command(BaseCommand):
|
|
|
|
help = "Checks the entire Django project for potential problems."
|
|
|
|
|
2020-05-14 06:00:41 +08:00
|
|
|
requires_system_checks = []
|
2014-01-20 10:45:21 +08:00
|
|
|
|
2014-06-07 04:39:33 +08:00
|
|
|
def add_arguments(self, parser):
|
|
|
|
parser.add_argument('args', metavar='app_label', nargs='*')
|
2016-03-29 06:33:29 +08:00
|
|
|
parser.add_argument(
|
|
|
|
'--tag', '-t', action='append', dest='tags',
|
|
|
|
help='Run only checks labeled with given tag.',
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
2018-07-03 05:54:57 +08:00
|
|
|
'--list-tags', action='store_true',
|
2016-03-29 06:33:29 +08:00
|
|
|
help='List available tags.',
|
|
|
|
)
|
|
|
|
parser.add_argument(
|
2018-07-03 05:54:57 +08:00
|
|
|
'--deploy', action='store_true',
|
2016-03-29 06:33:29 +08:00
|
|
|
help='Check deployment settings.',
|
|
|
|
)
|
2015-10-05 02:16:12 +08:00
|
|
|
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.'
|
|
|
|
),
|
|
|
|
)
|
2020-02-07 15:46:13 +08:00
|
|
|
parser.add_argument(
|
|
|
|
'--database', action='append', dest='databases',
|
|
|
|
help='Run database related checks against these aliases.',
|
|
|
|
)
|
2014-01-20 10:45:21 +08:00
|
|
|
|
|
|
|
def handle(self, *app_labels, **options):
|
2014-09-13 02:50:36 +08:00
|
|
|
include_deployment_checks = options['deploy']
|
2016-03-03 10:01:36 +08:00
|
|
|
if options['list_tags']:
|
2014-09-13 02:50:36 +08:00
|
|
|
self.stdout.write('\n'.join(sorted(registry.tags_available(include_deployment_checks))))
|
2014-04-10 21:43:55 +08:00
|
|
|
return
|
|
|
|
|
2014-01-20 10:45:21 +08:00
|
|
|
if app_labels:
|
|
|
|
app_configs = [apps.get_app_config(app_label) for app_label in app_labels]
|
|
|
|
else:
|
|
|
|
app_configs = None
|
|
|
|
|
2016-03-03 10:01:36 +08:00
|
|
|
tags = options['tags']
|
2014-09-13 02:50:36 +08:00
|
|
|
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,
|
2015-10-05 02:16:12 +08:00
|
|
|
fail_level=getattr(checks, options['fail_level']),
|
2020-02-07 15:46:13 +08:00
|
|
|
databases=options['databases'],
|
2014-09-13 02:50:36 +08:00
|
|
|
)
|