def get_queryset(self, query_args): # Create new queryset qs = SearchQuerySet() # Are we searching all models or just a specific one (depends on # parameter set in View instantiation) if self.search_model is not None: qs = qs.models(self.search_model) # Do we have a query or are we just getting all of them? if 'q' in query_args: qry = query_args['q'] ## Currently deactivated due to policy decision to allow the users ## themselves to choose the granularity and fuzzyness of the search ## # fuzzify search # qry = u'{}~'.format(qry.replace(' ', '~ ')) qs = qs.auto_query(qry) elif 'parl_id' in query_args: qs = qs.filter(parl_id=query_args['parl_id']) if 'llp_numeric' in query_args: qs = qs.filter(llps_numeric=query_args['llp_numeric']) return (qs.all(), None) # Filter by facets if query_args['facet_filters']: for facet_field in query_args['facet_filters'].keys(): # We use narrow to limit the index entries beforehand, but # need to use filter afterwards to remove partly correct results # For instance, searching for Steyr (Oberoesterreich) yielded # everyone from Oberoesterreich until filtering by it again. qs = qs.narrow(u"{}:{}".format( facet_field, qs.query.clean(query_args['facet_filters'][facet_field]) )).filter( **{facet_field: query_args['facet_filters'][facet_field]}) # Retrieve facets and facet_counts facet_counts = [] if self.facet_fields: facets = qs for facet_field in self.facet_fields: if self.facet_fields[facet_field]['type'] == 'date': facets = facets.date_facet( facet_field, start_date=datetime.date(1900, 1, 1), end_date=datetime.date(2050, 1, 1), gap_by='month') if self.facet_fields[facet_field]['type'] == 'field': facets = facets.facet(facet_field) facet_counts = facets.facet_counts() # Get results and return them if 'only_facets' in query_args: result = {} else: result = qs.all() return (result, facet_counts)
def get_queryset(self, query_args): # Create new queryset qs = SearchQuerySet() # Are we searching all models or just a specific one (depends on # parameter set in View instantiation) if self.search_model is not None: qs = qs.models(self.search_model) # Do we have a query or are we just getting all of them? if 'q' in query_args: qry = query_args['q'] # fuzzify search qry = u'{}~'.format(qry.replace(' ', '~ ')) qs = qs.auto_query(qry) elif 'parl_id' in query_args: qs = qs.filter(parl_id=query_args['parl_id']) if 'llp_numeric' in query_args: qs = qs.filter(llps_numeric=query_args['llp_numeric']) return (qs.all(), None) # Filter by facets if query_args['facet_filters']: for facet_field in query_args['facet_filters'].keys(): # We use narrow to limit the index entries beforehand, but # need to use filter afterwards to remove partly correct results # For instance, searching for Steyr (Oberoesterreich) yielded # everyone from Oberoesterreich until filtering by it again. qs = qs.narrow(u"{}:{}".format( facet_field, qs.query.clean(query_args['facet_filters'][facet_field])) ).filter( **{ facet_field: query_args['facet_filters'][facet_field]} ) # Retrieve facets and facet_counts facet_counts = [] if self.facet_fields: facets = qs for facet_field in self.facet_fields: if self.facet_fields[facet_field]['type'] == 'date': facets = facets.date_facet( facet_field, start_date=datetime.date(1900, 1, 1), end_date=datetime.date(2050, 1, 1), gap_by='month') if self.facet_fields[facet_field]['type'] == 'field': facets = facets.facet(facet_field) facet_counts = facets.facet_counts() # Get results and return them if 'only_facets' in query_args: result = {} else: result = qs.all() return (result, facet_counts)
class LiveWhooshMultiSearchQuerySetTestCase(TestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveWhooshMultiSearchQuerySetTestCase, self).setUp() # Stow. temp_path = os.path.join('tmp', 'test_whoosh_query') self.old_whoosh_path = getattr(settings, 'HAYSTACK_WHOOSH_PATH', temp_path) settings.HAYSTACK_WHOOSH_PATH = temp_path self.site = SearchSite() self.sb = SearchBackend(site=self.site) self.smmi = WhooshMockSearchIndex(MockModel, backend=self.sb) self.sammi = WhooshAnotherMockSearchIndex(AnotherMockModel, backend=self.sb) self.site.register(MockModel, WhooshMockSearchIndex) self.site.register(AnotherMockModel, WhooshAnotherMockSearchIndex) # Stow. import haystack self.old_debug = settings.DEBUG settings.DEBUG = True self.old_site = haystack.site haystack.site = self.site self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.sq = SearchQuery(backend=self.sb) self.sqs = SearchQuerySet(site=self.site) self.smmi.update() self.sammi.update() def tearDown(self): if os.path.exists(settings.HAYSTACK_WHOOSH_PATH): shutil.rmtree(settings.HAYSTACK_WHOOSH_PATH) settings.HAYSTACK_WHOOSH_PATH = self.old_whoosh_path import haystack haystack.site = self.old_site settings.DEBUG = self.old_debug super(LiveWhooshMultiSearchQuerySetTestCase, self).tearDown() def test_searchquerysets_with_models(self): sqs = self.sqs.all() self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 25) sqs = self.sqs.models(MockModel) self.assertEqual(sqs.query.build_query(), u'django_ct:core.mockmodel') self.assertEqual(len(sqs), 23) sqs = self.sqs.models(AnotherMockModel) self.assertEqual(sqs.query.build_query(), u'django_ct:core.anothermockmodel') self.assertEqual(len(sqs), 2)
def test_models(self): # Stow. old_unified_index = connections["default"]._index ui = UnifiedIndex() bmmsi = BasicMockModelSearchIndex() bammsi = BasicAnotherMockModelSearchIndex() ui.build(indexes=[bmmsi, bammsi]) connections["default"]._index = ui msqs = SearchQuerySet() sqs = msqs.all() self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 0) sqs = msqs.models(MockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1) sqs = msqs.models(MockModel, AnotherMockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 2) # This will produce a warning. ui.build(indexes=[bmmsi]) sqs = msqs.models(AnotherMockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1)
def search(self, query=None, *args, **kwargs): """ Uses haystack to query news. Returns a SearchQuerySet """ sqs = SearchQuerySet() user = kwargs.get('user', None) # check to see if there is impersonation if hasattr(user,'impersonated_user'): if isinstance(user.impersonated_user, User): user = user.impersonated_user is_an_admin = user.profile.is_superuser if query: sqs = sqs.auto_query(sqs.query.clean(query)) if user: if not is_an_admin: return [] else: sqs = sqs.all() if user: if not is_an_admin: return [] return sqs.models(self.model).order_by('-update_dt')
def test_models(self): # Stow. old_unified_index = connections['default']._index ui = UnifiedIndex() bmmsi = BasicMockModelSearchIndex() bammsi = BasicAnotherMockModelSearchIndex() ui.build(indexes=[bmmsi, bammsi]) connections['default']._index = ui msqs = SearchQuerySet() sqs = msqs.all() self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 0) sqs = msqs.models(MockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1) sqs = msqs.models(MockModel, AnotherMockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 2) # This will produce a warning. ui.build(indexes=[bmmsi]) sqs = msqs.models(AnotherMockModel) self.assertTrue(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1)
class LiveXapianSearchQuerySetTestCase(TestCase): """ SearchQuerySet specific tests """ fixtures = ['initial_data.json'] def setUp(self): super(LiveXapianSearchQuerySetTestCase, self).setUp() site = SearchSite() backend = SearchBackend(site=site) index = LiveXapianMockSearchIndex(MockModel, backend=backend) site.register(MockModel, LiveXapianMockSearchIndex) backend.update(index, MockModel.objects.all()) self.sq = SearchQuery(backend=backend) self.sqs = SearchQuerySet(query=self.sq) def test_result_class(self): # Assert that we're defaulting to ``SearchResult``. sqs = self.sqs.all() self.assertTrue(isinstance(sqs[0], SearchResult)) # Custom class. sqs = self.sqs.result_class(MockSearchResult).all() self.assertTrue(isinstance(sqs[0], MockSearchResult)) # Reset to default. sqs = self.sqs.result_class(None).all() self.assertTrue(isinstance(sqs[0], SearchResult))
def autocomplete(request): """Return autocomple JSON results""" term = request.GET.get("term", "").strip() response_data = [] if len(term): # Does not work - probably because the FLAG_PARTIAL is not set on Xapian # (trying to set it in settings.py as documented appears to have no effect) # sqs = SearchQuerySet().autocomplete(name_auto=term) # Split the search term up into little bits terms = re.split(r"\s+", term) # Build up a query based on the bits sqs = SearchQuerySet() for bit in terms: # print "Adding '%s' to the '%s' query" % (bit,term) sqs = sqs.filter_and(name_auto__startswith=sqs.query.clean(bit)) # collate the results into json for the autocomplete js for result in sqs.all()[0:10]: response_data.append({"url": result.object.get_absolute_url(), "label": result.object.name}) # send back the results as JSON return HttpResponse(simplejson.dumps(response_data), mimetype="application/json")
def get_projects_ids_searched_by_title_tags_author(search_query, filter_or=False): search_query_set = SearchQuerySet() search_query_set = search_query_set.models(Project) search_params = filter(None, search_query.split(' ')) # If no search params, then return all: if not search_params: return search_query_set.all() sq_filter = None for param in search_params: if param.startswith('-'): param = param[1:] # remove - sign search_query_set = search_query_set.exclude(title=param) search_query_set = search_query_set.exclude(tags=param) search_query_set = search_query_set.exclude(owner_name=param) else: _sq_filter = SQ(title=param) _sq_filter |= SQ(tags=param) _sq_filter |= SQ(owner_name=param) if sq_filter: if filter_or: sq_filter |= _sq_filter else: sq_filter &= _sq_filter else: sq_filter = _sq_filter # Since sq.exclude.exclude.filter_or returns wrong data, we bypass it with a single .filter in the end: if sq_filter is not None: search_query_set = search_query_set.filter(sq_filter) return search_query_set.values_list('pk', flat=True)
class LiveSearchQuerySetTestCase(HaystackBackendTestCase, TestCase): """ SearchQuerySet specific tests """ fixtures = ['base_data.json'] def get_index(self): return MockSearchIndex() def setUp(self): super(LiveSearchQuerySetTestCase, self).setUp() self.backend.update(self.index, MockModel.objects.all()) self.sq = connections['default'].get_query() self.sqs = SearchQuerySet() def test_result_class(self): # Assert that we're defaulting to ``SearchResult``. sqs = self.sqs.all() self.assertTrue(isinstance(sqs[0], SearchResult)) # Custom class. sqs = self.sqs.result_class(MockSearchResult).all() self.assertTrue(isinstance(sqs[0], MockSearchResult)) # Reset to default. sqs = self.sqs.result_class(None).all() self.assertTrue(isinstance(sqs[0], SearchResult)) def test_facet(self): self.assertEqual(len(self.sqs.facet('name').facet_counts()['fields']['name']), 3)
def create_response(self): keyword = self.request.GET.get('q', None) # 关键词为q sqs = SearchQuerySet().using("user").filter(text=keyword) print(keyword) try: if not keyword: return HttpResponse(json.dumps({ 'code': 200, 'message': '没有相关信息' }), content_type="application/json") else: # print(sqs.all().count()) content_list = [] for i in sqs.all(): set_dict = { 'user_id': str(i.object.user_id), 'user_name': i.object.user_name, 'user_account': i.object.user_account, 'user_url': add_address_profile_url(i.object.user_url), 'email': i.object.email, 'user_gender': i.object.user_gender, 'user_phone': i.object.user_phone, 'user_credit': i.object.user_credit, } # 要返回的字段 content_list.append(set_dict) result = {'code': 200, 'user': content_list} return HttpResponse(json.dumps(result, ensure_ascii=False), content_type="application/json") except: return HttpResponse(json.dumps({ 'code': 405, 'information': '执行异常' }), content_type="application/json")
class PickleSearchQuerySetTestCase(TestCase): def setUp(self): super(PickleSearchQuerySetTestCase, self).setUp() self.bsqs = SearchQuerySet(query=DummySearchQuery(backend=DummySearchBackend())) self.msqs = SearchQuerySet(query=MockSearchQuery(backend=MockSearchBackend())) self.mmsqs = SearchQuerySet(query=MockSearchQuery(backend=MixedMockSearchBackend())) # Stow. self.old_debug = settings.DEBUG settings.DEBUG = True self.old_site = haystack.site test_site = SearchSite() test_site.register(MockModel) test_site.register(CharPKMockModel) haystack.site = test_site backends.reset_search_queries() def tearDown(self): # Restore. haystack.site = self.old_site settings.DEBUG = self.old_debug super(PickleSearchQuerySetTestCase, self).tearDown() def test_pickling(self): results = self.msqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)
def search(self, query=None, *args, **kwargs): """ haystack to query corporate memberships. Returns a SearchQuerySet """ from corporate_memberships.models import CorporateMembership from perms.utils import is_admin user = kwargs.get('user', None) if user.is_anonymous(): return SearchQuerySet().models().none() is_an_admin = is_admin(user) sqs = SearchQuerySet().models(CorporateMembership) if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() if not is_an_admin: # reps__contain sqs = sqs.filter(Q(content='rep\:%s' % user.username) | Q(creator=user) | Q(owner=user)).filter(status_detail='active') return sqs
def get_box(request): long1 = float(request.GET.get('long1',0)) lat1 = float(request.GET.get('lat1',0)) long2 = float(request.GET.get('long2',0)) lat2 = float(request.GET.get('lat2',0)) bl = Point(long1, lat1) tr = Point(long2, lat2) max_dist = D(mi=20) sqs = SearchQuerySet().within('location', bl, tr) print (tr,bl) data = {'counter':0 ,'places':[]} if sqs.count()==0: return HttpResponse(content=json.dumps(data)) for elem in sqs.all(): if elem.object.long: data['counter'] += 1 place = {'long':0, 'lat':0, 'title':''} place['long'] = float(elem.object.long) place['lat'] = float(elem.object.lat) place['title'] = elem.object.name place['level'] = elem.object.level data['places'].append(place) return HttpResponse(content=json.dumps(data))
def search(self, query=None, *args, **kwargs): # """ # Uses haystack to query articles. # Returns a SearchQuerySet # """ # # update what the status detail should be instead of active # kwargs.update({'status_detail': 'published'}) # return super(MemberAppManager, self).search(query=query, *args, **kwargs) """ Use Django Haystack search index Returns a SearchQuerySet object """ sqs = SearchQuerySet() user = kwargs.get('user', AnonymousUser()) user = impersonation(user) if query: sqs = sqs.auto_query(sqs.query.clean(query)) if user.profile.is_superuser: sqs = sqs.all() # admin else: if user.is_anonymous(): sqs = anon2_sqs(sqs) # anonymous else: pass sqs = user2_sqs(sqs, user=user) # user return sqs.models(self.model)
def search(self, query=None, *args, **kwargs): """ Uses haystack to query forms. Returns a SearchQuerySet """ sqs = SearchQuerySet() user = kwargs.get('user', None) # check to see if there is impersonation if hasattr(user, 'impersonated_user'): if isinstance(user.impersonated_user, User): user = user.impersonated_user is_an_admin = user.profile.is_superuser if query: sqs = sqs.auto_query(sqs.query.clean(query)) if user: if not is_an_admin: return [] else: sqs = sqs.all() if user: if not is_an_admin: return [] return sqs.models(self.model).order_by('-create_dt')
class LiveSearchQuerySetTestCase(HaystackBackendTestCase, TestCase): """ SearchQuerySet specific tests """ fixtures = ['initial_data.json'] def get_index(self): return MockSearchIndex() def setUp(self): super(LiveSearchQuerySetTestCase, self).setUp() self.backend.update(self.index, MockModel.objects.all()) self.sq = connections['default'].get_query() self.sqs = SearchQuerySet() def test_result_class(self): # Assert that we're defaulting to ``SearchResult``. sqs = self.sqs.all() self.assertTrue(isinstance(sqs[0], SearchResult)) # Custom class. sqs = self.sqs.result_class(MockSearchResult).all() self.assertTrue(isinstance(sqs[0], MockSearchResult)) # Reset to default. sqs = self.sqs.result_class(None).all() self.assertTrue(isinstance(sqs[0], SearchResult)) def test_facet(self): self.assertEqual( len(self.sqs.facet('name').facet_counts()['fields']['name']), 3)
class PickleSearchQuerySetTestCase(TestCase): def setUp(self): super(PickleSearchQuerySetTestCase, self).setUp() self.bsqs = SearchQuerySet(query=DummySearchQuery(backend=DummySearchBackend())) self.msqs = SearchQuerySet(query=MockSearchQuery(backend=MockSearchBackend())) self.mmsqs = SearchQuerySet(query=MockSearchQuery(backend=MixedMockSearchBackend())) # Stow. self.old_debug = settings.DEBUG settings.DEBUG = True self.old_site = haystack.site test_site = SearchSite() test_site.register(MockModel) test_site.register(CharPKMockModel) haystack.site = test_site backends.reset_search_queries() def tearDown(self): # Restore. haystack.site = self.old_site settings.DEBUG = self.old_debug super(PickleSearchQuerySetTestCase, self).tearDown() def test_pickling(self): results = self.msqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)
def get_searchqueryset(self, request): query = request.GET.get('q', '') sqs = SearchQuerySet().models(PublicBody).load_all() if len(query) > 2: sqs = sqs.filter(name_auto=AutoQuery(query)) else: sqs = sqs.all() sqs = sqs.facet('jurisdiction', size=30) juris = request.GET.get('jurisdiction') if juris: sqs = sqs.filter(jurisdiction=juris) sqs = sqs.facet('classification', size=100) classification = request.GET.get('classification') if classification: sqs = sqs.filter(classification=classification) sqs = sqs.facet('categories', size=100) categories = request.GET.getlist('categories') if categories: for cat in categories: sqs = sqs.filter(categories=cat) return SearchQuerySetWrapper(sqs, PublicBody)
class LiveXapianSearchQuerySetTestCase(TestCase): """ SearchQuerySet specific tests """ fixtures = ['initial_data.json'] def setUp(self): super(LiveXapianSearchQuerySetTestCase, self).setUp() site = SearchSite() backend = SearchBackend(site=site) index = LiveXapianMockSearchIndex(MockModel, backend=backend) site.register(MockModel, LiveXapianMockSearchIndex) backend.update(index, MockModel.objects.all()) self.sq = SearchQuery(backend=backend) self.sqs = SearchQuerySet(query=self.sq) def test_result_class(self): # Assert that we're defaulting to ``SearchResult``. sqs = self.sqs.all() self.assertTrue(isinstance(sqs[0], SearchResult)) # Custom class. sqs = self.sqs.result_class(MockSearchResult).all() self.assertTrue(isinstance(sqs[0], MockSearchResult)) # Reset to default. sqs = self.sqs.result_class(None).all() self.assertTrue(isinstance(sqs[0], SearchResult))
def autocomplete(request): """Return autocomple JSON results""" term = request.GET.get('term', '').strip() response_data = [] if len(term): # Does not work - probably because the FLAG_PARTIAL is not set on Xapian # (trying to set it in settings.py as documented appears to have no effect) # sqs = SearchQuerySet().autocomplete(name_auto=term) # Split the search term up into little bits terms = re.split(r'\s+', term) # Build up a query based on the bits sqs = SearchQuerySet() for bit in terms: # print "Adding '%s' to the '%s' query" % (bit,term) sqs = sqs.filter_and(name_auto__startswith=sqs.query.clean(bit)) # collate the results into json for the autocomplete js for result in sqs.all()[0:10]: response_data.append({ 'url': result.object.get_absolute_url(), 'label': result.object.name, }) # send back the results as JSON return HttpResponse(simplejson.dumps(response_data), mimetype='application/json')
def post(self, request, *args, **kwargs): query = request.POST.get('query') if not query: return self.bad_request() sqs = SearchQuerySet() sqs = sqs.models(Tag).filter(content__exact=normalize(query)) lst = [{'value': sr.object.name, 'data': sr.object.posts.count()} for sr in sqs.all()] return JsonResponse({'status': 'success', 'query': query, 'suggestions': lst})
def post(self, request, *args, **kwargs): query = request.POST.get('query') if not query: return self.bad_request() sqs = SearchQuerySet() sqs = sqs.models(Tag).filter(content__exact=normalize(query)) lst = [{'value': sr.object.name, 'data': sr.object.posts.count()} for sr in sqs.all()] return JsonResponse({'status': 'success', 'query': query, 'suggestions': lst})
def test_query(self, mock_es): sqs = SearchQuerySet() self.assertFalse(sqs.query.has_run()) self.assertIsInstance(sqs.query, ElasticsearchMultilingualSearchQuery) all_results = sqs.all() all_results.query.backend = mock_backend() list(all_results) self.assertTrue(all_results.query.backend.search.called) self.assertEqual('*:*', all_results.query.backend.search.call_args[0][0])
def test_query(self, mock_es): sqs = SearchQuerySet() self.assertFalse(sqs.query.has_run()) self.assertIsInstance(sqs.query, ElasticsearchMultilingualSearchQuery) all_results = sqs.all() all_results.query.backend = mock_backend() list(all_results) self.assertTrue(all_results.query.backend.search.called) self.assertEqual('*:*', all_results.query.backend.search.call_args[0][0])
def test_live_query(self): engine = ElasticsearchMultilingualSearchEngine() es = engine.backend('default', **Data.connection_options) es.setup() sqs = SearchQuerySet() self.assertFalse(sqs.query.has_run()) self.assertIsInstance(sqs.query, ElasticsearchMultilingualSearchQuery) all_results = sqs.all() self.assertEqual(list(all_results), []) # execute a query self.assertTrue(isinstance(all_results, SearchQuerySet))
def get_all_validated(): """ Get all validated collection data :return: list of validated collection """ settings.ELASTIC_MIN_SCORE = 0 sqs = SearchQuerySet() results = sqs.all().models(BiologicalCollectionRecord) results = results.filter(validated=True) return results
def test_live_query(self): engine = ElasticsearchMultilingualSearchEngine() es = engine.backend('default', **Data.connection_options) es.setup() sqs = SearchQuerySet() self.assertFalse(sqs.query.has_run()) self.assertIsInstance(sqs.query, ElasticsearchMultilingualSearchQuery) all_results = sqs.all() self.assertEqual(list(all_results), []) # execute a query self.assertTrue(isinstance(all_results, SearchQuerySet))
def get_results(self): sqs = SearchQuerySet() sqs = sqs.models(MovieInCollection) sqs = sqs.filter_and(collection__exact="watched") sqs = sqs.filter_and(collection_user=self.request.user.id) sqs = sqs.order_by("-date") if (self.form.is_valid()): sqs = sqs.filter_and(content=Raw(self.form.cleaned_data['q'])) return sqs.all() return sqs.none()
def test_boost(self): sqs = SearchQuerySet() self.assertEqual(len(sqs.all()), 4) results = sqs.filter(SQ(author='daniel') | SQ(editor='daniel')) self.assertEqual([result.id for result in results], [ 'core.afourthmockmodel.1', 'core.afourthmockmodel.3', 'core.afourthmockmodel.2', 'core.afourthmockmodel.4' ])
def test_boost(self): sqs = SearchQuerySet() self.assertEqual(len(sqs.all()), 4) results = sqs.filter(SQ(author='daniel') | SQ(editor='daniel')) self.assertEqual([result.id for result in results], [ 'core.afourthmockmodel.1', 'core.afourthmockmodel.3', 'core.afourthmockmodel.2', 'core.afourthmockmodel.4' ])
def search(self, query=None, *args, **kwargs): """Recurring payment haystack search. Returns a SearchQuerySet """ from tendenci.addons.recurring_payments.models import RecurringPayment sqs = SearchQuerySet() if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() return sqs.models(RecurringPayment)
def search(self, query=None, *args, **kwargs): """Recurring payment haystack search. Returns a SearchQuerySet """ from tendenci.addons.recurring_payments.models import RecurringPayment sqs = SearchQuerySet() if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() return sqs.models(RecurringPayment)
def search(self, query=None, *args, **kwargs): """ Donations haystack to query donations. Returns a SearchQuerySet """ from sponsorships.models import Sponsorship sqs = SearchQuerySet() if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() return sqs.models(Sponsorship)
def search(self, query=None, *args, **kwargs): """ Donations haystack to query donations. Returns a SearchQuerySet """ from tendenci.apps.donations.models import Donation sqs = SearchQuerySet() if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() return sqs.models(Donation)
def search(self, query=None, *args, **kwargs): """ invoice haystack to query invoices. Returns a SearchQuerySet """ from tendenci.apps.invoices.models import Invoice sqs = SearchQuerySet() if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() return sqs.models(Invoice)
class LiveWhooshMultiSearchQuerySetTestCase(TestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveWhooshMultiSearchQuerySetTestCase, self).setUp() # Stow. temp_path = os.path.join('tmp', 'test_whoosh_query') self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH'] self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.wmmi = WhooshMockSearchIndex() self.wamsi = WhooshAnotherMockSearchIndex() self.ui.build(indexes=[self.wmmi, self.wamsi]) self.sb = connections['default'].get_backend() connections['default']._index = self.ui self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.wmmi.update() self.wamsi.update() self.sqs = SearchQuerySet() def tearDown(self): if os.path.exists(settings.HAYSTACK_CONNECTIONS['default']['PATH']): shutil.rmtree(settings.HAYSTACK_CONNECTIONS['default']['PATH']) settings.HAYSTACK_CONNECTIONS['default']['PATH'] = self.old_whoosh_path connections['default']._index = self.old_ui super(LiveWhooshMultiSearchQuerySetTestCase, self).tearDown() # We expect failure here because, despite not changing the code, Whoosh # 2.5.1 returns incorrect counts/results. Huzzah. @unittest.expectedFailure def test_searchquerysets_with_models(self): sqs = self.sqs.all() self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 25) sqs = self.sqs.models(MockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 23) sqs = self.sqs.models(AnotherMockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 2)
def search(self, query=None, *args, **kwargs): """ invoice haystack to query invoices. Returns a SearchQuerySet """ from tendenci.apps.invoices.models import Invoice sqs = SearchQuerySet() if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() return sqs.models(Invoice)
def test_boost(self): sqs = SearchQuerySet() self.assertEqual(len(sqs.all()), 4) results = sqs.filter(SQ(author="daniel") | SQ(editor="daniel")) self.assertEqual( [result.id for result in results], [ "core.afourthmockmodel.1", "core.afourthmockmodel.3", "core.afourthmockmodel.2", "core.afourthmockmodel.4", ], )
def test_boost(self): sqs = SearchQuerySet() self.assertEqual(len(sqs.all()), 4) results = sqs.filter(SQ(author="daniel") | SQ(editor="daniel")) self.assertEqual( [result.id for result in results], [ "core.afourthmockmodel.1", "core.afourthmockmodel.3", "core.afourthmockmodel.2", "core.afourthmockmodel.4", ], )
class LiveWhooshMultiSearchQuerySetTestCase(TestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveWhooshMultiSearchQuerySetTestCase, self).setUp() # Stow. self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH'] self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.wmmi = WhooshMockSearchIndex() self.wamsi = WhooshAnotherMockSearchIndex() self.ui.build(indexes=[self.wmmi, self.wamsi]) self.sb = connections['default'].get_backend() connections['default']._index = self.ui self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.wmmi.update() self.wamsi.update() self.sqs = SearchQuerySet() def tearDown(self): if os.path.exists(settings.HAYSTACK_CONNECTIONS['default']['PATH']): shutil.rmtree(settings.HAYSTACK_CONNECTIONS['default']['PATH']) settings.HAYSTACK_CONNECTIONS['default']['PATH'] = self.old_whoosh_path connections['default']._index = self.old_ui super(LiveWhooshMultiSearchQuerySetTestCase, self).tearDown() def test_searchquerysets_with_models(self): sqs = self.sqs.all() self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 25) sqs = self.sqs.models(MockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 23) sqs = self.sqs.models(AnotherMockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 2)
def search(self, query=None, *args, **kwargs): """ haystack to query corporate memberships. Returns a SearchQuerySet """ from tendenci.addons.corporate_memberships.models import CorporateMembership sqs = SearchQuerySet().models(CorporateMembership) if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() # the filter logic for the permission is handled in the search view return sqs
class LiveWhooshMultiSearchQuerySetTestCase(TestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveWhooshMultiSearchQuerySetTestCase, self).setUp() # Stow. self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['whoosh']['PATH'] self.old_ui = connections['whoosh'].get_unified_index() self.ui = UnifiedIndex() self.wmmi = WhooshMockSearchIndex() self.wamsi = WhooshAnotherMockSearchIndex() self.ui.build(indexes=[self.wmmi, self.wamsi]) self.sb = connections['whoosh'].get_backend() connections['whoosh']._index = self.ui self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.wmmi.update(using='whoosh') self.wamsi.update(using='whoosh') self.sqs = SearchQuerySet('whoosh') def tearDown(self): if os.path.exists(settings.HAYSTACK_CONNECTIONS['whoosh']['PATH']): shutil.rmtree(settings.HAYSTACK_CONNECTIONS['whoosh']['PATH']) settings.HAYSTACK_CONNECTIONS['whoosh']['PATH'] = self.old_whoosh_path connections['whoosh']._index = self.old_ui super(LiveWhooshMultiSearchQuerySetTestCase, self).tearDown() def test_searchquerysets_with_models(self): sqs = self.sqs.all() self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 25) sqs = self.sqs.models(MockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 23) sqs = self.sqs.models(AnotherMockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 2)
def search(self, query=None, *args, **kwargs): """ haystack to query corporate memberships. Returns a SearchQuerySet """ from tendenci.addons.corporate_memberships.models import CorporateMembership sqs = SearchQuerySet().models(CorporateMembership) if query: sqs = sqs.filter(content=sqs.query.clean(query)) else: sqs = sqs.all() # the filter logic for the permission is handled in the search view return sqs
class SearchForm(forms.Form): text_contains = forms.CharField(required=False, label='Keywords') def __init__(self, *args, **kwargs): self.searchqueryset = kwargs.pop('searchqueryset', None) self.load_all = kwargs.pop('load_all', False) if self.searchqueryset is None: self.searchqueryset = SearchQuerySet() #.models(models.Summary) super(SearchForm, self).__init__(*args, **kwargs) def no_query_found(self): """ Determines the behavior when no query was found. By default, no results are returned (``EmptySearchQuerySet``). Should you want to show all results, override this method in your own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``. """ print(1) return self.searchqueryset.all() def search(self): if not self.is_valid(): return self.no_query_found() if not self.cleaned_data.get('text_contains'): return self.no_query_found() sqs = self.searchqueryset.auto_query( self.cleaned_data['text_contains']) if self.load_all: sqs = sqs.load_all() return sqs def get_suggestion(self): if not self.is_valid(): return None return self.searchqueryset.spelling_suggestion( self.cleaned_data['text_contains'])
def test_searchengine_site_results(kclient): ''' Tests that search results returns only sites owned by current user's account bind ''' search_query = SearchQuerySet().filter(django_ct='campaign.site') assert len(search_query.all()) == len(Site.objects.all()) res = kclient.post('/accounts/login/', users[0]) assert res.status_code == 302 res = kclient.get('/api/site/') data = json.loads(res.content) sites = data['objects'] assert len(sites) == 4 for site in sites: obj = Site.objects.get(id=site['id']) assert obj.owner.name == accounts[0]['name']
def test_models(self): mock_index_site = SearchSite() mock_index_site.register(MockModel) mock_index_site.register(AnotherMockModel) bsqs = SearchQuerySet(site=mock_index_site) sqs = bsqs.all() self.assert_(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 0) sqs = bsqs.models(MockModel) self.assert_(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 1) sqs = bsqs.models(MockModel, AnotherMockModel) self.assert_(isinstance(sqs, SearchQuerySet)) self.assertEqual(len(sqs.query.models), 2)
class SearchForm1(SearchForm): def __init__(self, *args, **kwargs): self.searchqueryset = kwargs.pop('searchqueryset', None) self.load_all = kwargs.pop('load_all', False) if self.searchqueryset is None: self.searchqueryset = SearchQuerySet().models( ProjectPoProjects_bin) super(SearchForm, self).__init__(*args, **kwargs) def no_query_found(self): """ Determines the behavior when no query was found. By default, no results are returned (``EmptySearchQuerySet``). Should you want to show all results, override this method in your own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``. """ return EmptySearchQuerySet() def search(self, project): if not self.is_valid(): return self.no_query_found() if self.cleaned_data['start_pay_period'] and self.cleaned_data[ 'end_period']: str_start_date = self.cleaned_data['start_pay_period'] str_end_date = self.cleaned_data['end_period'] #singles if project: sqs = self.searchqueryset.filter(project_name=project) return sqs def no_query_found(self): return self.searchqueryset.all() def get_suggestion(self): if not self.is_valid(): return None return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
def get_queryset(self): qs = None if not self.q: qs = Debater.objects if self.q: qs = SearchQuerySet().models(Debater).filter(content=self.q) qs = [q.pk for q in qs.all()] qs = Debater.objects.filter(id__in=qs) qs = qs.order_by('-pk') school = self.forwarded.get('school', None) if school: qs = qs.filter(school__id=school) return qs
class LiveSolrPickleTestCase(TestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveSolrPickleTestCase, self).setUp() # Wipe it clean. clear_solr_index() # With the models registered, you get the proper bits. import haystack from haystack.sites import SearchSite # Stow. self.old_site = haystack.site test_site = SearchSite() test_site.register(MockModel, SolrMockModelSearchIndex) test_site.register(AnotherMockModel, SolrAnotherMockModelSearchIndex) haystack.site = test_site self.sqs = SearchQuerySet() test_site.get_index(MockModel).update() test_site.get_index(AnotherMockModel).update() def tearDown(self): # Restore. import haystack haystack.site = self.old_site super(LiveSolrPickleTestCase, self).tearDown() def test_pickling(self): results = self.sqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)
class LiveSolrPickleTestCase(TestCase): fixtures = ["bulk_data.json"] def setUp(self): super(LiveSolrPickleTestCase, self).setUp() # Wipe it clean. clear_solr_index() # With the models registered, you get the proper bits. import haystack from haystack.sites import SearchSite # Stow. self.old_site = haystack.site test_site = SearchSite() test_site.register(MockModel, SolrMockModelSearchIndex) test_site.register(AnotherMockModel, SolrAnotherMockModelSearchIndex) haystack.site = test_site self.sqs = SearchQuerySet() test_site.get_index(MockModel).update() test_site.get_index(AnotherMockModel).update() def tearDown(self): # Restore. import haystack haystack.site = self.old_site super(LiveSolrPickleTestCase, self).tearDown() def test_pickling(self): results = self.sqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)
class LiveWhooshMultiSearchQuerySetTestCase(WhooshTestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveWhooshMultiSearchQuerySetTestCase, self).setUp() # Stow. self.old_ui = connections['whoosh'].get_unified_index() self.ui = UnifiedIndex() self.wmmi = WhooshMockSearchIndex() self.wamsi = WhooshAnotherMockSearchIndex() self.ui.build(indexes=[self.wmmi, self.wamsi]) self.sb = connections['whoosh'].get_backend() connections['whoosh']._index = self.ui self.sb.setup() self.raw_whoosh = self.sb.index self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema) self.sb.delete_index() self.wmmi.update(using='whoosh') self.wamsi.update(using='whoosh') self.sqs = SearchQuerySet('whoosh') def tearDown(self): connections['whoosh']._index = self.old_ui super(LiveWhooshMultiSearchQuerySetTestCase, self).tearDown() def test_searchquerysets_with_models(self): sqs = self.sqs.all() self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 25) sqs = self.sqs.models(MockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 23) sqs = self.sqs.models(AnotherMockModel) self.assertEqual(sqs.query.build_query(), u'*') self.assertEqual(len(sqs), 2)
class SearchForm1(SearchForm): def __init__(self, *args, **kwargs): self.searchqueryset = kwargs.pop('searchqueryset', None) self.load_all = kwargs.pop('load_all', False) if self.searchqueryset is None: self.searchqueryset = SearchQuerySet().models(ProjectPoProjects_bin) super(SearchForm, self).__init__(*args, **kwargs) def no_query_found(self): """ Determines the behavior when no query was found. By default, no results are returned (``EmptySearchQuerySet``). Should you want to show all results, override this method in your own ``SearchForm`` subclass and do ``return self.searchqueryset.all()``. """ return EmptySearchQuerySet() def search(self,project): if not self.is_valid(): return self.no_query_found() if self.cleaned_data['start_pay_period'] and self.cleaned_data['end_period']: str_start_date=self.cleaned_data['start_pay_period'] str_end_date=self.cleaned_data['end_period'] #singles if project: sqs = self.searchqueryset.filter(project_name=project) return sqs def no_query_found(self): return self.searchqueryset.all() def get_suggestion(self): if not self.is_valid(): return None return self.searchqueryset.spelling_suggestion(self.cleaned_data['q'])
class PickleSearchQuerySetTestCase(TestCase): def setUp(self): super(PickleSearchQuerySetTestCase, self).setUp() # Stow. self.old_unified_index = connections['default']._index self.ui = UnifiedIndex() self.bmmsi = BasicMockModelSearchIndex() self.cpkmmsi = CharPKMockModelSearchIndex() self.ui.build(indexes=[self.bmmsi, self.cpkmmsi]) connections['default']._index = self.ui # Update the "index". backend = connections['default'].get_backend() backend.clear() backend.update(self.bmmsi, MockModel.objects.all()) self.msqs = SearchQuerySet() # Stow. self.old_debug = settings.DEBUG settings.DEBUG = True reset_search_queries() def tearDown(self): # Restore. connections['default']._index = self.old_unified_index settings.DEBUG = self.old_debug super(PickleSearchQuerySetTestCase, self).tearDown() def test_pickling(self): results = self.msqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)
def get_searched_projects_ids(search_query, filter_or=False, search_in_lesson=False): search_query_set = SearchQuerySet() search_query_set = search_query_set.models(Project) search_params = filter(None, search_query.split(' ')) # If no search params, then return all: if not search_params: return search_query_set.all() sq_filter = None for param in search_params: if param.startswith('-'): search_query_set = search_query_set.exclude(content=param[1:]) else: _sq_filter = SQ(content__startswith=param) if sq_filter: if filter_or: sq_filter |= _sq_filter else: sq_filter &= _sq_filter else: sq_filter = _sq_filter # If search_in_lesson, then include the results from lesson index: if search_in_lesson: lesson_projects_ids = get_projects_ids_searched_by_lesson_titles(search_query) _sq_filter = SQ(id__in=lesson_projects_ids) if sq_filter: if filter_or: sq_filter |= _sq_filter else: sq_filter &= _sq_filter else: sq_filter = _sq_filter # Since sq.exclude.exclude.filter_or returns wrong data, we bypass it with a single .filter in the end: if sq_filter is not None: search_query_set = search_query_set.filter(sq_filter) return search_query_set.values_list('pk', flat=True)
class PickleSearchQuerySetTestCase(TestCase): def setUp(self): super(PickleSearchQuerySetTestCase, self).setUp() # Stow. self.old_unified_index = connections['default']._index self.ui = UnifiedIndex() self.bmmsi = BasicMockModelSearchIndex() self.cpkmmsi = CharPKMockModelSearchIndex() self.ui.build(indexes=[self.bmmsi, self.cpkmmsi]) connections['default']._index = self.ui # Update the "index". backend = connections['default'].get_backend() backend.clear() backend.update(self.bmmsi, MockModel.objects.all()) self.msqs = SearchQuerySet() # Stow. self.old_debug = settings.DEBUG settings.DEBUG = True reset_search_queries() def tearDown(self): # Restore. connections['default']._index = self.old_unified_index settings.DEBUG = self.old_debug super(PickleSearchQuerySetTestCase, self).tearDown() def test_pickling(self): results = self.msqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)
def search(self, query=None, *args, **kwargs): """ Use Django Haystack search index Returns a SearchQuerySet object """ sqs = SearchQuerySet() user = kwargs.get('user', AnonymousUser()) user = impersonation(user) if query: sqs = sqs.auto_query(sqs.query.clean(query)) if is_admin(user): sqs = sqs.all() # admin else: if user.is_anonymous(): sqs = anon_sqs(sqs) # anonymous else: sqs = user_sqs(sqs, user=user) # user return sqs.models(self.model)
class LiveSolrPickleTestCase(TestCase): fixtures = ['bulk_data.json'] def setUp(self): super(LiveSolrPickleTestCase, self).setUp() # Wipe it clean. clear_solr_index() # Stow. self.old_ui = connections['default'].get_unified_index() self.ui = UnifiedIndex() self.smmi = SolrMockModelSearchIndex() self.sammi = SolrAnotherMockModelSearchIndex() self.ui.build(indexes=[self.smmi, self.sammi]) connections['default']._index = self.ui self.sqs = SearchQuerySet() self.smmi.update() self.sammi.update() def tearDown(self): # Restore. connections['default']._index = self.old_ui super(LiveSolrPickleTestCase, self).tearDown() def test_pickling(self): results = self.sqs.all() for res in results: # Make sure the cache is full. pass in_a_pickle = pickle.dumps(results) like_a_cuke = pickle.loads(in_a_pickle) self.assertEqual(len(like_a_cuke), len(results)) self.assertEqual(like_a_cuke[0].id, results[0].id)