diff --git a/squad/ci/backend/fake.py b/squad/ci/backend/fake.py index 4b3100e2..e53e44b0 100644 --- a/squad/ci/backend/fake.py +++ b/squad/ci/backend/fake.py @@ -60,6 +60,12 @@ def listen(self): def job_url(self, test_job): return 'https://example.com/job/%s' % test_job.job_id + def has_resubmit(self): + return False + + def has_cancel(self): + return True + def cancel(self, test_job): return True diff --git a/squad/ci/backend/null.py b/squad/ci/backend/null.py index 07879124..9532c4f8 100644 --- a/squad/ci/backend/null.py +++ b/squad/ci/backend/null.py @@ -91,7 +91,6 @@ def listen(self): """ raise NotImplementedError - def has_cancel(self): """ If the backend has a cancel method implemented, override this to diff --git a/squad/ci/backend/tuxsuite.py b/squad/ci/backend/tuxsuite.py index 382c6183..135939a2 100644 --- a/squad/ci/backend/tuxsuite.py +++ b/squad/ci/backend/tuxsuite.py @@ -36,7 +36,7 @@ def has_resubmit(self): return False def has_cancel(self): - return False + return True @staticmethod def get_session(): @@ -413,6 +413,14 @@ def __resolve_settings__(self, test_job): result_settings.update(ps) return result_settings + def cancel(self, testjob): + result_type, tux_project, tux_uid = self.parse_job_id(testjob.job_id) + tux_group, tux_user = tux_project.split('@') + endpoint = f'groups/{tux_group}/projects/{tux_user}/{result_type.lower()}s/{tux_uid}/cancel' + url = urljoin(self.data.url, endpoint) + response = requests.post(url) + return response.status_code == 200 + def supports_callbacks(self): return True diff --git a/squad/ci/models.py b/squad/ci/models.py index b239a416..48b824ab 100644 --- a/squad/ci/models.py +++ b/squad/ci/models.py @@ -382,7 +382,7 @@ def cancel(self): if self.job_status == "Canceled": return False - if self.job_id is not None and self.backend.has_cancel(self): + if self.job_id is not None and self.backend.get_implementation().has_cancel(): return self.backend.get_implementation().cancel(self) self.fetched = True