From a022fd74ac5a6d420ded06499b2ebf77ee686f4f Mon Sep 17 00:00:00 2001 From: Bulat Gaifullin Date: Thu, 8 Sep 2016 14:19:10 +0300 Subject: [PATCH] Filter sequences output by release or cluster It will be more usefull to get sequences for release or for cluster Change-Id: Ia2efc30050283da5653a1bbc23aeaf9f4de6a13b Partial-Bug: 1620620 --- .../api/v1/handlers/deployment_sequence.py | 27 ++++++++++++++++ .../nailgun/objects/deployment_sequence.py | 5 +++ .../test_deployment_sequences_handler.py | 32 +++++++++++++++++++ 3 files changed, 64 insertions(+) diff --git a/nailgun/nailgun/api/v1/handlers/deployment_sequence.py b/nailgun/nailgun/api/v1/handlers/deployment_sequence.py index 6733c74665..8054f0d987 100644 --- a/nailgun/nailgun/api/v1/handlers/deployment_sequence.py +++ b/nailgun/nailgun/api/v1/handlers/deployment_sequence.py @@ -14,6 +14,8 @@ # License for the specific language governing permissions and limitations # under the License. +import web + from nailgun.api.v1.handlers.base import TransactionExecutorHandler from nailgun.api.v1.handlers.base import CollectionHandler @@ -67,6 +69,31 @@ class SequenceCollectionHandler(CollectionHandler): validator = validators.SequenceValidator collection = objects.DeploymentSequenceCollection + @handle_errors + @serialize + def GET(self): + """:returns: Collection of JSONized Sequence objects by release. + + :http: * 200 (OK) + :http: * 404 (Release or Cluster is not found) + """ + + release = self._get_release() + if release: + return self.collection.get_for_release(release) + return self.collection.all() + + def _get_release(self): + params = web.input(release=None, cluster=None) + if params.cluster: + return self.get_object_or_404( + objects.Cluster, id=params.cluster + ).release + if params.release: + return self.get_object_or_404( + objects.Release, id=params.release + ) + class SequenceExecutorHandler(TransactionExecutorHandler): """Handler to execute deployment sequence.""" diff --git a/nailgun/nailgun/objects/deployment_sequence.py b/nailgun/nailgun/objects/deployment_sequence.py index 13d6c34887..919eff7e4d 100644 --- a/nailgun/nailgun/objects/deployment_sequence.py +++ b/nailgun/nailgun/objects/deployment_sequence.py @@ -59,3 +59,8 @@ class DeploymentSequence(NailgunObject): class DeploymentSequenceCollection(NailgunCollection): single = DeploymentSequence + + @classmethod + def get_for_release(cls, release): + """Get all sequences are associated with release.""" + return cls.filter_by(None, release_id=release.id) diff --git a/nailgun/nailgun/test/integration/test_deployment_sequences_handler.py b/nailgun/nailgun/test/integration/test_deployment_sequences_handler.py index ab7f690bd3..59e1c6e031 100644 --- a/nailgun/nailgun/test/integration/test_deployment_sequences_handler.py +++ b/nailgun/nailgun/test/integration/test_deployment_sequences_handler.py @@ -91,6 +91,38 @@ class TestSequencesHandler(base.BaseIntegrationTest): ) self.assertIsNone(sequence) + def test_get_list_of_sequences_by_release(self): + self._create_sequence('test') + resp = self.app.get( + reverse('SequenceCollectionHandler') + + "?release={0}".format(self.release.id), + headers=self.default_headers + ) + sequences = resp.json_body + self.assertEqual('test', sequences[0]['name']) + + def test_get_list_of_sequences_by_cluster(self): + cluster = self.env.create( + cluster_kwargs={'release_id': self.release.id} + ) + self._create_sequence('test') + resp = self.app.get( + reverse('SequenceCollectionHandler') + + "?cluster={0}".format(cluster.id), + headers=self.default_headers + ) + sequences = resp.json_body + self.assertEqual('test', sequences[0]['name']) + + def test_get_list_of_all_sequences(self): + self._create_sequence('test') + resp = self.app.get( + reverse('SequenceCollectionHandler'), + headers=self.default_headers + ) + sequences = resp.json_body + self.assertEqual('test', sequences[0]['name']) + class TestSequenceExecutorHandler(base.BaseIntegrationTest):