like filter addition for name and type_name

default filter for name and type_name does not
allow to use like operator by default due to performance issue,
therefore we have added filters_ops for name in base_artifact
and type_name in all.py

Change-Id: Ib6c5f0d249c33f52858c03c454a0a7a0859e9301
This commit is contained in:
Kushal Agrawal 2018-03-19 16:25:31 +05:30
parent 82c5aab94f
commit 328ee48815
5 changed files with 24 additions and 4 deletions

View File

@ -29,7 +29,11 @@ class All(base.BaseArtifact):
fields = {
'type_name': Field(fields.StringField,
description="Name of artifact type.",
sortable=True),
sortable=True,
filter_ops=(wrappers.FILTER_LIKE,
wrappers.FILTER_EQ,
wrappers.FILTER_NEQ,
wrappers.FILTER_IN)),
'display_type_name': Field(fields.StringField,
description="Display name of "
"artifact type.",

View File

@ -83,7 +83,9 @@ class BaseArtifact(base.VersionedObject):
'name': Field(fields.StringField, required_on_activate=False,
nullable=False, sortable=True,
validators=[validators.MinStrLen(1)],
description="Artifact Name."),
description="Artifact Name.",
filter_ops=(wrappers.FILTER_LIKE, wrappers.FILTER_EQ,
wrappers.FILTER_NEQ, wrappers.FILTER_IN)),
'owner': Field(fields.StringField, system=True,
required_on_activate=False, nullable=False,
sortable=True, description="ID of user/tenant who "

View File

@ -82,6 +82,13 @@ class TestAll(base.TestArtifact):
for art in res:
self.assertEqual('Heat', art['display_type_name'][:4])
# search artifact using like for heat_templates and heat_environments
url = '/all?type_name=like:heat%'
res = self.get(url=url, status=200)['artifacts']
self.assertEqual(18, len(res))
for art in res:
self.assertEqual('heat', art['type_name'][:4])
# TODO(kushalagrawal): Need to Add test case for display_type_name with
# null once https://bugs.launchpad.net/glare/+bug/1741400 is resolved

View File

@ -273,6 +273,12 @@ class TestList(base.TestArtifact):
result = sort_results(self.get(url=url)['artifacts'])
self.assertEqual(art_list[5:], result)
# Like filter test cases for name, status
url = '/sample_artifact?name=like:name%'
artifacts = self.get(url=url)['artifacts']
for artifact in artifacts:
self.assertEqual("name", artifact.get("name")[:4])
def test_artifact_list_dict_filters(self):
lists_of_str = [
['aaa', 'bbb', 'ccc'],

View File

@ -69,7 +69,8 @@ fixture_base_props = {
u'type': [u'object',
u'null']},
u'name': {u'description': u'Artifact Name.',
u'filter_ops': [u'eq',
u'filter_ops': [u'like',
u'eq',
u'neq',
u'in'],
u'glareType': u'String',
@ -927,7 +928,7 @@ fixtures = {
u'name': u'all',
u'properties': generate_type_props({
u'type_name': {u'description': u'Name of artifact type.',
u'filter_ops': [u'eq', u'neq', u'in'],
u'filter_ops': [u'like', u'eq', u'neq', u'in'],
u'glareType': u'String',
u'maxLength': 255,
u'sortable': True,