mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-30 12:36:45 +00:00
* Make task registering more robust See https://github.com/inventree/InvenTree/issues/9579 * add unit test (cherry picked from commit 9f0354b3151e9c09a41eab579f1fa0d82f1b2bc8) Co-authored-by: Matthias Mair <code@mjmair.com>
This commit is contained in:
parent
7090950066
commit
af8a2f14a5
@ -179,7 +179,15 @@ class ScheduleMixin:
|
||||
obj['func'] = 'plugin.registry.call_plugin_function'
|
||||
obj['args'] = f"'{slug}', '{func_name}'"
|
||||
|
||||
if Schedule.objects.filter(name=task_name).exists():
|
||||
tasks = Schedule.objects.filter(name=task_name)
|
||||
if len(tasks) > 1:
|
||||
logger.info(
|
||||
"Found multiple tasks; Adding a new scheduled task '%s'",
|
||||
task_name,
|
||||
)
|
||||
tasks.delete()
|
||||
Schedule.objects.create(**obj)
|
||||
elif len(tasks) == 1:
|
||||
# Scheduled task already exists - update it!
|
||||
logger.info("Updating scheduled task '%s'", task_name)
|
||||
instance = Schedule.objects.get(name=task_name)
|
||||
|
@ -2,10 +2,10 @@
|
||||
|
||||
from django.test import TestCase
|
||||
|
||||
from plugin import InvenTreePlugin, registry
|
||||
from plugin import InvenTreePlugin
|
||||
from plugin.helpers import MixinImplementationError
|
||||
from plugin.mixins import ScheduleMixin
|
||||
from plugin.registry import call_plugin_function
|
||||
from plugin.registry import call_plugin_function, registry
|
||||
|
||||
|
||||
class ExampleScheduledTaskPluginTests(TestCase):
|
||||
@ -42,9 +42,19 @@ class ExampleScheduledTaskPluginTests(TestCase):
|
||||
# test updating the schedule
|
||||
hello_schedule = Schedule.objects.get(name='plugin.schedule.hello')
|
||||
self.assertEqual(hello_schedule.minutes, 45)
|
||||
# change the schedule and reregister
|
||||
# change the schedule and reregister -> the interval should be preserved
|
||||
plg.scheduled_tasks['hello']['minutes'] = 15
|
||||
# add a doubly scheduled task - this should be removed
|
||||
Schedule.objects.create(name='plugin.schedule.hello')
|
||||
self.assertEqual(
|
||||
Schedule.objects.filter(name='plugin.schedule.hello').count(), 2
|
||||
)
|
||||
|
||||
plg.register_tasks()
|
||||
# The duplicate task should be removed
|
||||
self.assertEqual(
|
||||
Schedule.objects.filter(name='plugin.schedule.hello').count(), 1
|
||||
)
|
||||
|
||||
# Check that the schedule was updated
|
||||
hello_schedule = Schedule.objects.get(name='plugin.schedule.hello')
|
||||
|
Loading…
x
Reference in New Issue
Block a user