예제 #1
0
    def ready(self):
        if SEARCH_SIGNALS:
            from search.signals import run_post_save_search_tasks, run_post_delete_search_tasks  # noqa: F401

            search_conf = SearchConf(auto_setup=True)
            model_labels = search_conf.get_registered_models()

            logger.info('Connect post_save signals for {} models'.format(
                len(model_labels)))

            for label in model_labels:
                logger.info('Connecting post_save for {}'.format(label))
                post_save.connect(
                    run_post_save_search_tasks,
                    sender=label,
                    dispatch_uid='run_post_save_search_tasks::{}'.format(
                        label))
                post_delete_uid = 'run_post_delete_search_tasks::{}'.format(
                    label)
                post_delete.connect(run_post_delete_search_tasks,
                                    sender=label,
                                    dispatch_uid=post_delete_uid)

        try:
            from search.tasks import schedule_periodic_index_rebuilds
            # This should tell our rq-scheduler to run rebuild_indices periodically
            schedule_periodic_index_rebuilds()
        except Exception:
            pass
예제 #2
0
    def ready(self):
        if SEARCH_SIGNALS:
            from search.signals import run_post_save_search_tasks, run_post_delete_search_tasks  # noqa: F401

            search_conf = SearchConf(auto_setup=True)
            model_labels = search_conf.get_registered_models()

            logger.info('Connect post_save signals for {} models'.format(len(model_labels)))

            for label in model_labels:
                logger.info('Connecting post_save for {}'.format(label))
                post_save.connect(
                    run_post_save_search_tasks,
                    sender=label,
                    dispatch_uid='run_post_save_search_tasks::{}'.format(label)
                )
                post_delete_uid = 'run_post_delete_search_tasks::{}'.format(label)
                post_delete.connect(
                    run_post_delete_search_tasks,
                    sender=label,
                    dispatch_uid=post_delete_uid
                )

        try:
            from search.tasks import schedule_periodic_index_rebuilds
            # This should tell our rq-scheduler to run rebuild_indices periodically
            schedule_periodic_index_rebuilds()
        except Exception:
            pass
예제 #3
0
    def test_get_serializer_for_model_method_with_label(self):
        config = SearchConf('search.tests.mocks', auto_setup=True)
        MockSerializer = getattr(config._serializer_module, 'MockSerializer',
                                 None)

        serializer = config.get_serializer_for_model('search.MockModel')
        self.assertEqual(serializer, MockSerializer)
예제 #4
0
    def test_get_registered_models_method_with_concrete_model(self):
        config = SearchConf("search.tests.mocks")
        config.setup()

        model_list = config.get_registered_models()
        self.assertIsNotNone(model_list)
        self.assertIsInstance(model_list, list)
        self.assertIn("search.MockModel", model_list)
예제 #5
0
    def test_has_serializer_module(self):
        config = SearchConf()
        config.setup("search.tests.mocks")

        self.assertIsNotNone(config._serializer_module)

        serializer_class = getattr(config._serializer_module, "MockSerializer", None)
        self.assertIsNotNone(serializer_class)
예제 #6
0
    def test_get_registered_models_method_with_concrete_model(self):
        config = SearchConf('search.tests.mocks')
        config.setup()

        model_list = config.get_registered_models()
        self.assertIsNotNone(model_list)
        self.assertIsInstance(model_list, list)
        self.assertIn('search.MockModel', model_list)
예제 #7
0
    def test_has_default_settings(self):
        config = SearchConf()
        config.setup()

        self.assertIsInstance(config._settings, dict)
        self.assertIn('default', config._settings)
        self.assertIn('index', config._settings['default'])
        self.assertIn('connections', config._settings['default'])
        self.assertIsInstance(config._settings['default']['connections'], dict)
