Fixes #11226 - Change the way we invalidate the module cache to support reloading code from subpackages #11763
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes: #11226
This PR intends to fix cases where script and utility code loaded from subpackages wasn't getting reloaded after changes were made.
The way this is done, is by taking the base module path (the string before the first dot), so if a script module import path is
my_submodule.my_script_file.MyScriptClasswe would delete any module from sys.modules where the basemy_submodulematches.Furthermore we remove any module from sys.modules where the base path equals
scripts. This was added, because utility functions imported via. the normal import statement, would be imported like:from scripts.util.util_file import util_functionWhich would be present in sys.modules as:
scripts.util.util_fileRemoving all modules from the cache which starts with
scriptssolves this issue, and from my testing causes no other issues. I tested this as well as I could, with the main focus being the default value forSCRIPT_ROOT. Subpackage importing when using a non-defaultSCRIPT_ROOTis still not great, but outside the scope of this PR.In short you can now modify the following without reloading netbox or the rqworker: