clear cached modules
This commit is contained in:
+9
-4
@@ -441,10 +441,15 @@ def register_ext_tasks(ext: Extension) -> None:
|
|||||||
def register_ext_routes(app: FastAPI, ext: Extension) -> None:
|
def register_ext_routes(app: FastAPI, ext: Extension) -> None:
|
||||||
"""Register FastAPI routes for extension."""
|
"""Register FastAPI routes for extension."""
|
||||||
module_name = ext.module_name
|
module_name = ext.module_name
|
||||||
if module_name in sys.modules:
|
# Clear all cached sub-modules so a fresh import picks up new files from ext_dir.
|
||||||
ext_module = importlib.reload(sys.modules[module_name])
|
# A simple reload() would reuse cached sub-modules (e.g. views_api) and serve
|
||||||
else:
|
# stale code even after the extension files have been replaced on disk.
|
||||||
ext_module = importlib.import_module(module_name)
|
stale = [
|
||||||
|
k for k in sys.modules if k == module_name or k.startswith(f"{module_name}.")
|
||||||
|
]
|
||||||
|
for k in stale:
|
||||||
|
del sys.modules[k]
|
||||||
|
ext_module = importlib.import_module(module_name)
|
||||||
|
|
||||||
ext_route = getattr(ext_module, f"{ext.code}_ext")
|
ext_route = getattr(ext_module, f"{ext.code}_ext")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user