summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2020-12-13 16:56:04 +0000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-12-14 18:08:37 +0100
commitcf2ca22a5797cdd53a10954e9811893325b24a30 (patch)
tree83c66866a5a0c573c98de31fda59fb93dd4f5765
parentef39a8829b6a81116876fe97cff8de6b8ec15f49 (diff)
Ensured that registered checks accept keyword arguments.
-rw-r--r--django/core/checks/registry.py7
-rw-r--r--tests/check_framework/tests.py8
2 files changed, 14 insertions, 1 deletions
diff --git a/django/core/checks/registry.py b/django/core/checks/registry.py
index 699bf9ff30..46a04d78ff 100644
--- a/django/core/checks/registry.py
+++ b/django/core/checks/registry.py
@@ -1,5 +1,6 @@
from itertools import chain
+from django.utils.inspect import func_accepts_kwargs
from django.utils.itercompat import is_iterable
@@ -38,13 +39,17 @@ class CheckRegistry:
registry = CheckRegistry()
@registry.register('mytag', 'anothertag')
- def my_check(apps, **kwargs):
+ def my_check(app_configs, **kwargs):
# ... perform checks and collect `errors` ...
return errors
# or
registry.register(my_check, 'mytag', 'anothertag')
"""
def inner(check):
+ if not func_accepts_kwargs(check):
+ raise TypeError(
+ 'Check functions must accept keyword arguments (**kwargs).'
+ )
check.tags = tags
checks = self.deployment_checks if kwargs.get('deploy') else self.registered_checks
checks.add(check)
diff --git a/tests/check_framework/tests.py b/tests/check_framework/tests.py
index cc1718fac8..e669b11c2b 100644
--- a/tests/check_framework/tests.py
+++ b/tests/check_framework/tests.py
@@ -66,6 +66,14 @@ class SystemCheckFrameworkTests(SimpleTestCase):
self.assertEqual(errors, errors2)
self.assertEqual(sorted(errors), [4, 5])
+ def test_register_no_kwargs_error(self):
+ registry = CheckRegistry()
+ msg = 'Check functions must accept keyword arguments (**kwargs).'
+ with self.assertRaisesMessage(TypeError, msg):
+ @registry.register
+ def no_kwargs(app_configs, databases):
+ pass
+
class MessageTests(SimpleTestCase):