Files
mayan-edms/mayan/apps/scheduler/api.py

54 lines
1.5 KiB
Python

from __future__ import absolute_import
from functools import wraps
from django import db
from .exceptions import AlreadyScheduled
from .runtime import scheduler
registered_jobs = {}
def close_connections(func):
"""
Wrapper that closes all db connection before and after execution of
its wrapped function
"""
@wraps(func)
def wrapper(*args, **kwargs):
# This ensures the task gets a fresh db connection
db.close_connection()
result = func(*args, **kwargs)
# This ensures no open connections remain after the task finishes executing
db.close_connection()
return result
return wrapper
def register_interval_job(name, title, func, weeks=0, days=0, hours=0, minutes=0,
seconds=0, start_date=None, args=None,
kwargs=None, job_name=None, **options):
if name in registered_jobs:
raise AlreadyScheduled
# Wrap the user function before adding it to the scheduler
job = scheduler.add_interval_job(func=close_connections(func), weeks=weeks, days=days,
hours=hours, minutes=minutes, seconds=seconds,
start_date=start_date, args=args, kwargs=kwargs, **options)
registered_jobs[name] = {'title': title, 'job': job}
def remove_job(name):
if name in registered_jobs:
scheduler.unschedule_job(registered_jobs[name]['job'])
registered_jobs.pop(name)
def get_job_list():
return registered_jobs.values()