def clear_cache(): _apps = Application.objects.all() time_threshold = datetime.now() - timedelta(days=2) for app in _apps: camel_case = "".join(x.title() for x in app.pk.split('_')) task_model = apps.get_model(".".join([app.pk, camel_case + "Task"])) history_model = apps.get_model(".".join([app.pk, "UserHistory"])) tasks = task_model.objects.filter(execution_start__lt=time_threshold) for task in tasks: history_model.objects.filter(task_id=task.pk).delete() shutil.rmtree(task.get_result_path()) task.delete() print("Cache Cleared.")
def get_tasks(djsurvey): result = list() try: for task in models.ScheduledTasks.objects.filter(survey=djsurvey).all(): # Prune any tasks that are done or resulted in an error. if not AsyncResult(task.celeryid).state in [states.PENDING, states.RETRY]: task.delete() else: result.append(task) return result except models.ScheduledTasks.DoesNotExist: return []
def cancel_task(task_manager=None, booking_id=None, task=None): task_id = task if task else task_manager.get(booking_id) if task_id: qs = PeriodicTask.objects.filter(id=task_id) if qs.exists(): task = qs.first() qs_cron = CrontabSchedule.objects.filter(id=task.crontab.id) if qs_cron.exists(): crontab = qs_cron.first() crontab.delete() task.delete()
def queue_timed_write_and_render(djsurvey): with models.LockedSurvey(djsurvey.id): try: task = models.ScheduledTasks.objects.get(survey=djsurvey, task='render') # Will the task still run? if AsyncResult(task.celeryid).state in [states.PENDING, states.RETRY]: return # Seems like the task will not run, so remove the old one task.delete() except models.ScheduledTasks.DoesNotExist: pass # And queue a new task result = write_and_render_questionnaire.apply_async(args=(djsurvey.id, ), countdown=1) # Note in DB, that it is queued models.ScheduledTasks(celeryid=result.task_id, survey=djsurvey, task='render').save()