mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Task improvements (#5159)
* Ignore triggered events if plugin events are not enabled * Ensure that plugin tasks are handled by the background worker * Allow shell access * Don't force async if testing * Enable plugin events as part of CI * fix
This commit is contained in:
parent
4c3dc6ddbd
commit
7ba26ebfbb
@ -20,17 +20,27 @@ def trigger_event(event, *args, **kwargs):
|
||||
This event will be stored in the database,
|
||||
and the worker will respond to it later on.
|
||||
"""
|
||||
from common.models import InvenTreeSetting
|
||||
|
||||
if not settings.PLUGINS_ENABLED:
|
||||
# Do nothing if plugins are not enabled
|
||||
return # pragma: no cover
|
||||
|
||||
if not InvenTreeSetting.get_setting('ENABLE_PLUGINS_EVENTS', False):
|
||||
# Do nothing if plugin events are not enabled
|
||||
return
|
||||
|
||||
# Make sure the database can be accessed and is not being tested rn
|
||||
if not canAppAccessDatabase() and not settings.PLUGIN_TESTING_EVENTS:
|
||||
if not canAppAccessDatabase(allow_shell=True) and not settings.PLUGIN_TESTING_EVENTS:
|
||||
logger.debug(f"Ignoring triggered event '{event}' - database not ready")
|
||||
return
|
||||
|
||||
logger.debug(f"Event triggered: '{event}'")
|
||||
|
||||
# By default, force the event to be processed asynchronously
|
||||
if 'force_async' not in kwargs and not settings.PLUGIN_TESTING_EVENTS:
|
||||
kwargs['force_async'] = True
|
||||
|
||||
offload_task(
|
||||
register_event,
|
||||
event,
|
||||
@ -63,6 +73,11 @@ def register_event(event, *args, **kwargs):
|
||||
|
||||
logger.debug(f"Registering callback for plugin '{slug}'")
|
||||
|
||||
# This task *must* be processed by the background worker,
|
||||
# unless we are running CI tests
|
||||
if 'force_async' not in kwargs and not settings.PLUGIN_TESTING_EVENTS:
|
||||
kwargs['force_async'] = True
|
||||
|
||||
# Offload a separate task for each plugin
|
||||
offload_task(
|
||||
process_event,
|
||||
|
@ -3,6 +3,7 @@
|
||||
from django.conf import settings
|
||||
from django.test import TestCase
|
||||
|
||||
from common.models import InvenTreeSetting
|
||||
from plugin import InvenTreePlugin, registry
|
||||
from plugin.base.event.events import trigger_event
|
||||
from plugin.helpers import MixinNotImplementedError
|
||||
@ -21,6 +22,8 @@ class EventPluginSampleTests(TestCase):
|
||||
config.active = True
|
||||
config.save()
|
||||
|
||||
InvenTreeSetting.set_setting('ENABLE_PLUGINS_EVENTS', True, change_user=None)
|
||||
|
||||
# Enable event testing
|
||||
settings.PLUGIN_TESTING_EVENTS = True
|
||||
# Check that an event is issued
|
||||
|
Loading…
Reference in New Issue
Block a user