Added /strategies endpoint in Watcher API

In this changeset, I added the /strategies endpoint to the Watcher
API service.
This also includes the related Tempest tests.

Partially Implements: blueprint get-goal-from-strategy

Change-Id: I1b70836e0df2082ab0016ecc207e89fdcb0fc8b9
This commit is contained in:
Vincent Françoise
2016-03-31 11:42:53 +02:00
parent 673642e436
commit 81765b9aa5
8 changed files with 545 additions and 4 deletions

View File

@@ -187,10 +187,19 @@ class Connection(api.BaseConnection):
def __add_join_filter(self, query, model, join_model, fieldname, value):
query = query.join(join_model)
return self.__add_simple_filter(query, model, fieldname, value)
return self.__add_simple_filter(query, join_model, fieldname, value)
def _add_filters(self, query, model, filters=None,
plain_fields=None, join_fieldmap=None):
"""Generic way to add filters to a Watcher model
:param query: a :py:class:`sqlalchemy.orm.query.Query` instance
:param model: the model class the filters should relate to
:param filters: dict with the following structure {"fieldname": value}
:param plain_fields: a :py:class:`sqlalchemy.orm.query.Query` instance
:param join_fieldmap: a :py:class:`sqlalchemy.orm.query.Query` instance
"""
filters = filters or {}
plain_fields = plain_fields or ()
join_fieldmap = join_fieldmap or {}
@@ -200,9 +209,9 @@ class Connection(api.BaseConnection):
query = self.__add_simple_filter(
query, model, fieldname, value)
elif fieldname in join_fieldmap:
join_model = join_fieldmap[fieldname]
join_field, join_model = join_fieldmap[fieldname]
query = self.__add_join_filter(
query, model, join_model, fieldname, value)
query, model, join_model, join_field, value)
query = self.__add_soft_delete_mixin_filters(query, filters, model)
query = self.__add_timestamp_mixin_filters(query, filters, model)
@@ -272,7 +281,7 @@ class Connection(api.BaseConnection):
def _add_strategies_filters(self, query, filters):
plain_fields = ['uuid', 'name', 'display_name', 'goal_id']
join_fieldmap = {'goal_uuid': models.Goal}
join_fieldmap = {'goal_uuid': ("uuid", models.Goal)}
return self._add_filters(
query=query, model=models.Strategy, filters=filters,