Example #1
0
 def test_do_update(self, mock_obj):
     """
     Tests the update_index.do_update function
     """
     engine = ElasticsearchMultilingualSearchEngine()
     backend = mock.Mock()
     engine._backend = backend
     index = engine.get_unified_index()
     qs = Document.objects.all()
     start = 0
     end = len(qs)
     total = end - start
     do_update(backend,
               index,
               qs,
               start,
               end,
               total,
               verbosity=1,
               commit=False)
     # The update method has been called
     self.assertTrue(backend.update.called)
     call_args_list = backend.update.call_args_list
     # args, the queryset cannot be testet for equality.
     self.assertEqual(call_args_list[0][0][0], index)
     # kwargs
     self.assertEqual(call_args_list[0][1], {'commit': False})
    def test_query_method_modeltranslations(self):
        engine = ElasticsearchMultilingualSearchEngine()
        es = engine.backend('default', **Data.connection_options)
        es.setup()
        # fill up the index
        self.index_exists = True
        unified_index = engine.get_unified_index()
        index = unified_index.get_index(Document)
        iterable = Document.objects.all()
        es.update(index, iterable)
        time.sleep(1)
        id = 'testproject.document.2'
        i = 0
        # use this document as a reference.
        reference = Document.objects.get(id=2)

        for language in es.languages:
            # check all language indexes
            index_name = es._index_name_for_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            self.assertEqual(self.count, count['count'])

            # make sure the index has been created
            while not es.conn.exists(index=index_name, id=id) and i < 5:
                time.sleep(0.5)
                i += 1
            self.assertTrue(es.conn.exists(index=index_name, id=id))
            # get the document with the above id from the correct index
            doc = es.conn.get(index=index_name, id=id)
            self.assertTrue(doc['found'])
            self.assertEqual(doc['_type'], 'modelresult')
            self.assertEqual(doc['_source']['docid'], reference.docid)
            with translation.override(language):
                self.assertIn(escape(reference.text), doc['_source']['text'])

        with translation.override('en'):
            # test the search queryset
            sqs = SearchQuerySet()
            # Django 1.5 doesn't clean up patches
            self.assertFalse(isinstance(sqs.query.backend.conn, mock.Mock))
            result = sqs.filter(content='United States')
            # result might be empty the first time this is called. (Django < 1.8)
            if len(result) == 0:
                result = sqs.filter(content='United States')
            self.assertEqual(2, len(result))
            self.assertEqual('cyberpresse/2012/12/01/1564248', result[0].docid)
            self.assertEqual('cyberpresse/2012/12/01/1564741', result[1].docid)
            self.assertIn(escape(reference.text), result[1].text)

        with translation.override('de'):
            # test the search queryset
            sqs = SearchQuerySet()
            result = sqs.filter(content='Früherkennungstest')
            self.assertEqual(1, len(result))
            self.assertEqual('cyberpresse/2012/12/01/1564741', result[0].docid)
            self.assertIn(escape(reference.text), result[0].text)
