mirror of
https://github.com/django-q2/django-q2.git
synced 2026-10-09 04:08:12 +08:00
Task now accepts a hook function, that will be called with the finished task as the argument.
This commit is contained in:
+20
-1
@@ -1,4 +1,9 @@
|
|||||||
|
import importlib
|
||||||
|
import logging
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from django.dispatch import receiver
|
||||||
from picklefield import PickledObjectField
|
from picklefield import PickledObjectField
|
||||||
|
|
||||||
|
|
||||||
@@ -14,7 +19,7 @@ class Task(models.Model):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_result(name):
|
def get_result(name):
|
||||||
return Task.objects.filter(name=name).values_list('result', flat=True)
|
return Task.objects.get(name=name).result
|
||||||
|
|
||||||
def time_taken(self):
|
def time_taken(self):
|
||||||
return (self.stopped - self.started).total_seconds()
|
return (self.stopped - self.started).total_seconds()
|
||||||
@@ -23,6 +28,20 @@ class Task(models.Model):
|
|||||||
app_label = 'django_q'
|
app_label = 'django_q'
|
||||||
|
|
||||||
|
|
||||||
|
@receiver(post_save, sender=Task)
|
||||||
|
def call_hook(sender, instance, **kwargs):
|
||||||
|
if instance.kwargs.get('hook'):
|
||||||
|
module, func = instance.kwargs.get('hook').rsplit('.', 1)
|
||||||
|
try:
|
||||||
|
m = importlib.import_module(module)
|
||||||
|
f = getattr(m, func)
|
||||||
|
f(task=instance)
|
||||||
|
except Exception as e:
|
||||||
|
logger = logging.getLogger('django-q')
|
||||||
|
logger.error('return hook failed on {}'.format(instance.name))
|
||||||
|
logger.exception(e)
|
||||||
|
|
||||||
|
|
||||||
class SuccessManager(models.Manager):
|
class SuccessManager(models.Manager):
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return super(SuccessManager, self).get_queryset().filter(
|
return super(SuccessManager, self).get_queryset().filter(
|
||||||
|
|||||||
Reference in New Issue
Block a user