mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
move app mixin deactivation
This commit is contained in:
parent
ea1a5a2a29
commit
d4a8b7d021
@ -62,8 +62,13 @@ class AppMixin:
|
|||||||
registry._update_urls()
|
registry._update_urls()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _deactivate_mixin(cls, registry):
|
def _deactivate_mixin(cls, registry, force_reload: bool = False):
|
||||||
"""Deactivate AppMixin plugins - some magic required."""
|
"""Deactivate AppMixin plugins - some magic required.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
registry (PluginRegistry): The registry that should be used
|
||||||
|
force_reload (bool, optional): Also reload base apps. Defaults to False.
|
||||||
|
"""
|
||||||
# unregister models from admin
|
# unregister models from admin
|
||||||
for plugin_path in registry.installed_apps:
|
for plugin_path in registry.installed_apps:
|
||||||
models = [] # the modelrefs need to be collected as poping an item in a iter is not welcomed
|
models = [] # the modelrefs need to be collected as poping an item in a iter is not welcomed
|
||||||
@ -100,7 +105,7 @@ class AppMixin:
|
|||||||
|
|
||||||
# reset load flag and reload apps
|
# reset load flag and reload apps
|
||||||
settings.INTEGRATION_APPS_LOADED = False
|
settings.INTEGRATION_APPS_LOADED = False
|
||||||
cls._reload_apps()
|
cls._reload_apps(force_reload=force_reload)
|
||||||
|
|
||||||
# update urls to remove the apps from the site admin
|
# update urls to remove the apps from the site admin
|
||||||
registry._update_urls()
|
registry._update_urls()
|
||||||
|
@ -36,7 +36,7 @@ class SettingsMixin:
|
|||||||
registry.mixins_settings[slug] = plugin_setting
|
registry.mixins_settings[slug] = plugin_setting
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _deactivate_mixin(cls, registry):
|
def _deactivate_mixin(cls, registry, **kwargs):
|
||||||
"""Deactivate all plugin settings."""
|
"""Deactivate all plugin settings."""
|
||||||
logger.info('Deactivating plugin settings')
|
logger.info('Deactivating plugin settings')
|
||||||
# clear settings cache
|
# clear settings cache
|
||||||
|
@ -492,11 +492,9 @@ class PluginsRegistry:
|
|||||||
"""
|
"""
|
||||||
for mixin in self.mixin_order:
|
for mixin in self.mixin_order:
|
||||||
if hasattr(mixin, '_deactivate_mixin'):
|
if hasattr(mixin, '_deactivate_mixin'):
|
||||||
mixin._deactivate_mixin(self)
|
mixin._deactivate_mixin(self, force_reload=force_reload)
|
||||||
|
|
||||||
logger.info('Done deactivating')
|
logger.info('Done deactivating')
|
||||||
|
|
||||||
# self.deactivate_plugin_app(force_reload=force_reload)
|
|
||||||
# endregion
|
# endregion
|
||||||
|
|
||||||
# region mixin specific loading ...
|
# region mixin specific loading ...
|
||||||
@ -531,53 +529,6 @@ class PluginsRegistry:
|
|||||||
self._try_reload(apps.set_installed_apps, settings.INSTALLED_APPS)
|
self._try_reload(apps.set_installed_apps, settings.INSTALLED_APPS)
|
||||||
self.is_loading = False
|
self.is_loading = False
|
||||||
|
|
||||||
def deactivate_plugin_app(self, force_reload: bool = False):
|
|
||||||
"""Deactivate AppMixin plugins - some magic required.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
force_reload (bool, optional): Also reload base apps. Defaults to False.
|
|
||||||
"""
|
|
||||||
# unregister models from admin
|
|
||||||
for plugin_path in self.installed_apps:
|
|
||||||
models = [] # the modelrefs need to be collected as poping an item in a iter is not welcomed
|
|
||||||
app_name = plugin_path.split('.')[-1]
|
|
||||||
try:
|
|
||||||
app_config = apps.get_app_config(app_name)
|
|
||||||
|
|
||||||
# check all models
|
|
||||||
for model in app_config.get_models():
|
|
||||||
# remove model from admin site
|
|
||||||
try:
|
|
||||||
admin.site.unregister(model)
|
|
||||||
except Exception: # pragma: no cover
|
|
||||||
pass
|
|
||||||
models += [model._meta.model_name]
|
|
||||||
except LookupError: # pragma: no cover
|
|
||||||
# if an error occurs the app was never loaded right -> so nothing to do anymore
|
|
||||||
logger.debug(f'{app_name} App was not found during deregistering')
|
|
||||||
break
|
|
||||||
|
|
||||||
# unregister the models (yes, models are just kept in multilevel dicts)
|
|
||||||
for model in models:
|
|
||||||
# remove model from general registry
|
|
||||||
apps.all_models[plugin_path].pop(model)
|
|
||||||
|
|
||||||
# clear the registry for that app
|
|
||||||
# so that the import trick will work on reloading the same plugin
|
|
||||||
# -> the registry is kept for the whole lifecycle
|
|
||||||
if models and app_name in apps.all_models:
|
|
||||||
apps.all_models.pop(app_name)
|
|
||||||
|
|
||||||
# remove plugin from installed_apps
|
|
||||||
self._clean_installed_apps()
|
|
||||||
|
|
||||||
# reset load flag and reload apps
|
|
||||||
settings.INTEGRATION_APPS_LOADED = False
|
|
||||||
self._reload_apps(force_reload=force_reload)
|
|
||||||
|
|
||||||
# update urls to remove the apps from the site admin
|
|
||||||
self._update_urls()
|
|
||||||
|
|
||||||
def _clean_installed_apps(self):
|
def _clean_installed_apps(self):
|
||||||
for plugin in self.installed_apps:
|
for plugin in self.installed_apps:
|
||||||
if plugin in settings.INSTALLED_APPS:
|
if plugin in settings.INSTALLED_APPS:
|
||||||
|
Loading…
Reference in New Issue
Block a user