mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
Notifications fix (#8360)
* Fix for app loading - Allow collection for background worker too * Improved logging * Refactor MethodStorageClass - Cache methods more intelligently - Re-collect if null
This commit is contained in:
parent
6be6c4b42f
commit
331692bb46
@ -40,9 +40,14 @@ class InvenTreeConfig(AppConfig):
|
||||
- Adding users set in the current environment
|
||||
"""
|
||||
# skip loading if plugin registry is not loaded or we run in a background thread
|
||||
|
||||
if not InvenTree.ready.isPluginRegistryLoaded():
|
||||
return
|
||||
|
||||
# Skip if not in worker or main thread
|
||||
if (
|
||||
not InvenTree.ready.isPluginRegistryLoaded()
|
||||
or not InvenTree.ready.isInMainThread()
|
||||
not InvenTree.ready.isInMainThread()
|
||||
and not InvenTree.ready.isInWorkerThread()
|
||||
):
|
||||
return
|
||||
|
||||
@ -52,7 +57,6 @@ class InvenTreeConfig(AppConfig):
|
||||
|
||||
if InvenTree.ready.canAppAccessDatabase() or settings.TESTING_ENV:
|
||||
self.remove_obsolete_tasks()
|
||||
|
||||
self.collect_tasks()
|
||||
self.start_background_tasks()
|
||||
|
||||
|
@ -10,7 +10,7 @@ from django.utils.translation import gettext_lazy as _
|
||||
|
||||
import common.models
|
||||
import InvenTree.helpers
|
||||
from InvenTree.ready import isImportingData
|
||||
from InvenTree.ready import isImportingData, isRebuildingData
|
||||
from plugin import registry
|
||||
from plugin.models import NotificationUserSetting, PluginConfig
|
||||
from users.models import Owner
|
||||
@ -181,9 +181,20 @@ class MethodStorageClass:
|
||||
Is initialized on startup as one instance named `storage` in this file.
|
||||
"""
|
||||
|
||||
liste = None
|
||||
methods_list = None
|
||||
user_settings = {}
|
||||
|
||||
@property
|
||||
def methods(self):
|
||||
"""Return all available methods.
|
||||
|
||||
This is cached, and stored internally.
|
||||
"""
|
||||
if self.methods_list is None:
|
||||
self.collect()
|
||||
|
||||
return self.methods_list
|
||||
|
||||
def collect(self, selected_classes=None):
|
||||
"""Collect all classes in the environment that are notification methods.
|
||||
|
||||
@ -192,7 +203,8 @@ class MethodStorageClass:
|
||||
Args:
|
||||
selected_classes (class, optional): References to the classes that should be registered. Defaults to None.
|
||||
"""
|
||||
logger.debug('Collecting notification methods')
|
||||
logger.debug('Collecting notification methods...')
|
||||
|
||||
current_method = (
|
||||
InvenTree.helpers.inheritors(NotificationMethod) - IGNORED_NOTIFICATION_CLS
|
||||
)
|
||||
@ -215,8 +227,12 @@ class MethodStorageClass:
|
||||
item.plugin = plugin() if plugin else None
|
||||
filtered_list[ref] = item
|
||||
|
||||
storage.liste = list(filtered_list.values())
|
||||
logger.info('Found %s notification methods', len(storage.liste))
|
||||
storage.methods_list = list(filtered_list.values())
|
||||
|
||||
logger.info('Found %s notification methods', len(storage.methods_list))
|
||||
|
||||
for item in storage.methods_list:
|
||||
logger.debug(' - %s', str(item))
|
||||
|
||||
def get_usersettings(self, user) -> list:
|
||||
"""Returns all user settings for a specific user.
|
||||
@ -230,7 +246,8 @@ class MethodStorageClass:
|
||||
list: All applicablae notification settings.
|
||||
"""
|
||||
methods = []
|
||||
for item in storage.liste:
|
||||
|
||||
for item in storage.methods:
|
||||
if item.USER_SETTING:
|
||||
new_key = f'NOTIFICATION_METHOD_{item.METHOD_NAME.upper()}'
|
||||
|
||||
@ -246,6 +263,7 @@ class MethodStorageClass:
|
||||
'icon': getattr(item, 'METHOD_ICON', ''),
|
||||
'method': item.METHOD_NAME,
|
||||
})
|
||||
|
||||
return methods
|
||||
|
||||
|
||||
@ -348,7 +366,7 @@ def trigger_notification(obj, category=None, obj_ref='pk', **kwargs):
|
||||
delivery_methods = kwargs.get('delivery_methods')
|
||||
|
||||
# Check if data is importing currently
|
||||
if isImportingData():
|
||||
if isImportingData() or isRebuildingData():
|
||||
return
|
||||
|
||||
# Resolve object reference
|
||||
@ -422,7 +440,7 @@ def trigger_notification(obj, category=None, obj_ref='pk', **kwargs):
|
||||
|
||||
# Collect possible methods
|
||||
if delivery_methods is None:
|
||||
delivery_methods = storage.liste or []
|
||||
delivery_methods = storage.methods or []
|
||||
else:
|
||||
delivery_methods = delivery_methods - IGNORED_NOTIFICATION_CLS
|
||||
|
||||
@ -439,7 +457,7 @@ def trigger_notification(obj, category=None, obj_ref='pk', **kwargs):
|
||||
# Set delivery flag
|
||||
common.models.NotificationEntry.notify(category, obj_ref_value)
|
||||
else:
|
||||
logger.debug("No possible users for notification '%s'", category)
|
||||
logger.info("No possible users for notification '%s'", category)
|
||||
|
||||
|
||||
def trigger_superuser_notification(plugin: PluginConfig, msg: str):
|
||||
|
@ -95,7 +95,7 @@ def notification_list(context, *args, **kwargs):
|
||||
'description': a.__doc__,
|
||||
'name': a.__name__,
|
||||
}
|
||||
for a in storage.liste
|
||||
for a in storage.methods
|
||||
]
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user