Merge pull request #123 from Koed00/schedule

Adds a check for duplicate schedule names.
This commit is contained in:
Ilan Steemers
2016-01-07 19:59:46 +01:00
2 changed files with 18 additions and 4 deletions
+6
View File
@@ -2,6 +2,7 @@
from multiprocessing import Queue, Value from multiprocessing import Queue, Value
# django # django
from django.db import IntegrityError
from django.utils import timezone from django.utils import timezone
# local # local
@@ -75,6 +76,11 @@ def schedule(func, *args, **kwargs):
repeats = kwargs.pop('repeats', -1) repeats = kwargs.pop('repeats', -1)
next_run = kwargs.pop('next_run', timezone.now()) next_run = kwargs.pop('next_run', timezone.now())
# check for name duplicates instead of am unique constraint
if name and Schedule.objects.filter(name=name).exists():
raise IntegrityError("A schedule with the same name already exists.")
# create and return the schedule
return Schedule.objects.create(name=name, return Schedule.objects.create(name=name,
func=func, func=func,
hook=hook, hook=hook,
+12 -4
View File
@@ -1,15 +1,15 @@
from datetime import timedelta from datetime import timedelta
from multiprocessing import Queue, Event, Value from multiprocessing import Queue, Event, Value
import pytest
import arrow import arrow
import pytest
from django.db import IntegrityError
from django.utils import timezone from django.utils import timezone
from django_q.brokers import get_broker from django_q.brokers import get_broker
from django_q.conf import Conf
from django_q.cluster import pusher, worker, monitor, scheduler from django_q.cluster import pusher, worker, monitor, scheduler
from django_q.tasks import Schedule, fetch, schedule as create_schedule, queue_size from django_q.conf import Conf
from django_q.tasks import Schedule, fetch, schedule as create_schedule
@pytest.fixture @pytest.fixture
@@ -33,6 +33,14 @@ def test_scheduler(broker):
schedule_type=Schedule.HOURLY, schedule_type=Schedule.HOURLY,
repeats=1) repeats=1)
assert schedule.last_run() is None assert schedule.last_run() is None
# check duplicate constraint
with pytest.raises(IntegrityError):
schedule = create_schedule('math.copysign',
1, -1,
name='test math',
hook='django_q.tests.tasks.result',
schedule_type=Schedule.HOURLY,
repeats=1)
# run scheduler # run scheduler
scheduler(broker=broker) scheduler(broker=broker)
# set up the workflow # set up the workflow