Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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')
Beispiel #6
0
    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)
Beispiel #7
0
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))
Beispiel #8
0
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")
Beispiel #9
0
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)
Beispiel #10
0
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)
Beispiel #11
0
 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")
Beispiel #12
0
 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)
Beispiel #13
0
    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
Beispiel #14
0
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))
Beispiel #15
0
    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)
Beispiel #16
0
    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)
Beispiel #18
0
 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)
Beispiel #19
0
    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))
Beispiel #21
0
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')
Beispiel #22
0
 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})
Beispiel #23
0
 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])
Beispiel #25
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])
Beispiel #26
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))
Beispiel #27
0
 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))
Beispiel #29
0
    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'
        ])
Beispiel #31
0
    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'
        ])
Beispiel #32
0
    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)
Beispiel #33
0
    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)
Beispiel #34
0
    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)
Beispiel #35
0
    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)
Beispiel #36
0
    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)
Beispiel #38
0
    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)
Beispiel #39
0
    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)
Beispiel #42
0
    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)
Beispiel #44
0
    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
Beispiel #45
0
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'])
Beispiel #46
0
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']
Beispiel #47
0
 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'])
Beispiel #49
0
    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
Beispiel #50
0
    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)
Beispiel #52
0
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)
Beispiel #55
0
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)
Beispiel #56
0
    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)
Beispiel #57
0
    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)