Exemplo n.º 1
0
 def setUp(self):
     self.old_ui = connections['default'].get_unified_index()
     self.ui = UnifiedIndex()
     self.index = self.get_index()
     self.ui.build(indexes=[self.index])
     self.backend = connections['default'].get_backend()
     connections['default']._index = self.ui
Exemplo n.º 2
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)
    def setUp(self):
        super(AlteredInternalNamesTestCase, self).setUp()

        self.old_ui = connections['default'].get_unified_index()
        ui = UnifiedIndex()
        ui.build(indexes=[MockModelSearchIndex()])
        connections['default']._index = ui
Exemplo n.º 4
0
    def setUp(self):
        super(SolrSearchBackendTestCase, self).setUp()

        # Wipe it clean.
        self.raw_solr = pysolr.Solr(
            settings.HAYSTACK_CONNECTIONS['default']['URL'])
        clear_solr_index()

        # Stow.
        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.smmi = SolrMockSearchIndex()
        self.smtmmi = SolrMaintainTypeMockSearchIndex()
        self.ui.build(indexes=[self.smmi])
        connections['default']._index = self.ui
        self.sb = connections['default'].get_backend()

        self.sample_objs = []

        for i in xrange(1, 4):
            mock = MockModel()
            mock.id = i
            mock.author = 'daniel%s' % i
            mock.pub_date = datetime.date(2009, 2,
                                          25) - datetime.timedelta(days=i)
            self.sample_objs.append(mock)
Exemplo n.º 5
0
    def setUp(self):
        super(LiveWhooshRoundTripTestCase, self).setUp()

        # Stow.
        temp_path = os.path.join('tmp', 'test_whoosh_query')
        self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH']
        settings.HAYSTACK_CONNECTIONS['default']['PATH'] = temp_path

        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wrtsi = WhooshRoundTripSearchIndex()
        self.ui.build(indexes=[self.wrtsi])
        self.sb = connections['default'].get_backend()
        connections['default']._index = self.ui

        self.old_debug = settings.DEBUG
        settings.DEBUG = True

        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.sqs = SearchQuerySet()

        # Wipe it clean.
        self.sqs.query.backend.clear()

        # Fake indexing.
        mock = MockModel()
        mock.id = 1
        self.sb.update(self.wrtsi, [mock])
Exemplo n.º 6
0
    def setUp(self):
        super(LiveWhooshSearchQueryTestCase, self).setUp()

        # Stow.
        temp_path = os.path.join('tmp', 'test_whoosh_query')
        self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH']
        settings.HAYSTACK_CONNECTIONS['default']['PATH'] = temp_path

        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wmmi = WhooshMockSearchIndex()
        self.wmtmmi = WhooshMaintainTypeMockSearchIndex()
        self.ui.build(indexes=[self.wmmi])
        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.sample_objs = []

        for i in xrange(1, 4):
            mock = MockModel()
            mock.id = i
            mock.author = 'daniel%s' % i
            mock.pub_date = date(2009, 2, 25) - timedelta(days=i)
            self.sample_objs.append(mock)

        self.sq = connections['default'].get_query()
