Merge "Allow to define format for 'all' metatype" into stable/pike
This commit is contained in:
commit
304ca08c11
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue