From 737a969d95d32e65bcfa25b119f3d356c5bea8f7 Mon Sep 17 00:00:00 2001 From: xuhaidong Date: Thu, 6 Jun 2024 17:54:47 +0800 Subject: [PATCH] feat: guarantee extension order --- sea/app.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/sea/app.py b/sea/app.py index c7231e2..01f19be 100644 --- a/sea/app.py +++ b/sea/app.py @@ -137,7 +137,19 @@ def load_extensions_in_module(self, module): def is_ext(ins): return not inspect.isclass(ins) and hasattr(ins, "init_app") - for n, ext in inspect.getmembers(module, is_ext): + # guarantee the order of extension initialization by load_order attribute + def sort_ext(member): + _, ext = member + ORDER_ATTR = "load_order" + DEFAULT_LOWER_ORDER = 10 + + if hasattr(ext, ORDER_ATTR): + return getattr(ext, ORDER_ATTR) + return DEFAULT_LOWER_ORDER + + for n, ext in sorted( + inspect.getmembers(module, is_ext), key=sort_ext + ): self._register_extension(n, ext) return self.extensions