Example #3
0
    def test_query_method_modeltranslations(self):
        engine = ElasticsearchMultilingualSearchEngine()
        es = engine.backend('default', **Data.connection_options)
        es.setup()
        # fill up the index
        self.index_exists = True
        unified_index = engine.get_unified_index()
        index = unified_index.get_index(Document)
        iterable = Document.objects.all()
        es.update(index, iterable)
        time.sleep(1)
        id = 'testproject.document.2'
        i = 0
        # use this document as a reference.
        reference = Document.objects.get(id=2)

        for language in es.languages:
            # check all language indexes
            index_name = es._index_name_for_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            self.assertEqual(self.count, count['count'])

            # make sure the index has been created
            while not es.conn.exists(index=index_name, doc_type='_all', id=id) and i < 5:
                time.sleep(0.5)
                i += 1
            self.assertTrue(es.conn.exists(index=index_name, doc_type='_all', id=id))
            # get the document with the above id from the correct index
            doc = es.conn.get(index=index_name, id=id)
            self.assertTrue(doc['found'])
            self.assertEqual(doc['_type'], 'modelresult')
            self.assertEqual(doc['_source']['docid'], reference.docid)
            with translation.override(language):
                self.assertIn(escape(reference.text), doc['_source']['text'])

        with translation.override('en'):
            # test the search queryset
            sqs = SearchQuerySet()
            # Django 1.5 doesn't clean up patches
            self.assertFalse(isinstance(sqs.query.backend.conn, mock.Mock))
            result = sqs.filter(content='United States')
            # result might be empty the first time this is called. (Django < 1.8)
            if len(result) == 0:
                result = sqs.filter(content='United States')
            self.assertEqual(2, len(result))
            self.assertEqual('cyberpresse/2012/12/01/1564248', result[0].docid)
            self.assertEqual('cyberpresse/2012/12/01/1564741', result[1].docid)
            self.assertIn(escape(reference.text), result[1].text)

        with translation.override('de'):
            # test the search queryset
            sqs = SearchQuerySet()
            result = sqs.filter(content='Früherkennungstest')
            self.assertEqual(1, len(result))
            self.assertEqual('cyberpresse/2012/12/01/1564741', result[0].docid)
            self.assertIn(escape(reference.text), result[0].text)
 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))
Example #5
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))
Example #6
0
    def test_hook_called(self):
        documents = create_documents()
        engine = ElasticsearchMultilingualSearchEngine()
        es = engine.backend('default', **Data.connection_options)
        es.clear(models=None, commit=True)
        self.assertTrue(signals.post_save.has_listeners(sender=Document))

        unified_index = engine.get_unified_index()
        index = unified_index.get_index(Document)
        iterable = Document.objects.all()
        es.update(index, iterable)
        time.sleep(1)

        self.assertTrue(es.conn.indices.exists('testproject-en'))
        count = es.conn.count(index='testproject-en')
        self.assertEqual(0, count['count'])

        # write a new entry in the database
        documents[0].save()
        reference = documents[0].object
        self.assertIsNotNone(reference.id)
        id = 'testproject.document.1'
        time.sleep(0.5)

        self.assertFalse(isinstance(es.conn, mock.Mock))

        for language in es.languages:
            index_name = es._index_name_for_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            print(count)

            self.assertEqual(1, count['count'],
                             'Index %s contains the document' % index_name)
            self.assertTrue(
                es.conn.exists(index=index_name, doc_type='_all', id=id))
            doc = es.conn.get(index=index_name, id=id)
            self.assertTrue(doc['found'])
            self.assertEqual(doc['_type'], 'modelresult')
            self.assertEqual(doc['_source']['docid'], reference.docid)
            with translation.override(language):
                self.assertIn(escape(reference.text), doc['_source']['text'])

        # delete the object. The object needs to be removed from the index.
        reference.delete()
        for language in es.languages:
            index_name = es._index_name_for_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            self.assertEqual(0, count['count'])
    def test_hook_called(self):
        documents = create_documents()
        engine = ElasticsearchMultilingualSearchEngine()
        es = engine.backend('default', **Data.connection_options)
        es.clear(models=None, commit=True)
        self.assertTrue(signals.post_save.has_listeners(sender=Document))

        unified_index = engine.get_unified_index()
        index = unified_index.get_index(Document)
        iterable = Document.objects.all()
        es.update(index, iterable)
        time.sleep(1)

        self.assertTrue(es.conn.indices.exists('testproject-en'))
        count = es.conn.count(index='testproject-en')
        self.assertEqual(0, count['count'])

        # write a new entry in the database
        documents[0].save()
        reference = documents[0].object
        self.assertIsNotNone(reference.id)
        id = 'testproject.document.1'
        time.sleep(0.5)

        self.assertFalse(isinstance(es.conn, mock.Mock))

        for language in es.languages:
            index_name = es._index_name_for_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            print(count)

            self.assertEqual(1, count['count'], 'Index %s contains the document' % index_name)
            self.assertTrue(es.conn.exists(index=index_name, doc_type='_all', id=id))
            doc = es.conn.get(index=index_name, id=id)
            self.assertTrue(doc['found'])
            self.assertEqual(doc['_type'], 'modelresult')
            self.assertEqual(doc['_source']['docid'], reference.docid)
            with translation.override(language):
                self.assertIn(escape(reference.text), doc['_source']['text'])

        # delete the object. The object needs to be removed from the index.
        reference.delete()
        for language in es.languages:
            index_name = es._index_name_for_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            self.assertEqual(0, count['count'])
