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
This commit is contained in:
Bulat Gaifullin 2016-09-08 14:19:10 +03:00
parent 80cc133047
commit a022fd74ac
3 changed files with 64 additions and 0 deletions

View File

@ -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."""

View File

@ -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)

View File

@ -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):