diff --git a/plinth/module_loader.py b/plinth/module_loader.py index dd4edaff4..a8c0621db 100644 --- a/plinth/module_loader.py +++ b/plinth/module_loader.py @@ -28,6 +28,11 @@ def include_urls(): _include_module_urls(module_import_path, module_name) +def _is_module_essential(module): + """Return if a module is an essential module.""" + return getattr(module, 'is_essential', False) + + def load_modules(): """ Read names of enabled modules in modules/enabled directory and @@ -47,7 +52,10 @@ def load_modules(): ordered_modules = [] remaining_modules = dict(modules) # Make a copy - for module_name in modules: + # Place all essential modules ahead of others in module load order + sorted_modules = sorted( + modules, key=lambda module: not _is_module_essential(modules[module])) + for module_name in sorted_modules: if module_name not in remaining_modules: continue