From 1e6c1f1e9d81f3ec13b8151a5598b30a340becd7 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Thu, 16 Jun 2016 22:35:35 -0400 Subject: [PATCH] additions to allow copy of an orphaned job --- awx/main/models/jobs.py | 4 +++- awx/main/models/unified_jobs.py | 3 ++- awx/main/tests/functional/test_jobs.py | 8 ++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 4230fb1425..6f223b0819 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -743,8 +743,10 @@ class Job(UnifiedJob, JobOptions): def copy(self): presets = {} - for kw in self.job_template._get_unified_job_field_names(): + for kw in JobTemplate._get_unified_job_field_names(): presets[kw] = getattr(self, kw) + if not self.job_template: + self.job_template = JobTemplate(name='temporary') return self.job_template.create_unified_job(**presets) # Job Credential required diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 766db6718e..7084cef874 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -309,7 +309,8 @@ class UnifiedJobTemplate(PolymorphicModel, CommonModelNameNotUnique, Notificatio kwargs.pop('%s_id' % parent_field_name, None) create_kwargs = {} m2m_fields = {} - create_kwargs[parent_field_name] = self + if self.pk: + create_kwargs[parent_field_name] = self for field_name in self._get_unified_job_field_names(): # Foreign keys can be specified as field_name or field_name_id. id_field_name = '%s_id' % field_name diff --git a/awx/main/tests/functional/test_jobs.py b/awx/main/tests/functional/test_jobs.py index e65ef9edb7..83302e7400 100644 --- a/awx/main/tests/functional/test_jobs.py +++ b/awx/main/tests/functional/test_jobs.py @@ -35,3 +35,11 @@ def test_job_blocking_allow_simul(get, post, job_template, inventory): job_template.allow_simultaneous = False assert j1.is_blocked_by(j2) assert j2.is_blocked_by(j1) + +@pytest.mark.django_db +def test_orphan_unified_job_creation(instance, inventory): + job = Job.objects.create(job_template=None, inventory=inventory, name='hi world') + job2 = job.copy() + assert job2.job_template is None + assert job2.inventory == inventory + assert job2.name == 'hi world'