diff --git a/aleksis/core/checks.py b/aleksis/core/checks.py new file mode 100644 index 0000000000000000000000000000000000000000..eefc7e5ab7e12e7ac67ac11871912b049056adb8 --- /dev/null +++ b/aleksis/core/checks.py @@ -0,0 +1,29 @@ +from typing import Optional + +import django.apps +from django.core.checks import Tags, Warning, register + +from .util.apps import AppConfig + + +@register(Tags.compatibility) +def check_app_configs_base_class(app_configs: Optional[django.apps] = None, **kwargs) -> None: + """ Checks whether all apps derive from AlekSIS's base app config """ + + results = [] + + if app_configs is None: + app_configs = django.apps.get_app_configs() + + for app_config in app_configs: + if app_config.name.startswith("aleksis.apps.") and not isinstance(app_config, AppConfig): + results.append( + Warning( + "App config %s does not derive from aleksis.core.util.apps.AppConfig.", + hint="Ensure the app uses the correct base class for all registry functionality to work.", + obj=app_config, + id="aleksis.core.W001", + ) + ) + + return results