Example #8
0
    def test_parler_modeltranslations_update(self):
        """
        Test the update method on the multiligual backend for parler models.
        """
        engine = ElasticsearchMultilingualSearchEngine()
        es = engine.backend('default', **Data.connection_options)
        # the indexes don't exist yet.
        for language in es.languages:
            index_name = es._index_name_for_language(language)
            self.assertFalse(es.conn.indices.exists(index_name))

        es.setup()
        self.index_exists = True
        unified_index = engine.get_unified_index()
        index = unified_index.get_index(Document)
        iterable = ParlerDocument.objects.prefetch_related(
            'translations').all()
        es.update(index, iterable)
        time.sleep(1)
        id = 'testproject.parlerdocument.1'
        i = 0
        # use this document as a reference.
        reference = ParlerDocument.objects.get(id=1)

        for language in es.languages:
            # check all language indexes
            index_name = es._index_name_for_language(language)
            reference.set_current_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            self.assertEqual(3, count['count'])

            # make sure the index has been created
            while not es.conn.exists(index=index_name, doc_type='_all',
                                     id=id) and i < 5:
                time.sleep(0.5)
                i += 1
            self.assertTrue(
                es.conn.exists(index=index_name, doc_type='_all', id=id))
            # get the document with the above id from the correct index
            doc = es.conn.get(index=index_name, id=id)
            self.assertTrue(doc['found'])
            self.assertEqual(doc['_type'], 'modelresult')
            self.assertEqual(doc['_source']['docid'], reference.docid)
            with translation.override(language):
                self.assertIn(escape(reference.text), doc['_source']['text'])
    def test_parler_modeltranslations_update(self):
        """
        Test the update method on the multiligual backend for parler models.
        """
        engine = ElasticsearchMultilingualSearchEngine()
        es = engine.backend('default', **Data.connection_options)
        # the indexes don't exist yet.
        for language in es.languages:
            index_name = es._index_name_for_language(language)
            self.assertFalse(es.conn.indices.exists(index_name))

        es.setup()
        self.index_exists = True
        unified_index = engine.get_unified_index()
        index = unified_index.get_index(Document)
        iterable = ParlerDocument.objects.prefetch_related('translations').all()
        es.update(index, iterable)
        time.sleep(1)
        id = 'testproject.parlerdocument.1'
        i = 0
        # use this document as a reference.
        reference = ParlerDocument.objects.get(id=1)

        for language in es.languages:
            # check all language indexes
            index_name = es._index_name_for_language(language)
            reference.set_current_language(language)
            self.assertTrue(es.conn.indices.exists(index_name))
            count = es.conn.count(index=index_name)
            self.assertEqual(3, count['count'])

            # make sure the index has been created
            while not es.conn.exists(index=index_name, id=id) and i < 5:
                time.sleep(0.5)
                i += 1
            self.assertTrue(es.conn.exists(index=index_name, id=id))
            # get the document with the above id from the correct index
            doc = es.conn.get(index=index_name, id=id)
            self.assertTrue(doc['found'])
            self.assertEqual(doc['_type'], 'modelresult')
            self.assertEqual(doc['_source']['docid'], reference.docid)
            with translation.override(language):
                self.assertIn(escape(reference.text), doc['_source']['text'])
 def test_do_update(self, mock_obj):
     """
     Tests the update_index.do_update function
     """
     engine = ElasticsearchMultilingualSearchEngine()
     backend = mock.Mock()
     engine._backend = backend
     index = engine.get_unified_index()
     qs = Document.objects.all()
     start = 0
     end = len(qs)
     total = end - start
     do_update(backend, index, qs, start, end, total, verbosity=1, commit=False)
     # The update method has been called
     self.assertTrue(backend.update.called)
     call_args_list = backend.update.call_args_list
     # args, the queryset cannot be testet for equality.
     self.assertEqual(call_args_list[0][0][0], index)
     # kwargs
     self.assertEqual(call_args_list[0][1], {"commit": False})
