From 586a2968aa28d2322206d8471b798ff18d202fc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Mudlaff?= Date: Mon, 7 Oct 2019 15:57:30 +0200 Subject: [PATCH 1/2] Solve problem with job delete and stop --- gradient/api_sdk/repositories/jobs.py | 44 +++++++++++++-------------- gradient/cli/jobs.py | 2 +- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/gradient/api_sdk/repositories/jobs.py b/gradient/api_sdk/repositories/jobs.py index f6c1f665..3e9687cd 100644 --- a/gradient/api_sdk/repositories/jobs.py +++ b/gradient/api_sdk/repositories/jobs.py @@ -1,6 +1,6 @@ from gradient import config from gradient.api_sdk import serializers -from .common import ListResources, CreateResource, BaseRepository, GetResource +from .common import ListResources, CreateResource, BaseRepository, GetResource, DeleteResource, StopResource from ..serializers import JobSchema, LogRowSchema @@ -106,26 +106,24 @@ def _get_client(self, use_vpc=False): return self.http_client -class DeleteJob(GetBaseJobApiUrlMixin, BaseRepository): +class DeleteJob(GetBaseJobApiUrlMixin, DeleteResource): def get_request_url(self, **kwargs): - return "/job/{}/destroy/".format(kwargs.get("id_")) + return "/jobs/{}/destroy".format(kwargs.get("id")) - def delete(self, id_, **kwargs): - url = self.get_request_url(id_=id_) - response = self.client.post(url) - self._validate_response(response) + def _send_request(self, client, url, json_data=None): + response = client.post(url, json=json_data) + return response -class StopJob(GetBaseJobApiUrlMixin, BaseRepository): +class StopJob(GetBaseJobApiUrlMixin, StopResource): def get_request_url(self, **kwargs): - return "/job/{}/stop/".format(kwargs.get('id_')) + return "/jobs/{}/stop".format(kwargs.get('id')) - def stop(self, id_, **kwargs): - url = self.get_request_url(id_=id_) - response = self.client.post(url) - self._validate_response(response) + def _send_request(self, client, url, json_data=None): + response = client.post(url, json=json_data) + return response class ListJobArtifacts(GetBaseJobApiUrlMixin, ListResources): @@ -156,16 +154,16 @@ class DeleteJobArtifacts(GetBaseJobApiUrlMixin, BaseRepository): VALIDATION_ERROR_MESSAGE = "Failed to delete resource" def get_request_url(self, **kwargs): - return "/jobs/{}/artifactsDestroy/".format(kwargs.get("id_")) - - def delete(self, id_, **kwargs): - url = self.get_request_url(id_=id_) - - params = self._get_request_params(kwargs) - - client = self._get_client() - response = client.post(url, json=kwargs.get("json"), params=params) - self._validate_response(response) + return "/jobs/{}/artifactsDestroy".format(kwargs.get("id")) + + # def delete(self, id_, **kwargs): + # url = self.get_request_url(id_=id_) + # + # params = self._get_request_params(kwargs) + # + # client = self._get_client() + # response = client.post(url, json=kwargs.get("json"), params=params) + # self._validate_response(response) def _get_request_params(self, kwargs): filters = dict() diff --git a/gradient/cli/jobs.py b/gradient/cli/jobs.py index dd390369..ff681c8d 100644 --- a/gradient/cli/jobs.py +++ b/gradient/cli/jobs.py @@ -32,7 +32,7 @@ def jobs_group(): help="Delete job with given ID", ) @api_key_option -def delete_job(job_id, api_key=None): +def delete_job(job_id, api_key): command = jobs_commands.DeleteJobCommand(api_key=api_key) command.execute(job_id) From d71bd3c9815c16b3080b51c59741f4c3fd1145f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Mudlaff?= Date: Tue, 8 Oct 2019 09:45:18 +0200 Subject: [PATCH 2/2] Update code to pass tests --- gradient/api_sdk/repositories/jobs.py | 21 ++++++++++++--------- tests/functional/test_jobs.py | 6 +++--- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/gradient/api_sdk/repositories/jobs.py b/gradient/api_sdk/repositories/jobs.py index 3e9687cd..a8169138 100644 --- a/gradient/api_sdk/repositories/jobs.py +++ b/gradient/api_sdk/repositories/jobs.py @@ -1,5 +1,6 @@ from gradient import config from gradient.api_sdk import serializers +from gradient.api_sdk.clients import http_client from .common import ListResources, CreateResource, BaseRepository, GetResource, DeleteResource, StopResource from ..serializers import JobSchema, LogRowSchema @@ -150,20 +151,22 @@ def _get_request_params(self, kwargs): return params -class DeleteJobArtifacts(GetBaseJobApiUrlMixin, BaseRepository): +class DeleteJobArtifacts(GetBaseJobApiUrlMixin, DeleteResource): VALIDATION_ERROR_MESSAGE = "Failed to delete resource" def get_request_url(self, **kwargs): return "/jobs/{}/artifactsDestroy".format(kwargs.get("id")) - # def delete(self, id_, **kwargs): - # url = self.get_request_url(id_=id_) - # - # params = self._get_request_params(kwargs) - # - # client = self._get_client() - # response = client.post(url, json=kwargs.get("json"), params=params) - # self._validate_response(response) + def _send(self, url, use_vpc=False, **kwargs): + client = self._get_client(use_vpc=use_vpc) + params_data = self._get_request_params(kwargs) + response = self._send_request(client, url, params_data=params_data) + gradient_response = http_client.GradientResponse.interpret_response(response) + return gradient_response + + def _send_request(self, client, url, params_data=None): + response = client.post(url, params=params_data) + return response def _get_request_params(self, kwargs): filters = dict() diff --git a/tests/functional/test_jobs.py b/tests/functional/test_jobs.py index 380bfec0..985dcc92 100644 --- a/tests/functional/test_jobs.py +++ b/tests/functional/test_jobs.py @@ -311,7 +311,7 @@ def test_should_send_valid_post_request_when_destroying_artifacts_with_files_spe "some_key"]) assert result.exit_code == 0, result.exc_info - post_patched.assert_called_with("{}/jobs/{}/artifactsDestroy/".format(self.URL, job_id), + post_patched.assert_called_with("{}/jobs/{}/artifactsDestroy".format(self.URL, job_id), files=None, headers=self.EXPECTED_HEADERS_WITH_CHANGED_API_KEY, json=None, @@ -324,7 +324,7 @@ def test_should_send_valid_post_request_when_destroying_artifacts_without_files_ job_id = "some_job_id" result = self.runner.invoke(cli.cli, ["jobs", "artifacts", "destroy", job_id, "--apiKey", "some_key"]) - post_patched.assert_called_with("{}/jobs/{}/artifactsDestroy/".format(self.URL, job_id), + post_patched.assert_called_with("{}/jobs/{}/artifactsDestroy".format(self.URL, job_id), files=None, headers=self.EXPECTED_HEADERS_WITH_CHANGED_API_KEY, json=None, @@ -340,7 +340,7 @@ def test_should_read_options_from_yaml_file(self, post_patched, jobs_artifacts_d result = self.runner.invoke(cli.cli, command) assert result.exit_code == 0, result.exc_info - post_patched.assert_called_with("{}/jobs/some_id/artifactsDestroy/".format(self.URL), + post_patched.assert_called_with("{}/jobs/some_id/artifactsDestroy".format(self.URL), files=None, headers=self.EXPECTED_HEADERS_WITH_CHANGED_API_KEY, json=None,