Skip to content

Commit

Permalink
Raise Error if multiple indexed attributes are set
Browse files Browse the repository at this point in the history
  • Loading branch information
andbag committed May 23, 2019
1 parent 7af4b5d commit b529bd2
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 30 deletions.
Expand Up @@ -21,32 +21,29 @@
types = ['Document', 'News', 'File', 'Image']
default_pages = [True, False, False, False, False, False]
subjects = list(map(lambda x: 'subject_{0}'.format(x), range(6)))
keywords = list(map(lambda x: 'keyword_{0}'.format(x), range(6)))


class TestObject(object):

def __init__(self, id, portal_type, review_state,
is_default_page=False, subject=(), keyword=()):
is_default_page=False, subject=()):
self.id = id
self.portal_type = portal_type
self.review_state = review_state
self.is_default_page = is_default_page
self.subject = subject
self.keyword = keyword

def getPhysicalPath(self):
return ['', self.id, ]

def __repr__(self):
return ('< {id}, {portal_type}, {review_state},\
{is_default_page}, {subject} , {keyword}>'.format(
{is_default_page}, {subject}>'.format(
id=self.id,
portal_type=self.portal_type,
review_state=self.review_state,
is_default_page=self.is_default_page,
subject=self.subject,
keyword=self.keyword))
subject=self.subject))


class RandomTestObject(TestObject):
Expand All @@ -63,11 +60,10 @@ def __init__(self, id):
is_default_page = default_pages[i]

subject = random.sample(subjects, random.randint(1, len(subjects)))
keyword = random.sample(keywords, random.randint(1, len(keywords)))

super(RandomTestObject, self).__init__(id, portal_type,
review_state, is_default_page,
subject, keyword)
subject)


# Pseudo ContentLayer class to support quick
Expand All @@ -92,7 +88,7 @@ def setUp(self):
KeywordIndex('subject',
extra={
'indexed_attrs':
'keyword,subject'}
'subject'}
),
CompositeIndex('comp01',
extra=[{'id': 'portal_type',
Expand All @@ -107,7 +103,7 @@ def setUp(self):
{'id': 'subject',
'meta_type': 'KeywordIndex',
'attributes':
'keyword,subject'}
'subject'}
])
]

Expand Down Expand Up @@ -206,9 +202,6 @@ def testPerformance(self):
('query02_default_two_indexes',
{'portal_type': {'query': 'Document'},
'subject': {'query': 'subject_2'}}),
('query02_default_two_indexes_zero_hits',
{'portal_type': {'query': 'Document'},
'subject': {'query': ['keyword_1', 'keyword_2']}}),
('query03_default_two_indexes',
{'portal_type': {'query': 'Document'},
'subject': {'query': ['subject_1', 'subject_3']}}),
Expand Down Expand Up @@ -340,8 +333,7 @@ def testSearch(self):
subject=('subject_1', 'subject_2'))
self.populateIndexes(3, obj)
obj = TestObject('obj_4', 'Event', 'private',
subject=('subject_1', 'subject_2'),
keyword=('keyword_1', ))
subject=('subject_1', 'subject_2'))
self.populateIndexes(4, obj)

queries = [
Expand Down Expand Up @@ -379,12 +371,6 @@ def testSearch(self):
'is_default_page': {'query': False},
'subject': {'query': ('subject_1', 'subject_2'),
'operator': 'and'}},
# query on five attributes with
{'review_state': {'not': ('pending', 'visible')},
'portal_type': {'query': ('News', 'Document')},
'is_default_page': {'query': False},
'subject': {'query': ('subject_1', )},
'keyword': {'query': ('keyword_1',)}},
]

for query in queries:
Expand Down
29 changes: 20 additions & 9 deletions src/Products/PluginIndexes/unindex.py
Expand Up @@ -109,17 +109,28 @@ def _get(o, k, default):
self.call_methods = call_methods

# allow index to index multiple attributes
ia = _get(extra, 'indexed_attrs', id)
if isinstance(ia, str):
self.indexed_attrs = ia.split(',')
self.indexed_attrs = _get(extra, 'indexed_attrs', id)
self.clear()

@property
def indexed_attrs(self):
return self._indexed_attrs

@indexed_attrs.setter
def indexed_attrs(self, value):
if isinstance(value, str):
value = value.split(',')
else:
self.indexed_attrs = list(ia)
self.indexed_attrs = [
attr.strip() for attr in self.indexed_attrs if attr]
if not self.indexed_attrs:
self.indexed_attrs = [id]
value = list(value)
value = [attr.strip() for attr in value if attr]
if not value:
value = [self.id]

self.clear()
if len(value) > 1:
raise NotImplementedError('Multiple indexed attributes'
' are not supported')

self._indexed_attrs = value

def __len__(self):
return self._length()
Expand Down

0 comments on commit b529bd2

Please sign in to comment.