Example #11
0
 def test_multilingual_update(self, mock_obj):
     """
     Test the update method on the multilingual backend.
     """
     engine = ElasticsearchMultilingualSearchEngine()
     es = engine.backend('default', **Data.connection_options)
     es.setup()
     unified_index = engine.get_unified_index()
     index = unified_index.get_index(Document)
     iterable = Document.objects.all()
     es.update(index, iterable)
     es.conn.indices.refresh.assert_any_call(index='testproject-en')
     es.conn.indices.refresh.assert_any_call(index='testproject-de')
     es.conn.indices.refresh.assert_any_call(index='testproject-fr')
     self.assertTrue(es.conn.bulk.called)
     self.assertEqual(len(es.conn.bulk.call_args_list), len(settings.LANGUAGES))
     for call_args in es.conn.bulk.call_args_list:
         language = call_args[1]['index'][-2:]
         content = call_args[0][0][1]
         document = Document.objects.get(id=content['django_id'])
         self.assertEqual(document.docid, content['docid'])
         with translation.override(language):
             self.assertIn(escape(document.text), content['text'])
 def test_multilingual_update(self, mock_obj):
     """
     Test the update method on the multilingual backend.
     """
     engine = ElasticsearchMultilingualSearchEngine()
     es = engine.backend("default", **Data.connection_options)
     es.setup()
     unified_index = engine.get_unified_index()
     index = unified_index.get_index(Document)
     iterable = Document.objects.all()
     es.update(index, iterable)
     es.conn.indices.refresh.assert_any_call(index="testproject-en")
     es.conn.indices.refresh.assert_any_call(index="testproject-de")
     es.conn.indices.refresh.assert_any_call(index="testproject-fr")
     self.assertTrue(es.conn.bulk.called)
     self.assertEqual(len(es.conn.bulk.call_args_list), len(settings.LANGUAGES))
     for call_args in es.conn.bulk.call_args_list:
         language = call_args[1]["index"][-2:]
         content = call_args[0][0][1]
         document = Document.objects.get(id=content["django_id"])
         self.assertEqual(document.docid, content["docid"])
         with translation.override(language):
             self.assertIn(escape(document.text), content["text"])
Example #13
0
 def tearDown(self):
     engine = ElasticsearchMultilingualSearchEngine()
     es = engine.backend('default', **Data.connection_options)
     es.clear(models=None, commit=True)
     self.sp.teardown()
     time.sleep(1)
 def tearDown(self):
     if self.index_exists:
         engine = ElasticsearchMultilingualSearchEngine()
         es = engine.backend('default', **Data.connection_options)
         es.clear(commit=True)
         time.sleep(1)
 def tearDown(self):
     engine = ElasticsearchMultilingualSearchEngine()
     es = engine.backend('default', **Data.connection_options)
     es.clear(models=None, commit=True)
     self.sp.teardown()
     time.sleep(1)
 def tearDown(self):
     if self.index_exists:
         engine = ElasticsearchMultilingualSearchEngine()
         es = engine.backend('default', **Data.connection_options)
         es.clear(commit=True)
         time.sleep(1)