diff options
| author | Adam Johnson <me@adamj.eu> | 2020-12-13 16:56:04 +0000 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-12-14 18:08:37 +0100 |
| commit | cf2ca22a5797cdd53a10954e9811893325b24a30 (patch) | |
| tree | 83c66866a5a0c573c98de31fda59fb93dd4f5765 | |
| parent | ef39a8829b6a81116876fe97cff8de6b8ec15f49 (diff) | |
Ensured that registered checks accept keyword arguments.
| -rw-r--r-- | django/core/checks/registry.py | 7 | ||||
| -rw-r--r-- | tests/check_framework/tests.py | 8 |
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): |
