mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-14 19:22:53 -06:00
Fix job field validation
Previously, fields in the Job model were not validated when the job was created. Now 'full_clean()' is called before saving the job to ensure valid data.
This commit is contained in:
parent
5940f5fa61
commit
c34a0e2720
@ -130,7 +130,7 @@ class Job(models.Model):
|
|||||||
super().clean()
|
super().clean()
|
||||||
|
|
||||||
# Validate the assigned object type
|
# Validate the assigned object type
|
||||||
if self.object_type not in ObjectType.objects.with_feature('jobs'):
|
if self.object_type and self.object_type not in ObjectType.objects.with_feature('jobs'):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("Jobs cannot be assigned to this object type ({type}).").format(type=self.object_type)
|
_("Jobs cannot be assigned to this object type ({type}).").format(type=self.object_type)
|
||||||
)
|
)
|
||||||
@ -223,7 +223,7 @@ class Job(models.Model):
|
|||||||
rq_queue_name = get_queue_for_model(object_type.model if object_type else None)
|
rq_queue_name = get_queue_for_model(object_type.model if object_type else None)
|
||||||
queue = django_rq.get_queue(rq_queue_name)
|
queue = django_rq.get_queue(rq_queue_name)
|
||||||
status = JobStatusChoices.STATUS_SCHEDULED if schedule_at else JobStatusChoices.STATUS_PENDING
|
status = JobStatusChoices.STATUS_SCHEDULED if schedule_at else JobStatusChoices.STATUS_PENDING
|
||||||
job = Job.objects.create(
|
job = Job(
|
||||||
object_type=object_type,
|
object_type=object_type,
|
||||||
object_id=object_id,
|
object_id=object_id,
|
||||||
name=name,
|
name=name,
|
||||||
@ -233,6 +233,8 @@ class Job(models.Model):
|
|||||||
user=user,
|
user=user,
|
||||||
job_id=uuid.uuid4()
|
job_id=uuid.uuid4()
|
||||||
)
|
)
|
||||||
|
job.full_clean()
|
||||||
|
job.save()
|
||||||
|
|
||||||
# Run the job immediately, rather than enqueuing it as a background task. Note that this is a synchronous
|
# Run the job immediately, rather than enqueuing it as a background task. Note that this is a synchronous
|
||||||
# (blocking) operation, and execution will pause until the job completes.
|
# (blocking) operation, and execution will pause until the job completes.
|
||||||
|
@ -5,7 +5,7 @@ from django.utils import timezone
|
|||||||
from django_rq import get_queue
|
from django_rq import get_queue
|
||||||
|
|
||||||
from ..jobs import *
|
from ..jobs import *
|
||||||
from core.models import Job
|
from core.models import DataSource, Job
|
||||||
from core.choices import JobStatusChoices
|
from core.choices import JobStatusChoices
|
||||||
|
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ class EnqueueTest(JobRunnerTestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def test_enqueue(self):
|
def test_enqueue(self):
|
||||||
instance = Job()
|
instance = DataSource()
|
||||||
for i in range(1, 3):
|
for i in range(1, 3):
|
||||||
job = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at())
|
job = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at())
|
||||||
|
|
||||||
@ -76,13 +76,13 @@ class EnqueueTest(JobRunnerTestCase):
|
|||||||
self.assertEqual(TestJobRunner.get_jobs(instance).count(), i)
|
self.assertEqual(TestJobRunner.get_jobs(instance).count(), i)
|
||||||
|
|
||||||
def test_enqueue_once(self):
|
def test_enqueue_once(self):
|
||||||
job = TestJobRunner.enqueue_once(instance=Job(), schedule_at=self.get_schedule_at())
|
job = TestJobRunner.enqueue_once(instance=DataSource(), schedule_at=self.get_schedule_at())
|
||||||
|
|
||||||
self.assertIsInstance(job, Job)
|
self.assertIsInstance(job, Job)
|
||||||
self.assertEqual(job.name, TestJobRunner.__name__)
|
self.assertEqual(job.name, TestJobRunner.__name__)
|
||||||
|
|
||||||
def test_enqueue_once_twice_same(self):
|
def test_enqueue_once_twice_same(self):
|
||||||
instance = Job()
|
instance = DataSource()
|
||||||
schedule_at = self.get_schedule_at()
|
schedule_at = self.get_schedule_at()
|
||||||
job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at)
|
job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at)
|
||||||
job2 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at)
|
job2 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at)
|
||||||
@ -91,7 +91,7 @@ class EnqueueTest(JobRunnerTestCase):
|
|||||||
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1)
|
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1)
|
||||||
|
|
||||||
def test_enqueue_once_twice_different_schedule_at(self):
|
def test_enqueue_once_twice_different_schedule_at(self):
|
||||||
instance = Job()
|
instance = DataSource()
|
||||||
job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at())
|
job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at())
|
||||||
job2 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2))
|
job2 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2))
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ class EnqueueTest(JobRunnerTestCase):
|
|||||||
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1)
|
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1)
|
||||||
|
|
||||||
def test_enqueue_once_twice_different_interval(self):
|
def test_enqueue_once_twice_different_interval(self):
|
||||||
instance = Job()
|
instance = DataSource()
|
||||||
schedule_at = self.get_schedule_at()
|
schedule_at = self.get_schedule_at()
|
||||||
job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at)
|
job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at)
|
||||||
job2 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at, interval=60)
|
job2 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at, interval=60)
|
||||||
@ -112,7 +112,7 @@ class EnqueueTest(JobRunnerTestCase):
|
|||||||
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1)
|
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1)
|
||||||
|
|
||||||
def test_enqueue_once_with_enqueue(self):
|
def test_enqueue_once_with_enqueue(self):
|
||||||
instance = Job()
|
instance = DataSource()
|
||||||
job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2))
|
job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2))
|
||||||
job2 = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at())
|
job2 = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at())
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ class EnqueueTest(JobRunnerTestCase):
|
|||||||
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 2)
|
self.assertEqual(TestJobRunner.get_jobs(instance).count(), 2)
|
||||||
|
|
||||||
def test_enqueue_once_after_enqueue(self):
|
def test_enqueue_once_after_enqueue(self):
|
||||||
instance = Job()
|
instance = DataSource()
|
||||||
job1 = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at())
|
job1 = TestJobRunner.enqueue(instance, schedule_at=self.get_schedule_at())
|
||||||
job2 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2))
|
job2 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at(2))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user