def test_search_double_range_querymember_and(self): index = self._makeOne() self._populateIndex(index) index.index_doc(50, 1) from repoze.catalog import RangeValue result = index.search([RangeValue(1, 1), RangeValue(1, 2)], 'and') result = sorted(list(result)) self.assertEqual(result, [5, 50])
def test_apply_dict_operator_and_with_ranges_or(self): from repoze.catalog import RangeValue index = self._makeOne() self._populateIndex(index) index.index_doc(50, 1) result = index.apply({'query':[RangeValue(1,1), RangeValue(1,2)], 'operator':'or'}) result = sorted(list(result)) self.assertEqual(result, [2, 5, 50])
def test_apply_dict_single_range(self): from repoze.catalog import RangeValue index = self._makeOne() self._populateIndex(index) index.index_doc(50, 1) result = index.apply({'query': RangeValue(1, 2)}) result = sorted(list(result)) self.assertEqual(result, [2, 5, 50])
def apply(self, query): if isinstance(query, dict): val = query['query'] if isinstance(val, RangeValue): val = [val] elif not isinstance(val, (list, tuple)): val = [val] operator = query.get('operator', 'or') result = self.search(val, operator) else: if isinstance(query, tuple) and len(query) == 2: # b/w compat stupidity; this needs to die query = RangeValue(*query) query = [query] elif not isinstance(query, (list, tuple)): query = [query] result = self.search(query, 'or') return result