Merge "Keys operations for empty levels list fixed."

This commit is contained in:
Jenkins 2016-08-22 15:07:59 +00:00 committed by Gerrit Code Review
commit 7f3faa3336
6 changed files with 69 additions and 21 deletions

View File

@ -80,7 +80,7 @@ def get_resource_values(environment, levels, res_def):
res_values = db.ResourceValues.query.filter_by(
environment_id=environment.id,
resource_definition_id=res_def.id,
level_value_id=level_value.id,
level_value=level_value,
).all()
if not res_values:

View File

@ -38,10 +38,10 @@ class ComponentsCollection(flask_restful.Resource):
def post(self):
component = db.Component(name=flask.request.json['name'])
component.resource_definitions = []
for resdef_data in flask.request.json.get('resource_definitions'):
resdef = db.ResourceDefinition(name=resdef_data['name'],
content=resdef_data.get('content'))
component.resource_definitions.append(resdef)
for res_def_data in flask.request.json.get('resource_definitions'):
res_def = db.ResourceDefinition(
name=res_def_data['name'], content=res_def_data.get('content'))
component.resource_definitions.append(res_def)
db.db.session.add(component)
return component, 201
@ -57,9 +57,9 @@ class Component(flask_restful.Resource):
component = db.Component.query.get_or_404(component_id)
update_by = flask.request.json
component.name = update_by.get('name', component.name)
resource_definitions = update_by.get('resource_definitions')
if resource_definitions is not None:
ids = [data['id'] for data in resource_definitions]
res_definitions = update_by.get('resource_definitions')
if res_definitions is not None:
ids = [data['id'] for data in res_definitions]
resources = library.load_objects(db.ResourceDefinition, ids)
component.resource_definitions = resources

View File

@ -25,16 +25,16 @@ class ResourceValues(flask_restful.Resource):
@db.with_transaction
def put(self, environment_id, levels, resource_id_or_name):
environment = db.Environment.query.get_or_404(environment_id)
resdef = library.get_resource_definition(
res_def = library.get_resource_definition(
resource_id_or_name, environment_id)
if resdef.id != resource_id_or_name:
if res_def.id != resource_id_or_name:
from tuning_box.app import api
return flask.redirect(api.url_for(
ResourceValues,
environment_id=environment_id,
levels=levels,
resource_id_or_name=resdef.id,
resource_id_or_name=res_def.id,
), code=308)
level_value = levels_hierarchy.get_environment_level_value(
@ -42,7 +42,7 @@ class ResourceValues(flask_restful.Resource):
esv = db.get_or_create(
db.ResourceValues,
environment=environment,
resource_definition=resdef,
resource_definition=res_def,
level_value=level_value,
)
esv.values = flask.request.json
@ -51,15 +51,15 @@ class ResourceValues(flask_restful.Resource):
@db.with_transaction
def get(self, environment_id, resource_id_or_name, levels):
environment = db.Environment.query.get_or_404(environment_id)
resdef = library.get_resource_definition(
res_def = library.get_resource_definition(
resource_id_or_name, environment_id)
if resdef.id != resource_id_or_name:
if res_def.id != resource_id_or_name:
from tuning_box.app import api
url = api.url_for(
ResourceValues,
environment_id=environment_id,
levels=levels,
resource_id_or_name=resdef.id,
resource_id_or_name=res_def.id,
)
if flask.request.query_string:
qs = flask.request.query_string.decode('utf-8')
@ -71,7 +71,7 @@ class ResourceValues(flask_restful.Resource):
if 'effective' in flask.request.args:
resource_values = db.ResourceValues.query.filter_by(
resource_definition=resdef,
resource_definition=res_def,
environment=environment,
).all()
result = {}
@ -88,7 +88,7 @@ class ResourceValues(flask_restful.Resource):
else:
level_value = level_values[-1]
resource_values = db.ResourceValues.query.filter_by(
resource_definition=resdef,
resource_definition=res_def,
environment=environment,
level_value=level_value,
).one_or_none()

View File

@ -177,6 +177,27 @@ class TestResourceOverrides(BaseTest):
self.assertEqual({'key': 'key_over', 'key_x': 'key_x_over'},
actual)
def test_put_resource_overrides_set_no_levels(self):
self._fixture()
environment_id = 9
res_def_id = 5
values = {'key': 'val'}
self._add_resource_overrides(environment_id, res_def_id, (), values)
obj_url = '/environments/{0}/resources/{1}/overrides'.format(
environment_id, res_def_id)
obj_keys_url = obj_url + '/keys/set'
data = [['key', 'key_value'], ['key_x', 'key_x_value']]
res = self.client.put(obj_keys_url, data=data)
self.assertEqual(204, res.status_code)
res = self.client.get(obj_url)
self.assertEqual(200, res.status_code)
actual = res.json
self.assertEqual({'key': 'key_value', 'key_x': 'key_x_value'},
actual)
def test_put_resource_overrides_delete(self):
self._fixture()
environment_id = 9

View File

@ -191,6 +191,27 @@ class TestResourceValues(BaseTest):
self.assertEqual({'key': 'key_value', 'key_x': 'key_x_value'},
actual)
def test_put_resource_values_set_no_levels(self):
self._fixture()
environment_id = 9
res_def_id = 5
values = {'key': 'val'}
self._add_resource_values(environment_id, res_def_id, (), values)
obj_url = '/environments/{0}/resources/{1}/values'.format(
environment_id, res_def_id)
obj_keys_url = obj_url + '/keys/set'
data = [['key', 'key_value'], ['key_x', 'key_x_value']]
res = self.client.put(obj_keys_url, data=data)
self.assertEqual(204, res.status_code)
res = self.client.get(obj_url)
self.assertEqual(200, res.status_code)
actual = res.json
self.assertEqual({'key': 'key_value', 'key_x': 'key_x_value'},
actual)
def test_put_resource_values_delete(self):
self._fixture()
environment_id = 9

View File

@ -73,12 +73,18 @@ class BaseTest(base.TestCase):
environment.hierarchy_levels = hierarchy_levels
db.db.session.add(environment)
def _levels_to_url(self, levels):
levels_url = '/'.join(itertools.chain.from_iterable(levels))
if levels_url:
levels_url += '/'
return levels_url
def _add_resource_values(self, environment_id, res_def_id,
levels, values):
res = self.client.put(
'/environments/{0}/{1}/resources/{2}/values'.format(
'/environments/{0}/{1}resources/{2}/values'.format(
environment_id,
'/'.join(itertools.chain.from_iterable(levels)),
self._levels_to_url(levels),
res_def_id
),
data=values
@ -88,9 +94,9 @@ class BaseTest(base.TestCase):
def _add_resource_overrides(self, environment_id, res_def_id,
levels, overrides):
res = self.client.put(
'/environments/{0}/{1}/resources/{2}/overrides'.format(
'/environments/{0}/{1}resources/{2}/overrides'.format(
environment_id,
'/'.join(itertools.chain.from_iterable(levels)),
self._levels_to_url(levels),
res_def_id
),
data=overrides