Exemplo n.º 7
0
    def setUp(self):
        super().setUp()

        # Stow.
        self.old_whoosh_storage = settings.HAYSTACK_CONNECTIONS["whoosh"].get(
            "STORAGE", "file"
        )
        settings.HAYSTACK_CONNECTIONS["whoosh"]["STORAGE"] = "ram"

        self.old_ui = connections["whoosh"].get_unified_index()
        self.ui = UnifiedIndex()
        self.wrtsi = WhooshRoundTripSearchIndex()
        self.ui.build(indexes=[self.wrtsi])
        self.sb = connections["whoosh"].get_backend()
        connections["whoosh"]._index = self.ui

        # Stow.
        import haystack

        self.sb.setup()
        self.raw_whoosh = self.sb.index
        self.parser = QueryParser(self.sb.content_field_name, schema=self.sb.schema)

        self.sqs = SearchQuerySet("whoosh")

        # Wipe it clean.
        self.sqs.query.backend.clear()

        # Fake indexing.
        mock = MockModel()
        mock.id = 1
        self.sb.update(self.wrtsi, [mock])
    def setUp(self):
        super(LiveWhooshSearchQuerySetTestCase, self).setUp()

        # Stow.
        self.old_ui = connections['whoosh'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wmmi = WhooshMockSearchIndex()
        self.ui.build(indexes=[self.wmmi])
        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.sample_objs = []

        for i in range(1, 4):
            mock = MockModel()
            mock.id = i
            mock.author = 'daniel%s' % i
            mock.pub_date = date(2009, 2, 25) - timedelta(days=i)
            self.sample_objs.append(mock)

        self.sq = connections['whoosh'].get_query()
        self.sqs = SearchQuerySet('whoosh')
def sync(alias, only_model=None):
    engine = get_engine_from_db_alias(alias)

    if engine != "django_cassandra_engine":
        raise CommandError("Database {} is not cassandra!".format(alias))

    connection = connections[alias]
    connection.connect()
    keyspace = connection.settings_dict["NAME"]

    _logger.info("Creating indexes in {} [CONNECTION {}] ..".format(keyspace, alias))

    connection.connection.cluster.refresh_schema_metadata()
    connection.connection.cluster.schema_metadata_enabled = True

    indexes_by_model = UnifiedIndex().get_indexes()

    for app_name, app_models in connection.introspection.cql_models.items():
        for model in app_models:
            # If the app model is registered as a SearchIndex
            if model in indexes_by_model:
                model_name = "{0}.{1}".format(model.__module__, model.__name__)
                if not only_model or model_name == only_model:
                    _logger.info("Creating index %s.%s".format(app_name, model.__name__))
                    _logger.info(
                        "Index class associated to te model {0}.{1}".format(
                            app_name, indexes_by_model.get(model).__class__.__name__
                        )
                    )
                    create_index(model, indexes_by_model.get(model))
Exemplo n.º 10
0
    def get_context_data(self, *, object_list=None, **kwargs):
        queryset = object_list if object_list is not None else self.object_list
        indexed_models = UnifiedIndex().get_indexed_models()
        allowed_object_ids = get_allowed_object_ids(self.request, indexed_models)
        queryset = queryset.filter(id__in=allowed_object_ids)

        return super().get_context_data(object_list=queryset, **kwargs)
Exemplo n.º 11
0
    def setUp(self):
        super(XapianBoostBackendTestCase, self).setUp()

        # Stow.
        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.index = XapianBoostMockSearchIndex()
        self.ui.build(indexes=[self.index])
        self.sb = connections['default'].get_backend()
        connections['default']._index = self.ui

        self.sample_objs = []

        for i in xrange(1, 5):
            mock = AFourthMockModel()
            mock.id = i
            if i % 2:
                mock.author = 'daniel'
                mock.editor = 'david'
            else:
                mock.author = 'david'
                mock.editor = 'daniel'
            mock.pub_date = datetime.date(2009, 2,
                                          25) - datetime.timedelta(days=i)
            self.sample_objs.append(mock)
Exemplo n.º 12
0
    def setUp(self):
        super(XapianSearchBackendTestCase, self).setUp()

        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.index = XapianMockSearchIndex()
        self.ui.build(indexes=[self.index])
        self.backend = connections['default'].get_backend()
        connections['default']._index = self.ui

        self.sample_objs = []

        for i in xrange(1, 4):
            mock = XapianMockModel()
            mock.id = i
            mock.author = 'david%s' % i
            mock.pub_date = datetime.date(2009, 2,
                                          25) - datetime.timedelta(days=i)
            mock.exp_date = datetime.date(2009, 2,
                                          23) + datetime.timedelta(days=i)
            mock.value = i * 5
            mock.flag = bool(i % 2)
            mock.slug = 'http://example.com/%d/' % i
            mock.url = 'http://example.com/%d/' % i
            self.sample_objs.append(mock)

        self.sample_objs[0].popularity = 834.0
        self.sample_objs[1].popularity = 35.5
        self.sample_objs[2].popularity = 972.0
Exemplo n.º 13
0
    def test_load_all_read_queryset(self):
        # Stow.
        old_ui = connections['default']._index
        ui = UnifiedIndex()
        gafmmsi = GhettoAFifthMockModelSearchIndex()
        ui.build(indexes=[gafmmsi])
        connections['default']._index = ui
        gafmmsi.update()

        sqs = SearchQuerySet()
        results = sqs.load_all().all()
        results.query.backend = ReadQuerySetMockSearchBackend('default')
        results._fill_cache(0, 2)

        # The deleted result isn't returned
        self.assertEqual(len([result for result in results._result_cache if result is not None]), 1)

        # Register a SearchIndex with a read_queryset that returns deleted items
        rqstsi = TextReadQuerySetTestSearchIndex()
        ui.build(indexes=[rqstsi])
        rqstsi.update()

        sqs = SearchQuerySet()
        results = sqs.load_all().all()
        results.query.backend = ReadQuerySetMockSearchBackend('default')
        results._fill_cache(0, 2)

        # Both the deleted and not deleted items are returned
        self.assertEqual(len([result for result in results._result_cache if result is not None]), 2)

        # Restore.
        connections['default']._index = old_ui
    def test_build_schema(self):

        # Stow.
        oldhdf = constants.DOCUMENT_FIELD
        oldui = connections['solr'].get_unified_index()
        oldurl = settings.HAYSTACK_CONNECTIONS['solr']['URL']

        needle = 'Th3S3cr3tK3y'
        constants.DOCUMENT_FIELD = needle  # Force index to use new key for document_fields
        settings.HAYSTACK_CONNECTIONS['solr'][
            'URL'] = settings.HAYSTACK_CONNECTIONS['solr']['URL'].rsplit(
                '/', 1)[0] + '/mgmnt'

        ui = UnifiedIndex()
        ui.build(indexes=[SolrMockSecretKeySearchIndex()])
        connections['solr']._index = ui

        rendered_file = StringIO()

        script_dir = os.path.realpath(os.path.dirname(__file__))
        conf_dir = os.path.join(script_dir, 'server', 'solr', 'server', 'solr',
                                'mgmnt', 'conf')
        schema_file = os.path.join(conf_dir, 'schema.xml')
        solrconfig_file = os.path.join(conf_dir, 'solrconfig.xml')

        self.assertTrue(os.path.isdir(conf_dir),
                        msg='Expected %s to be a directory' % conf_dir)

        call_command('build_solr_schema', using='solr', stdout=rendered_file)
        contents = rendered_file.getvalue()
        self.assertGreater(contents.find("name=\"%s" % needle), -1)

        call_command('build_solr_schema',
                     using='solr',
                     configure_directory=conf_dir)
        with open(schema_file) as s:
            self.assertGreater(s.read().find("name=\"%s" % needle), -1)
        with open(solrconfig_file) as s:
            self.assertGreater(s.read().find("name=\"df\">%s" % needle), -1)

        self.assertTrue(
            os.path.isfile(os.path.join(conf_dir, 'managed-schema.old')))

        call_command('build_solr_schema', using='solr', reload_core=True)

        os.rename(schema_file, '%s.bak' % schema_file)
        self.assertRaises(CommandError,
                          call_command,
                          'build_solr_schema',
                          using='solr',
                          reload_core=True)

        call_command('build_solr_schema', using='solr', filename=schema_file)
        with open(schema_file) as s:
            self.assertGreater(s.read().find("name=\"%s" % needle), -1)

        # reset
        constants.DOCUMENT_FIELD = oldhdf
        connections['solr']._index = oldui
        settings.HAYSTACK_CONNECTIONS['solr']['URL'] = oldurl
Exemplo n.º 15
0
    def test_build_schema(self):
        ui = UnifiedIndex()
        ui.build(indexes=[AllTypesWhooshMockSearchIndex()])

        (content_field_name, schema) = self.sb.build_schema(ui.all_searchfields())
        self.assertEqual(content_field_name, "text")

        schema_names = set(schema.names())
        required_schema = {
            "django_ct",
            "django_id",
            "id",
            "is_active",
            "name",
            "pub_date",
            "seen_count",
            "sites",
            "text",
        }
        self.assertTrue(required_schema.issubset(schema_names))

        self.assertIsInstance(schema._fields["text"], TEXT)
        self.assertIsInstance(schema._fields["pub_date"], DATETIME)
        self.assertIsInstance(schema._fields["seen_count"], NUMERIC)
        self.assertIsInstance(schema._fields["sites"], KEYWORD)
        self.assertIsInstance(schema._fields["is_active"], BOOLEAN)
    def setUp(self):
        super(WhooshBoostBackendTestCase, self).setUp()

        self.old_ui = connections['whoosh'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wmmi = WhooshBoostMockSearchIndex()
        self.ui.build(indexes=[self.wmmi])
        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.sample_objs = []

        for i in range(1, 5):
            mock = AFourthMockModel()
            mock.id = i

            if i % 2:
                mock.author = 'daniel'
                mock.editor = 'david'
            else:
                mock.author = 'david'
                mock.editor = 'daniel'

            mock.pub_date = date(2009, 2, 25) - timedelta(days=i)
            self.sample_objs.append(mock)
Exemplo n.º 17
0
    def setUp(self):
        super(ElasticsearchBoostBackendTestCase, self).setUp()

        # Wipe it clean.
        self.raw_es = pyelasticsearch.ElasticSearch(settings.HAYSTACK_CONNECTIONS['default']['URL'])
        clear_elasticsearch_index()

        # Stow.
        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.smmi = ElasticsearchBoostMockSearchIndex()
        self.ui.build(indexes=[self.smmi])
        connections['default']._index = self.ui
        self.sb = connections['default'].get_backend()

        self.sample_objs = []

        for i in xrange(1, 5):
            mock = AFourthMockModel()
            mock.id = i

            if i % 2:
                mock.author = 'daniel'
                mock.editor = 'david'
            else:
                mock.author = 'david'
                mock.editor = 'daniel'

            mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i)
            self.sample_objs.append(mock)
Exemplo n.º 18
0
    def setUp(self):
        super(LiveWhooshAutocompleteTestCase, self).setUp()

        # Stow.
        temp_path = os.path.join('tmp', 'test_whoosh_query')
        self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH']
        settings.HAYSTACK_CONNECTIONS['default']['PATH'] = temp_path

        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wacsi = WhooshAutocompleteMockModelSearchIndex()
        self.ui.build(indexes=[self.wacsi])
        self.sb = connections['default'].get_backend()
        connections['default']._index = self.ui

        # Stow.
        import haystack
        self.old_debug = settings.DEBUG
        settings.DEBUG = True

        self.sb.setup()
        self.sqs = SearchQuerySet()

        # Wipe it clean.
        self.sqs.query.backend.clear()

        for mock in MockModel.objects.all():
            self.wacsi.update_object(mock)
Exemplo n.º 19
0
    def setUp(self):
        super(ElasticsearchSearchBackendTestCase, self).setUp()

        # Wipe it clean.
        self.raw_es = pyelasticsearch.ElasticSearch(settings.HAYSTACK_CONNECTIONS['default']['URL'])
        clear_elasticsearch_index()

        # Stow.
        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.smmi = ElasticsearchMockSearchIndex()
        self.smtmmi = ElasticsearchMaintainTypeMockSearchIndex()
        self.ui.build(indexes=[self.smmi])
        connections['default']._index = self.ui
        self.sb = connections['default'].get_backend()

        # Force the backend to rebuild the mapping each time.
        self.sb.existing_mapping = {}
        self.sb.setup()

        self.sample_objs = []

        for i in xrange(1, 4):
            mock = MockModel()
            mock.id = i
            mock.author = 'daniel%s' % i
            mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i)
            self.sample_objs.append(mock)