예제 #8
0
    def test_get_serializer_for_model_method_with_class(self):
        config = SearchConf("search.tests.mocks", auto_setup=True)

        self.assertEqual(MockModel._meta.label, "search.MockModel")

        MockSerializer = getattr(config._serializer_module, "MockSerializer", None)
        serializer = config.get_serializer_for_model(MockModel)

        self.assertEqual(serializer, MockSerializer)
예제 #9
0
    def test_has_serializer_module(self):
        config = SearchConf()
        config.setup('search.tests.mocks')

        self.assertIsNotNone(config._serializer_module)

        serializer_class = getattr(config._serializer_module, 'MockSerializer',
                                   None)
        self.assertIsNotNone(serializer_class)
예제 #10
0
    def test_has_default_settings(self):
        config = SearchConf()
        config.setup()

        self.assertIsInstance(config._settings, dict)
        self.assertIn("default", config._settings)
        self.assertIn("index", config._settings["default"])
        self.assertIn("connections", config._settings["default"])
        self.assertIsInstance(config._settings["default"]["connections"], dict)
예제 #11
0
    def test_setup_doctypes(self):
        config = SearchConf()
        config.setup()

        from django.conf import settings
        SEARCH = getattr(settings, 'SEARCH', {})
        default_index = SEARCH['default']['index']

        self.assertEqual(MockDocOne._doc_type.index, default_index)
        self.assertEqual(MockDocTwo._doc_type.index, default_index)
예제 #12
0
    def test_setup_doctypes(self):
        config = SearchConf()
        config.setup()

        from django.conf import settings

        SEARCH = getattr(settings, "SEARCH", {})
        default_index = SEARCH["default"]["index"]

        self.assertEqual(MockDocOne._doc_type.index, default_index)
        self.assertEqual(MockDocTwo._doc_type.index, default_index)
예제 #13
0
    def test_setup_method_calls__register_serializer_model(self):
        config = SearchConf()
        config._register_serializer_model = Mock()
        config.setup("search.tests.mocks")

        MockSerializer = getattr(config._serializer_module, "MockSerializer", None)
        MockSerializerTwo = getattr(config._serializer_module, "MockSerializerTwo", None)
        MockSerializerThree = getattr(config._serializer_module, "MockSerializerThree", None)

        call_list = [call(MockSerializer), call(MockSerializerTwo), call(MockSerializerThree)]
        config._register_serializer_model.assert_has_calls(call_list)
예제 #14
0
    def test__doctype_lookup(self):
        config = SearchConf("search.tests.mocks")
        config.setup()

        from django.conf import settings

        SEARCH = getattr(settings, "SEARCH", {})
        default_index = SEARCH["default"]["index"]
        expected_doctypes = set(
            ("search.tests.mocks.MockDocOne", "search.tests.mocks.MockDocTwo", "search.tests.mocks.MockDocThree")
        )

        self.assertIn(default_index, config._doctype_lookup)
        self.assertEqual(config._doctype_lookup[default_index], expected_doctypes)
예제 #15
0
    def test__doctype_lookup(self):
        config = SearchConf('search.tests.mocks')
        config.setup()

        from django.conf import settings
        SEARCH = getattr(settings, 'SEARCH', {})
        default_index = SEARCH['default']['index']
        expected_doctypes = set((
            'search.tests.mocks.MockDocOne',
            'search.tests.mocks.MockDocTwo',
            'search.tests.mocks.MockDocThree',
        ))

        self.assertIn(default_index, config._doctype_lookup)
        self.assertEqual(config._doctype_lookup[default_index],
                         expected_doctypes)
예제 #16
0
    def test_setup_method_calls__register_serializer_model(self):
        config = SearchConf()
        config._register_serializer_model = Mock()
        config.setup('search.tests.mocks')

        MockSerializer = getattr(config._serializer_module, 'MockSerializer',
                                 None)
        MockSerializerTwo = getattr(config._serializer_module,
                                    'MockSerializerTwo', None)
        MockSerializerThree = getattr(config._serializer_module,
                                      'MockSerializerThree', None)

        call_list = [
            call(MockSerializer),
            call(MockSerializerTwo),
            call(MockSerializerThree)
        ]
        config._register_serializer_model.assert_has_calls(call_list)
