Beispiel #1
0
    def test_get_admin_results_superuser(self):
        with self._whoosh_settings():
            with patch('haystack.backend', haystack.load_backend(HAYSTACK_SEARCH_ENGINE_TEST)):
                testsuperuser = UserBuilder('testsuperuser', is_superuser=True).user

                # We should match all subjects, periods, assignments and groups - we are superuser
                rootnodebuilder = NodeBuilder('rootnode', 'Test Roonode')
                node1builder = rootnodebuilder\
                    .add_childnode('node1', 'Test Node One').add_admins(self.testuser)
                subject1builder = node1builder.add_subject('subject1', 'Test Subject One')
                period1builder = subject1builder.add_6month_active_period(
                    short_name='period1',
                    long_name='Test Period One')
                assignment1builder = period1builder.add_assignment('test1', long_name="Test Assignment One")
                group1builder = assignment1builder.add_group()

                self._rebuild_searchindex()
                results = SearchHelper(testsuperuser, 'Test').get_admin_results()
                self.assertEquals(set(map(lambda r: r.object, results)), set([
                    rootnodebuilder.node,
                    node1builder.node,
                    subject1builder.subject,
                    period1builder.period,
                    assignment1builder.assignment,
                    group1builder.group,
                ]))
Beispiel #2
0
 def test_load_nonexistent(self):
     try:
         backend = haystack.load_backend('foobar')
         self.fail()
     except ImproperlyConfigured, e:
         self.assertEqual(
             str(e),
             "'foobar' isn't an available search backend. Available options are: 'dummy', 'simple', 'solr', 'whoosh'"
         )
Beispiel #3
0
 def test_load_solr(self):
     try:
         import pysolr
     except ImportError:
         warnings.warn("Pysolr doesn't appear to be installed. Unable to test loading the Solr backend.")
         return
     
     backend = haystack.load_backend('solr')
     self.assertEqual(backend.BACKEND_NAME, 'solr')
Beispiel #4
0
 def test_load_whoosh(self):
     try:
         import whoosh
     except ImportError:
         warnings.warn("Whoosh doesn't appear to be installed. Unable to test loading the Whoosh backend.")
         return
     
     backend = haystack.load_backend('whoosh')
     self.assertEqual(backend.BACKEND_NAME, 'whoosh')
Beispiel #5
0
    def test_load_whoosh(self):
        try:
            import whoosh
        except ImportError:
            warnings.warn(
                "Whoosh doesn't appear to be installed. Unable to test loading the Whoosh backend."
            )
            return

        backend = haystack.load_backend('whoosh')
        self.assertEqual(backend.BACKEND_NAME, 'whoosh')
Beispiel #6
0
    def test_load_solr(self):
        try:
            import pysolr
        except ImportError:
            warnings.warn(
                "Pysolr doesn't appear to be installed. Unable to test loading the Solr backend."
            )
            return

        backend = haystack.load_backend('solr')
        self.assertEqual(backend.BACKEND_NAME, 'solr')
Beispiel #7
0
 def test_get_student_results(self):
     backend = haystack.load_backend(HAYSTACK_SEARCH_ENGINE_TEST)
     with self._whoosh_settings():
         with patch('haystack.backend', backend):
             periodbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()
             group1 = periodbuilder.add_assignment('assignment1', long_name="Assignment One")\
                 .add_group().add_students(self.testuser).group
             group2 = periodbuilder.add_assignment('assignment2', long_name="Assignment Two")\
                 .add_group().add_students(self.testuser).group
             group_not_student = periodbuilder.add_assignment('assignment3', long_name="Assignment Three")\
                 .add_group().add_students(UserBuilder('nobody').user).group
             self._rebuild_searchindex()
             results = SearchHelper(self.testuser, 'Assignment').get_student_results()
             self.assertEquals(results.count(), 2)
             self.assertEquals(set(map(lambda r: r.object, results)), set([group1, group2]))
Beispiel #8
0
 def test_get_examiner_results(self):
     with self._whoosh_settings():
         with patch('haystack.backend', haystack.load_backend(HAYSTACK_SEARCH_ENGINE_TEST)):
             periodbuilder = PeriodBuilder.quickadd_ducku_duck1010_active()
             assignment1builder = periodbuilder.add_assignment('assignment1', long_name="Assignment One")
             assignment2builder = periodbuilder.add_assignment('assignment2', long_name="Assignment Two")
             group1 = assignment1builder.add_group().add_examiners(self.testuser).group
             group2 = assignment1builder.add_group().add_examiners(self.testuser).group
             group3 = assignment2builder.add_group().add_examiners(self.testuser).group
             assignment2builder.add_group().add_examiners(UserBuilder('nobody').user) # Should not math
             self._rebuild_searchindex()
             results = SearchHelper(self.testuser, 'Assignment').get_examiner_results()
             self.assertEquals(results.count(), 5)
             self.assertEquals(set(map(lambda r: r.object, results)),
                 set([group1, group2, group3,
                     assignment1builder.assignment, assignment2builder.assignment]))
