Example #1
0
 def _sort_elements(self, elements: IResultSet,
                    query: SearchQuery) -> IResultSet:
     if query.sort_by == '':
         pass
     elif query.sort_by == 'reference':
         if query.reverse:
             raise NotImplementedError()
         if query.limit:
             raise NotImplementedError()
         references = [x for x in query.references if x[0] is not None]
         if not references:  # we need at least one reference
             return elements
         reference = references[0]
         references_index = self.get_index('reference')
         elements_sorted = references_index.search_with_order(reference)
         elements = elements_sorted.intersect(elements)
     else:
         sort_index = self.get_index(query.sort_by)
         # TODO: We should assert the IIndexSort interface here, but
         # hypatia.field.FieldIndex is missing this interface.
         assert 'sort' in sort_index.__dir__()
         elements = elements.sort(sort_index,
                                  reverse=query.reverse,
                                  limit=query.limit or None)
     return elements
Example #2
0
 def _sort_elements(self, elements: IResultSet, query: SearchQuery) -> IResultSet:
     sort_index = self._get_index(query.sort_by)
     if sort_index is not None:
         # TODO: We should assert the IIndexSort interface here, but
         # hypatia.field.FieldIndex is missing this interface.
         assert "sort" in sort_index.__dir__()
         elements = elements.sort(sort_index, reverse=query.reverse, limit=query.limit or None)
     return elements
Example #3
0
 def _sort_elements(self, elements: IResultSet,
                    query: SearchQuery) -> IResultSet:
     sort_index = self.get_index(query.sort_by)
     if sort_index is not None:
         # TODO: We should assert the IIndexSort interface here, but
         # hypatia.field.FieldIndex is missing this interface.
         assert 'sort' in sort_index.__dir__()
         elements = elements.sort(sort_index,
                                  reverse=query.reverse,
                                  limit=query.limit or None)
     return elements
Example #4
0
 def _sort_elements(self, elements: IResultSet,
                    query: SearchQuery) -> IResultSet:
     if query.sort_by == '':
         pass
     elif query.sort_by == 'reference':
         if query.reverse:
             raise NotImplementedError()
         if query.limit:
             raise NotImplementedError()
         references = [x for x in query.references if x[0] is not None]
         if not references:  # we need at least one reference
             return elements
         reference = self._get_query_value(references[0])
         references_index = self.get_index('reference')
         elements_sorted = references_index.search_with_order(reference)
         elements = elements_sorted.intersect(elements)
     else:
         sort_index = self.get_index(query.sort_by)
         # TODO: We should assert the IIndexSort interface here, but
         # hypatia.field.FieldIndex is missing this interface.
         assert 'sort' in sort_index.__dir__()
         elements = elements.sort(sort_index, reverse=query.reverse)
     return elements