Make it generic method instead

This commit is contained in:
eeintech 2021-07-22 16:34:35 -04:00
parent 9b542ed23f
commit d7028b6d74
2 changed files with 50 additions and 10 deletions

View File

@ -69,6 +69,47 @@ def offload_task(taskname, *args, **kwargs):
task.run() task.run()
def run_task(taskname):
"""
1. Check if task is implemented
- yes: proceed
- no: return
2. Check if worker cluster is running
- yes: add task to queue
- no: run it as blocking process
"""
# Get task list
tasks = get_task_list()
# Check if task exists
if taskname not in tasks:
logger.warning(f'Task "{taskname}" is not implemented')
return
from InvenTree.status import is_worker_running
if is_worker_running():
# Append module path
taskname = 'InvenTree.tasks.' + taskname
# Running as task
offload_task(taskname)
else:
# Retrieve local method from task name
_func = eval(taskname)
# Run it as blocking process
_func()
def get_task_list():
return [task for task in LOCAL_METHODS if task not in TASK_MANAGEMENT]
# Keep TASK_MANAGEMENT before task methods
TASK_MANAGEMENT = [key for key, value in locals().items() if callable(value) and value.__module__ == __name__]
#
def heartbeat(): def heartbeat():
""" """
Simple task which runs at 5 minute intervals, Simple task which runs at 5 minute intervals,
@ -217,3 +258,8 @@ def send_email(subject, body, recipients, from_email=None):
from_email, from_email,
recipients, recipients,
) )
# Keep LOCAL_METHODS at the end of the file
LOCAL_METHODS = [key for key, value in locals().items() if callable(value) and value.__module__ == __name__]
#

View File

@ -803,17 +803,11 @@ class CurrencyRefreshView(RedirectView):
On a POST request we will attempt to refresh the exchange rates On a POST request we will attempt to refresh the exchange rates
""" """
# Define associated task # Define associated task from InvenTree.tasks list of methods
task_name = 'InvenTree.tasks.update_exchange_rates' taskname = 'update_exchange_rates'
if InvenTree.status.is_worker_running(): # Run it
# Running as task InvenTree.tasks.run_task(taskname)
InvenTree.tasks.offload_task(task_name)
else:
# Retrieve function from task name
_func = eval(task_name)
# Run it: will block for a little bit
_func()
return self.get(request, *args, **kwargs) return self.get(request, *args, **kwargs)