예제 #17
0
    def test_setup_method_calls__configure_serializer_doctype(self):
        config = SearchConf()
        config._configure_serializer_doctype = Mock()
        config.setup("search.tests.mocks")

        MockSerializer = getattr(config._serializer_module, "MockSerializer", None)
        MockSerializerTwo = getattr(config._serializer_module, "MockSerializerTwo", None)
        MockSerializerThree = getattr(config._serializer_module, "MockSerializerThree", None)

        from django.conf import settings

        SEARCH = getattr(settings, "SEARCH", {})
        default_index = SEARCH["default"]["index"]

        call_list = [
            call(MockSerializer, default_index),
            call(MockSerializerTwo, default_index),
            call(MockSerializerThree, default_index),
        ]
        config._configure_serializer_doctype.assert_has_calls(call_list)
예제 #18
0
    def test_setup_method_calls__configure_serializer_doctype(self):
        config = SearchConf()
        config._configure_serializer_doctype = Mock()
        config.setup('search.tests.mocks')

        MockSerializer = getattr(config._serializer_module, 'MockSerializer',
                                 None)
        MockSerializerTwo = getattr(config._serializer_module,
                                    'MockSerializerTwo', None)
        MockSerializerThree = getattr(config._serializer_module,
                                      'MockSerializerThree', None)

        from django.conf import settings
        SEARCH = getattr(settings, 'SEARCH', {})
        default_index = SEARCH['default']['index']

        call_list = [
            call(MockSerializer, default_index),
            call(MockSerializerTwo, default_index),
            call(MockSerializerThree, default_index),
        ]
        config._configure_serializer_doctype.assert_has_calls(call_list)
예제 #19
0
    def test_get_doctype_for_model_method(self):
        config = SearchConf('search.tests.mocks')
        config.setup()

        DoctypeClass = config.get_doctype_for_model('search.MockModel')
        self.assertEqual(DoctypeClass, MockDocOne)
예제 #20
0
    def test_get_registered_models_method(self):
        config = SearchConf('search.tests.mocks', auto_setup=True)

        model_list = config.get_registered_models()
        self.assertIsNotNone(model_list)
        self.assertIn('search.MockModel', model_list)
예제 #21
0
 def test_get_serializer_for_model_method_with_unrelated_model(self):
     config = SearchConf('search.tests.mocks', auto_setup=True)
     with self.assertRaises(LookupError):
         config.get_serializer_for_model('search.MockUnserializedModel')
예제 #22
0
    def test_get_serializer_for_model_method_with_nonexistent_model(self):
        config = SearchConf('search.tests.mocks', auto_setup=True)

        with self.assertRaises(LookupError):
            config.get_serializer_for_model('search.ModelThatDoesNotExist')
예제 #23
0
    def test_get_serializer_for_model_method_with_nonexistent_model(self):
        config = SearchConf("search.tests.mocks", auto_setup=True)

        with self.assertRaises(LookupError):
            config.get_serializer_for_model("search.ModelThatDoesNotExist")
예제 #24
0
 def test_get_serializer_for_model_method_with_unrelated_model(self):
     config = SearchConf("search.tests.mocks", auto_setup=True)
     with self.assertRaises(LookupError):
         config.get_serializer_for_model("search.MockUnserializedModel")
예제 #25
0
    def test_get_registered_models_method(self):
        config = SearchConf("search.tests.mocks", auto_setup=True)

        model_list = config.get_registered_models()
        self.assertIsNotNone(model_list)
        self.assertIn("search.MockModel", model_list)
예제 #26
0
    def test_get_doctype_for_model_method(self):
        config = SearchConf("search.tests.mocks")
        config.setup()

        DoctypeClass = config.get_doctype_for_model("search.MockModel")
        self.assertEqual(DoctypeClass, MockDocOne)