def search(self, query: SearchQuery) -> SearchResult: """Search indexes in catalogs `adhocracy` and `system`.""" elements = self._search_elements(query) frequency_of = self._get_frequency_of(elements, query) group_by = self._get_group_by(elements, query) sorted_elements = self._sort_elements(elements, query) count = len(sorted_elements) elements_slice = self._get_slice(sorted_elements, query) resolved = self._resolve(elements_slice, query) result = search_result._replace(elements=resolved, count=count, group_by=group_by, frequency_of=frequency_of) return result
def test_get_omit_valid_back_references(self, inst, context, sheet_catalogs, mock_node_unique_references): from adhocracy_core.interfaces import search_result node = mock_node_unique_references node.backref = True inst.schema.children.append(node) source = testing.DummyResource() result = search_result._replace(elements=[source]) sheet_catalogs.search.return_value = result appstruct = inst.get(add_back_references=False) assert not sheet_catalogs.search.called assert appstruct['references'] == []
def test_get_back_reference(self, inst, context, sheet_catalogs, mock_node_single_reference): from adhocracy_core.interfaces import ISheet from adhocracy_core.interfaces import search_result from adhocracy_core.interfaces import Reference node = mock_node_single_reference node.backref = True inst.schema.children.append(node) source = testing.DummyResource() result = search_result._replace(elements=[source]) sheet_catalogs.search.return_value = result appstruct = inst.get() reference = Reference(None, ISheet, '', context) assert sheet_catalogs.search.call_args[0][0].references == [reference] assert appstruct['reference'] == source
def _get_reference_appstruct(self, query: SearchQuery) -> dict: if not self._catalogs: return {} # ease testing default_query = self._get_references_query({}) if query == default_query: # performance tweak target_isheet = query.interfaces children = self.context.values() elements = [x for x in children if target_isheet.providedBy(x)] result = search_result._replace(elements=elements, count=len(elements)) else: result = self._catalogs.search(query) appstruct = {'elements': result.elements, 'count': result.count, 'frequency_of': result.frequency_of, 'group_by': result.group_by, } return appstruct
def _get_reference_appstruct(self, query: SearchQuery) -> dict: if not self._catalogs: return {} # ease testing default_query = self._get_references_query({}) if query == default_query: # performance tweak target_isheet = query.interfaces children = self.context.values() elements = [x for x in children if target_isheet.providedBy(x)] result = search_result._replace(elements=elements, count=len(elements)) else: result = self._catalogs.search(query) appstruct = { 'elements': result.elements, 'count': result.count, 'frequency_of': result.frequency_of, 'group_by': result.group_by, } return appstruct
def test_get_references(self, inst, context, sheet_catalogs, mock_node_unique_references): from adhocracy_core.interfaces import ISheet from adhocracy_core.interfaces import search_result from adhocracy_core.interfaces import search_query from adhocracy_core.interfaces import Reference node = mock_node_unique_references inst.schema.children.append(node) target = testing.DummyResource() result = search_result._replace(elements=[target]) sheet_catalogs.search.return_value = result appstruct = inst.get() reference = Reference(context, ISheet, 'references', None) query = search_query._replace(references=[reference], resolve=True, sort_by='reference' ) assert sheet_catalogs.search.call_args[0][0] == query
def test_get_valid_back_references(self, inst, context, sheet_catalogs, mock_node_unique_references): from adhocracy_core.interfaces import ISheet from adhocracy_core.interfaces import search_result from adhocracy_core.interfaces import search_query from adhocracy_core.interfaces import Reference node = mock_node_unique_references node.backref = True inst.schema.children.append(node) source = testing.DummyResource() result = search_result._replace(elements=[source]) sheet_catalogs.search.return_value = result appstruct = inst.get() reference = Reference(None, ISheet, '', context) query = search_query._replace(references=[reference], resolve=True, ) sheet_catalogs.search.call_args[0] == query assert appstruct['references'] == [source]
def test_get_valid_back_references(self, inst, context, sheet_catalogs, mock_node_unique_references): from adhocracy_core.interfaces import ISheet from adhocracy_core.interfaces import search_result from adhocracy_core.interfaces import search_query from adhocracy_core.interfaces import Reference node = mock_node_unique_references node.backref = True inst.schema.children.append(node) source = testing.DummyResource() result = search_result._replace(elements=[source]) sheet_catalogs.search.return_value = result appstruct = inst.get() reference = Reference(None, ISheet, '', context) query = search_query._replace( references=[reference], resolve=True, ) sheet_catalogs.search.call_args[0] == query assert appstruct['references'] == [source]
def search_result() -> SearchResult: """Return search result.""" from adhocracy_core.interfaces import search_result return search_result._replace(elements=[])