Exemplo n.º 20
0
    def setUp(self):
        super(LiveWhooshRamStorageTestCase, self).setUp()

        # Stow.
        self.old_whoosh_storage = settings.HAYSTACK_CONNECTIONS['default'].get(
            'STORAGE', 'file')
        settings.HAYSTACK_CONNECTIONS['default']['STORAGE'] = 'ram'

        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wrtsi = WhooshRoundTripSearchIndex()
        self.ui.build(indexes=[self.wrtsi])
        self.sb = connections['default'].get_backend()
        connections['default']._index = self.ui

        # Stow.
        import haystack
        self.old_debug = settings.DEBUG
        settings.DEBUG = True

        self.sb.setup()
        self.raw_whoosh = self.sb.index
        self.parser = QueryParser(self.sb.content_field_name,
                                  schema=self.sb.schema)

        self.sqs = SearchQuerySet()

        # Wipe it clean.
        self.sqs.query.backend.clear()

        # Fake indexing.
        mock = MockModel()
        mock.id = 1
        self.sb.update(self.wrtsi, [mock])
Exemplo n.º 21
0
    def test_build_schema(self):
        old_ui = connections['default'].get_unified_index()

        (content_field_name, mapping) = self.sb.build_schema(old_ui.all_searchfields())
        self.assertEqual(content_field_name, 'text')
        self.assertEqual(len(mapping), 4)
        self.assertEqual(mapping, {
            'text': {'index': 'analyzed', 'term_vector': 'with_positions_offsets', 'type': 'string', 'analyzer': 'snowball', 'boost': 1.0, 'store': 'yes'},
            'pub_date': {'index': 'analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'date'},
            'name': {'index': 'analyzed', 'term_vector': 'with_positions_offsets', 'type': 'string', 'analyzer': 'snowball', 'boost': 1.0, 'store': 'yes'},
            'name_exact': {'index': 'not_analyzed', 'term_vector': 'with_positions_offsets', 'boost': 1.0, 'store': 'yes', 'type': 'string'}
        })

        ui = UnifiedIndex()
        ui.build(indexes=[ElasticsearchComplexFacetsMockSearchIndex()])
        (content_field_name, mapping) = self.sb.build_schema(ui.all_searchfields())
        self.assertEqual(content_field_name, 'text')
        self.assertEqual(len(mapping), 15)
        self.assertEqual(mapping, {
            'name': {'index': 'analyzed', 'term_vector': 'with_positions_offsets', 'type': 'string', 'analyzer': 'snowball', 'boost': 1.0, 'store': 'yes'},
            'is_active_exact': {'index': 'not_analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'boolean'},
            'created': {'index': 'analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'date'},
            'post_count': {'index': 'analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'long'},
            'created_exact': {'index': 'not_analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'date'},
            'sites_exact': {'index': 'not_analyzed', 'term_vector': 'with_positions_offsets', 'boost': 1.0, 'store': 'yes', 'type': 'string'},
            'is_active': {'index': 'analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'boolean'},
            'sites': {'index': 'analyzed', 'term_vector': 'with_positions_offsets', 'type': 'string', 'analyzer': 'snowball', 'boost': 1.0, 'store': 'yes'},
            'post_count_i': {'index': 'not_analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'long'},
            'average_rating': {'index': 'analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'float'},
            'text': {'index': 'analyzed', 'term_vector': 'with_positions_offsets', 'type': 'string', 'analyzer': 'snowball', 'boost': 1.0, 'store': 'yes'},
            'pub_date_exact': {'index': 'not_analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'date'},
            'name_exact': {'index': 'not_analyzed', 'term_vector': 'with_positions_offsets', 'boost': 1.0, 'store': 'yes', 'type': 'string'},
            'pub_date': {'index': 'analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'date'},
            'average_rating_exact': {'index': 'not_analyzed', 'boost': 1.0, 'store': 'yes', 'type': 'float'}
        })
Exemplo n.º 22
0
    def setUp(self):
        super(LiveWhooshMoreLikeThisTestCase, self).setUp()

        # Stow.
        temp_path = os.path.join('tmp', 'test_whoosh_query')
        self.old_whoosh_path = settings.HAYSTACK_CONNECTIONS['default']['PATH']
        settings.HAYSTACK_CONNECTIONS['default']['PATH'] = temp_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()
Exemplo n.º 23
0
    def setUp(self):
        self.sample_objs = []

        for i in xrange(1, 4):
            mock = MockModel()
            mock.id = i
            mock.author = 'daniel%s' % i
            mock.pub_date = datetime.date(2009, 2, 25) - datetime.timedelta(days=i)
            self.sample_objs.append(mock)

        # Stow.
        # Point the backend at a URL that doesn't exist so we can watch the
        # sparks fly.
        self.old_es_url = settings.HAYSTACK_CONNECTIONS['default']['URL']
        settings.HAYSTACK_CONNECTIONS['default']['URL'] = "%s/foo/" % self.old_es_url
        self.cap = CaptureHandler()
        logging.getLogger('haystack').addHandler(self.cap)
        import haystack
        logging.getLogger('haystack').removeHandler(haystack.stream)

        # Setup the rest of the bits.
        self.old_ui = connections['default'].get_unified_index()
        ui = UnifiedIndex()
        self.smmi = ElasticsearchMockSearchIndex()
        ui.build(indexes=[self.smmi])
        connections['default']._index = ui
        self.sb = connections['default'].get_backend()
Exemplo n.º 24
0
    def test_stored_fields(self):
        # Stow.
        old_unified_index = connections['default']._index
        ui = UnifiedIndex()
        ui.build(indexes=[])
        connections['default']._index = ui

        # Without registering, we should receive an empty dict.
        self.assertEqual(self.no_data_sr.get_stored_fields(), {})
        self.assertEqual(self.extra_data_sr.get_stored_fields(), {})
        self.assertEqual(self.no_overwrite_data_sr.get_stored_fields(), {})

        from haystack import indexes

        class TestSearchIndex(indexes.SearchIndex, indexes.Indexable):
            stored = indexes.CharField(model_attr='author', document=True)

            def get_model(self):
                return MockModel

        # Include the index & try again.
        ui.document_field = 'stored'
        ui.build(indexes=[TestSearchIndex()])

        self.assertEqual(self.no_data_sr.get_stored_fields(), {'stored': None})
        self.assertEqual(self.extra_data_sr.get_stored_fields(),
                         {'stored': 'I am stored data. How fun.'})
        self.assertEqual(self.no_overwrite_data_sr.get_stored_fields(),
                         {'stored': 'I am stored data. How fun.'})

        # Restore.
        connections['default']._index = old_unified_index
Exemplo n.º 25
0
    def test_discovery(self):
        old_ui = connections["default"].get_unified_index()
        connections["default"]._index = UnifiedIndex()
        ui = connections["default"].get_unified_index()
        self.assertEqual(len(ui.get_indexed_models()),
                         EXPECTED_INDEX_MODEL_COUNT)

        # Test exclusions.
        ui.excluded_indexes = [
            "test_haystack.discovery.search_indexes.BarIndex"
        ]
        ui.build()

        indexed_model_names = [str(i._meta) for i in ui.get_indexed_models()]
        self.assertIn("multipleindex.foo", indexed_model_names)
        self.assertIn("multipleindex.bar", indexed_model_names)
        self.assertNotIn("discovery.bar", indexed_model_names)

        ui.excluded_indexes = [
            "test_haystack.discovery.search_indexes.BarIndex",
            "test_haystack.discovery.search_indexes.FooIndex",
        ]
        ui.build()

        indexed_model_names = [str(i._meta) for i in ui.get_indexed_models()]
        self.assertIn("multipleindex.foo", indexed_model_names)
        self.assertIn("multipleindex.bar", indexed_model_names)
        self.assertListEqual(
            [], [i for i in indexed_model_names if i.startswith("discovery")])
        connections["default"]._index = old_ui
Exemplo n.º 26
0
    def setUp(self):
        super(LiveSolrSearchQuerySetTestCase, self).setUp()

        # Stow.
        self.old_debug = settings.DEBUG
        settings.DEBUG = True
        self.old_ui = connections['default'].get_unified_index()
        self.ui = UnifiedIndex()
        self.smmi = SolrMockSearchIndex()
        self.ui.build(indexes=[self.smmi])
        connections['default']._index = self.ui

        self.sqs = SearchQuerySet()
        self.rsqs = RelatedSearchQuerySet()

        # Ugly but not constantly reindexing saves us almost 50% runtime.
        global lssqstc_all_loaded

        if lssqstc_all_loaded is None:
            print 'Reloading data...'
            lssqstc_all_loaded = True

            # Wipe it clean.
            clear_solr_index()

            # Force indexing of the content.
            self.smmi.update()
    def setUp(self):
        super(LiveWhooshRoundTripTestCase, self).setUp()

        # Stow.
        self.old_ui = connections['whoosh'].get_unified_index()
        self.ui = UnifiedIndex()
        self.wrtsi = WhooshRoundTripSearchIndex()
        self.ui.build(indexes=[self.wrtsi])
        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.sqs = SearchQuerySet('whoosh')

        # Wipe it clean.
        self.sqs.query.backend.clear()

        # Fake indexing.
        mock = MockModel()
        mock.id = 1
        self.sb.update(self.wrtsi, [mock])
Exemplo n.º 28
0
 def test_signal_setup_handling(self):
     old_ui = connections['default'].get_unified_index()
     connections['default']._index = UnifiedIndex()
     self.assertEqual(connections['default'].get_unified_index()._indexes_setup, False)
     foo_1 = Foo.objects.create(
         title='chekin sigalz',
         body='stuff'
     )
     fi = connections['default'].get_unified_index().get_index(Foo)
     fi.clear()
     fi.update()
     
     sqs = SearchQuerySet()
     existing_foo = sqs.filter(id='discovery.foo.1')[0]
     self.assertEqual(existing_foo.text, u'stuff')
     
     fi.clear()
     foo_1 = Foo.objects.get(pk=1)
     foo_1.title = 'Checking signals'
     foo_1.body = 'Stuff.'
     # This save should trigger an update.
     foo_1.save()
     self.assertEqual(connections['default'].get_unified_index()._indexes_setup, True)
     
     sqs = SearchQuerySet()
     new_foo = sqs.filter(id='discovery.foo.1')[0]
     self.assertEqual(new_foo.text, u'Stuff.')
     connections['default']._index = old_ui
Exemplo n.º 29
0
    def setUp(self):
        super(ManagementCommandTestCase, self).setUp()
        self.solr = pysolr.Solr(settings.HAYSTACK_CONNECTIONS['solr']['URL'])

        # Stow.
        self.old_ui = connections['solr'].get_unified_index()
        self.ui = UnifiedIndex()
        self.smmi = SolrMockSearchIndex()
        self.ui.build(indexes=[self.smmi])
        connections['solr']._index = self.ui
Exemplo n.º 30
0
    def setUp(self):
        super().setUp()
        self.solr = pysolr.Solr(settings.HAYSTACK_CONNECTIONS["solr"]["URL"])

        # Stow.
        self.old_ui = connections["solr"].get_unified_index()
        self.ui = UnifiedIndex()
        self.smmi = SolrMockSearchIndex()
        self.ui.build(indexes=[self.smmi])
        connections["solr"]._index = self.ui