mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
keep reloading save
- wrap reloading - throw custom error - log custom error in loading function
This commit is contained in:
parent
0b6e9ef4c9
commit
e301971159
@ -3,6 +3,8 @@ from __future__ import unicode_literals
|
|||||||
import importlib
|
import importlib
|
||||||
import pathlib
|
import pathlib
|
||||||
import logging
|
import logging
|
||||||
|
import sysconfig
|
||||||
|
import traceback
|
||||||
from typing import OrderedDict
|
from typing import OrderedDict
|
||||||
from importlib import reload
|
from importlib import reload
|
||||||
|
|
||||||
@ -62,6 +64,8 @@ class PluginAppConfig(AppConfig):
|
|||||||
except (OperationalError, ProgrammingError):
|
except (OperationalError, ProgrammingError):
|
||||||
# Exception if the database has not been migrated yet
|
# Exception if the database has not been migrated yet
|
||||||
logger.info('Database not accessible while loading plugins')
|
logger.info('Database not accessible while loading plugins')
|
||||||
|
except PluginLoadingError as error:
|
||||||
|
logger.error(f'Encountered an error with {error.path}:\n{error.message}')
|
||||||
|
|
||||||
# remove maintenance
|
# remove maintenance
|
||||||
if not _maintenance:
|
if not _maintenance:
|
||||||
@ -348,10 +352,23 @@ class PluginAppConfig(AppConfig):
|
|||||||
apps.app_configs = OrderedDict()
|
apps.app_configs = OrderedDict()
|
||||||
apps.apps_ready = apps.models_ready = apps.loading = apps.ready = False
|
apps.apps_ready = apps.models_ready = apps.loading = apps.ready = False
|
||||||
apps.clear_cache()
|
apps.clear_cache()
|
||||||
apps.populate(settings.INSTALLED_APPS)
|
self._try_reload(apps.populate, settings.INSTALLED_APPS)
|
||||||
return
|
|
||||||
settings.INTEGRATION_PLUGINS_RELOADING = True
|
settings.INTEGRATION_PLUGINS_RELOADING = True
|
||||||
apps.set_installed_apps(settings.INSTALLED_APPS)
|
self._try_reload(apps.set_installed_apps, settings.INSTALLED_APPS)
|
||||||
settings.INTEGRATION_PLUGINS_RELOADING = False
|
settings.INTEGRATION_PLUGINS_RELOADING = False
|
||||||
|
|
||||||
|
def _try_reload(self, cmd, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
wrapper to try reloading the apps
|
||||||
|
throws an custom error that gets handled by the loading function
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
cmd(*args, **kwargs)
|
||||||
|
return True, []
|
||||||
|
except Exception as error:
|
||||||
|
package_path = traceback.extract_tb(error.__traceback__)[-1].filename
|
||||||
|
install_path = sysconfig.get_paths()["purelib"]
|
||||||
|
package_name = pathlib.Path(package_path).relative_to(install_path).parts[0]
|
||||||
|
raise PluginLoadingError(package_name, str(error))
|
||||||
# endregion
|
# endregion
|
||||||
# endregion
|
# endregion
|
||||||
|
Loading…
Reference in New Issue
Block a user