mirror of
https://github.com/django-q2/django-q2.git
synced 2026-10-04 06:38:11 +08:00
Merge pull request #123 from Koed00/schedule
Adds a check for duplicate schedule names.
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user