Merge "Allow to define format for 'all' metatype" into stable/pike

This commit is contained in:
Zuul 2017-10-20 19:30:34 +00:00 committed by Gerrit Code Review
commit 304ca08c11
4 changed files with 59 additions and 0 deletions

View File

@ -16,6 +16,7 @@ from oslo_versionedobjects import fields
from glare.common import exception
from glare.objects import base
from glare.objects.meta import registry
from glare.objects.meta import wrappers
@ -48,3 +49,9 @@ class All(base.BaseArtifact):
@classmethod
def get_type_name(cls):
return "all"
def to_dict(self):
# Use specific method of artifact type to convert it to dict
values = self.obj_to_primitive()['versioned_object.data']
return registry.ArtifactRegistry.get_artifact_type(
self.type_name).format_all(values)

View File

@ -571,6 +571,14 @@ Possible values:
def post_delete_hook(cls, context, af):
pass
@classmethod
def format_all(cls, values):
"""Specify output format for 'all' artifact meta-type
:param values: dict with values that need to be formatted
"""
return values
def to_notification(self):
"""Return notification body that can be send to listeners.

View File

@ -89,3 +89,37 @@ class TestAll(base.TestArtifact):
# get is okay
new_art = self.get(url=url)
self.assertEqual(new_art['id'], art['id'])
def test_format_all(self):
# Test that we used right output formatting for each type
art1 = self.create_artifact(data={'name': 'aaa'})
# Sample artifact adds metadata that contains its name in upper case
self.assertEqual('AAA', art1['__some_meta_information__'])
# 'Image' doesn't
art2 = self.create_artifact(
data={'name': 'aaa'},
type_name='images')
self.assertEqual('aaa', art2['name'])
# fetch all artifacts
url = '/all?sort=created_at:asc'
res = self.get(url=url, status=200)['all']
self.assertEqual(2, len(res))
self.assertEqual('sample_artifact', res[0]['type_name'])
self.assertEqual('AAA', res[0]['__some_meta_information__'])
self.assertEqual('images', res[1]['type_name'])
self.assertNotIn('__some_meta_information__', res[1])
# fetch artifacts by id
url = '/all/%s' % art1['id']
res = self.get(url=url, status=200)
self.assertEqual('sample_artifact', res['type_name'])
self.assertEqual('AAA', res['__some_meta_information__'])
url = '/all/%s' % art2['id']
res = self.get(url=url, status=200)
self.assertEqual('images', res['type_name'])
self.assertNotIn('__some_meta_information__', res)

View File

@ -134,3 +134,13 @@ class SampleArtifact(base_artifact.BaseArtifact):
@classmethod
def get_type_name(cls):
return "sample_artifact"
def to_dict(self):
res = self.obj_to_primitive()['versioned_object.data']
res['__some_meta_information__'] = res['name'].upper()
return res
@classmethod
def format_all(cls, values):
values['__some_meta_information__'] = values['name'].upper()
return values