Add categories to resource links

Text rendering of OCCI includes the category of the link associated to a
resource. This helps clients to select the links based on their kinds.

Change-Id: Ibd803cb26566e40b5fc589cdea6d111eaec36e03
Closes-Bug: #1656844
This commit is contained in:
Enol Fernandez 2017-01-16 18:01:52 +00:00 committed by Enol Fernández
parent e2207d7c12
commit bb194c3e8e
4 changed files with 24 additions and 3 deletions

View File

@ -172,6 +172,10 @@ class LinkRenderer(EntityRenderer):
"self": url}
l = '<%(location)s>; rel="%(scheme)s%(term)s"; self="%(self)s"' % d
ret.append(l)
categories = [self.obj.kind.type_id]
for m in self.obj.mixins:
categories.append(m.type_id)
ret.append('category="%s"' % ' '.join(categories))
for a in self.obj.attributes:
if self.obj.attributes[a].value is None:
continue

View File

@ -151,3 +151,12 @@ class BaseRendererTest(ooi.tests.base.TestCase):
r = self.renderer.get_renderer(r1)
observed = r.render()
self.assertResourceLink(r1, r2, observed)
def test_resource_link_with_mixins(self):
r1 = resource.Resource(None, [])
r2 = resource.Resource(None, [])
r1.link(r2, [mixin.Mixin("s1", "term", "title"),
mixin.Mixin("s2", "term", "title")])
r = self.renderer.get_renderer(r1)
observed = r.render()
self.assertResourceLink(r1, r2, observed)

View File

@ -139,12 +139,18 @@ class TestOCCIHeaderRendering(base.BaseRendererTest):
self.assertEqual(rel, parsed[1])
self_ = 'self="%s"' % link.location
self.assertEqual(self_, parsed[2])
expected_cats = [link.kind.type_id]
expected_cats.extend([m.type_id for m in link.mixins])
category_field = parsed[3].split('=')
self.assertEqual('category', category_field[0])
link_cats = category_field[1][1:-1].split()
self.assertItemsEqual(expected_cats, link_cats)
source = 'occi.core.source="%s"' % obj1.location
self.assertIn(source, parsed[3:])
self.assertIn(source, parsed[4:])
target = 'occi.core.target="%s"' % obj2.location
self.assertIn(target, parsed[3:])
self.assertIn(target, parsed[4:])
id = 'occi.core.id="%s"' % link.id
self.assertIn(id, parsed[3:])
self.assertIn(id, parsed[4:])
break
else:
self.fail("One link was expected")

View File

@ -89,6 +89,8 @@ class TestOCCIJsonRendering(base.BaseRendererTest):
},
"title": obj.title,
}
if obj.mixins:
link["mixins"] = [m.type_id for m in obj.mixins]
self.assertEqual(link, json.loads(observed))
def assertMixedCollection(self, kind, resource, observed):