Beispiel #9
0
def tmp_result(request):
    context = {}
    simple_backend = haystack.load_backend('simple')
    query = request.GET.get('q', '')
    results = SearchQuerySet().auto_query(query)

    paginator = Paginator(results, 20)  # Show 25 contacts per page
    page = request.GET.get('page')
    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        products = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        products = paginator.page(paginator.num_pages)

    context['query'] = query
    context['page'] = products

    return render(request, 'search.html', context)
Beispiel #10
0
def tmp_result(request):
    context = {}
    simple_backend = haystack.load_backend('simple')
    query = request.GET.get('q', '')
    results = SearchQuerySet().auto_query(query)

    paginator = Paginator(results, 20) # Show 25 contacts per page
    page = request.GET.get('page')
    try:
        products = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        products = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        products = paginator.page(paginator.num_pages)

    context['query'] = query
    context['page'] = products

    return render(request, 'search.html', context)
Beispiel #11
0
    def test_get_admin_results(self):
        with self._whoosh_settings():
            with patch('haystack.backend', haystack.load_backend(HAYSTACK_SEARCH_ENGINE_TEST)):
                rootnodebuilder = NodeBuilder('rootnode', 'Test Roonode')

                # We should match all subjects, periods, assignments and groups in node1 - we are admin on the node
                node1builder = rootnodebuilder\
                    .add_childnode('node1', 'Test Node One').add_admins(self.testuser)
                subject1builder = node1builder.add_subject('subject1', 'Test Subject One')
                period1builder = subject1builder.add_6month_active_period(
                    short_name='period1',
                    long_name='Test Period One')
                assignment1builder = period1builder.add_assignment('test1', long_name="Test Assignment One")
                group1builder = assignment1builder.add_group()

                # We should only match the assignment and the group in node2 - we are only admin on assignment1
                node2builder = rootnodebuilder\
                    .add_childnode('node2', 'Test Node Two')
                assignment2builder = node2builder\
                    .add_subject('subject2', 'Test Subject Two')\
                    .add_6month_active_period(
                        short_name='period2',
                        long_name='Test Period Two')\
                    .add_assignment('test2', long_name="Test Assignment One")\
                        .add_admins(self.testuser)
                group2builder = assignment2builder.add_group()

                self._rebuild_searchindex()
                results = SearchHelper(self.testuser, 'Test').get_admin_results()
                self.assertEquals(set(map(lambda r: r.object, results)), set([
                    node1builder.node,
                    subject1builder.subject,
                    period1builder.period,
                    assignment1builder.assignment,
                    group1builder.group,
                    assignment2builder.assignment,
                    group2builder.group,
                ]))
Beispiel #12
0
 def test_load_simple(self):
     backend = haystack.load_backend('simple')
     self.assertEqual(backend.BACKEND_NAME, 'simple')
Beispiel #13
0
 def test_load_simple(self):
     backend = haystack.load_backend('simple')
     self.assertEqual(backend.BACKEND_NAME, 'simple')
Beispiel #14
0
 def test_load_dummy(self):
     backend = haystack.load_backend('dummy')
     self.assertEqual(backend.BACKEND_NAME, 'dummy')
Beispiel #15
0
 def test_load_nonexistent(self):
     try:
         backend = haystack.load_backend('foobar')
         self.fail()
     except ImproperlyConfigured, e:
         self.assertEqual(str(e), "'foobar' isn't an available search backend. Available options are: 'dummy', 'simple', 'solr', 'whoosh'")
