+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
from os.path import join, isfile
from django.core.urlresolvers import reverse
from django.db import models
@classmethod
def exists(cls, path):
"""Returns opened file or None.
-
+
`path` is relative to WAITER_ROOT.
Won't open a path leading outside of WAITER_ROOT.
"""
cls.objects.count() < WAITER_MAX_QUEUE
)
- def is_stale(self):
- if self.task is None:
- # Race; just let the other task roll.
- return False
- if self.task.status not in (u'PENDING', u'STARTED', u'SUCCESS', u'RETRY'):
- return True
- return False
-
@classmethod
def order(cls, path, task_creator, description=None):
"""
if not already:
waited, created = cls.objects.get_or_create(path=path)
if created or waited.is_stale():
- waited.task = task_creator(check_abspath(path))
+ waited.task = task_creator(check_abspath(path), waited.pk)
waited.task_id = waited.task.task_id
waited.description = description
waited.save()