:copyright: (c) 2010 by the Sentry Team, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
"""

import haystack
from haystack.indexes import *
from haystack.sites import SearchSite

from sentry.conf import settings
from sentry.utils import to_unicode
from sentry.models import GroupedMessage

if settings.SEARCH_ENGINE:
    # Ensure we stop here if we havent configure Sentry to work under haystack

    backend = haystack.load_backend(settings.SEARCH_ENGINE)

    class SentrySearchSite(SearchSite):
        pass

    site = SentrySearchSite()
    site.backend = backend.SearchBackend(site, **settings.SEARCH_OPTIONS)

    class GroupedMessageIndex(RealTimeSearchIndex):
        text = CharField(document=True, stored=False)
        status = IntegerField(model_attr='status', stored=False, null=True)
        level = IntegerField(model_attr='level', stored=False, null=True)
        logger = CharField(model_attr='logger', stored=False, null=True)
        server = MultiValueField(stored=False, null=True)
        url = MultiValueField(stored=False, null=True)
        site = MultiValueField(stored=False, null=True)
Beispiel #17
0
import haystack
from haystack.indexes import *
from haystack.sites import SearchSite

from sentry.conf import settings
from sentry.utils import to_unicode
from sentry.models import GroupedMessage

if settings.SEARCH_ENGINE:
    # Ensure we stop here if we havent configure Sentry to work under haystack

    backend = haystack.load_backend(settings.SEARCH_ENGINE)

    class SentrySearchSite(SearchSite): pass

    site = SentrySearchSite()
    site.backend = backend.SearchBackend(site, **settings.SEARCH_OPTIONS)

    class GroupedMessageIndex(RealTimeSearchIndex):
        text = CharField(document=True, stored=False)
        status = IntegerField(model_attr='status', stored=False, null=True)
        level = IntegerField(model_attr='level', stored=False, null=True)
        logger = CharField(model_attr='logger', stored=False, null=True)
        server = MultiValueField(stored=False, null=True)
        url = MultiValueField(stored=False, null=True)
        site = MultiValueField(stored=False, null=True)
        first_seen = DateTimeField(model_attr='first_seen', stored=False)
        last_seen = DateTimeField(model_attr='last_seen', stored=False)

        # def get_queryset(self):
        #     """Used when the entire index for model is updated."""
Beispiel #18
0
import haystack
from haystack.indexes import *
from haystack.sites import SearchSite

from sentry import conf
from sentry.helpers import to_unicode
from sentry.models import GroupedMessage

if conf.SEARCH_ENGINE:
    # Ensure we stop here if we havent configure Sentry to work under haystack

    backend = haystack.load_backend(conf.SEARCH_ENGINE)

    class SentrySearchSite(SearchSite):
        pass

    site = SentrySearchSite()
    site.backend = backend.SearchBackend(site, **conf.SEARCH_OPTIONS)

    class GroupedMessageIndex(RealTimeSearchIndex):
        text = CharField(document=True, stored=False)
        status = IntegerField(model_attr="status", stored=False, null=True)
        level = IntegerField(model_attr="level", stored=False, null=True)
        logger = CharField(model_attr="logger", stored=False, null=True)
        server = MultiValueField(stored=False, null=True)
        url = MultiValueField(stored=False, null=True)
        site = MultiValueField(stored=False, null=True)
        first_seen = DateTimeField(model_attr="first_seen", stored=False)
        last_seen = DateTimeField(model_attr="last_seen", stored=False)

        # def get_queryset(self):
Beispiel #19
0
import haystack
from haystack.indexes import *
from haystack.sites import SearchSite

from sentry import conf
from sentry.helpers import to_unicode
from sentry.models import GroupedMessage

if conf.SEARCH_ENGINE:
    # Ensure we stop here if we havent configure Sentry to work under haystack

    backend = haystack.load_backend(conf.SEARCH_ENGINE)

    class SentrySearchSite(SearchSite):
        pass

    site = SentrySearchSite()
    site.backend = backend.SearchBackend(site, **conf.SEARCH_OPTIONS)

    class GroupedMessageIndex(RealTimeSearchIndex):
        text = CharField(document=True, stored=False)
        status = IntegerField(model_attr='status', stored=False, null=True)
        level = IntegerField(model_attr='level', stored=False, null=True)
        logger = CharField(model_attr='logger', stored=False, null=True)
        server = MultiValueField(stored=False, null=True)
        url = MultiValueField(stored=False, null=True)
        site = MultiValueField(stored=False, null=True)
        first_seen = DateTimeField(model_attr='first_seen', stored=False)
        last_seen = DateTimeField(model_attr='last_seen', stored=False)

        # def get_queryset(self):
Beispiel #20
0
 def load_whoosh(self):
     backend = haystack.load_backend('whoosh')
     self.assertEqual(backend.BACKEND_NAME, 'whoosh')
Beispiel #21
0
 def load_solr(self):
     backend = haystack.load_backend('solr')
     self.assertEqual(backend.BACKEND_NAME, 'solr')
Beispiel #22
0
 def load_nonexistent(self):
     try:
         backend = haystack.load_backend('foobar')
         self.fail()
     except ImproperlyConfigured:
         pass
Beispiel #23
0
 def load_dummy(self):
     backend = haystack.load_backend('dummy')
     self.assertEqual(backend.BACKEND_NAME, 'dummy')