Beispiel #1
0
 def test_autodiscover_tasks(self, patching):
     patching.modules('django.apps')
     from django.apps import apps
     f = DjangoFixup(self.app)
     configs = [Mock(name='c1'), Mock(name='c2')]
     apps.get_app_configs.return_value = configs
     assert f.autodiscover_tasks() == [c.name for c in configs]
Beispiel #2
0
 def test_autodiscover_tasks(self, patching):
     patching.modules('django.apps')
     from django.apps import apps
     f = DjangoFixup(self.app)
     configs = [Mock(name='c1'), Mock(name='c2')]
     apps.get_app_configs.return_value = configs
     assert f.autodiscover_tasks() == [c.name for c in configs]
Beispiel #3
0
 def test_autodiscover_tasks(self):
     self.mock_modules('django.apps')
     from django.apps import apps
     f = DjangoFixup(self.app)
     configs = [Mock(name='c1'), Mock(name='c2')]
     apps.get_app_configs.return_value = configs
     self.assertEqual(
         f.autodiscover_tasks(),
         [c.name for c in configs],
     )
Beispiel #4
0
 def test_autodiscover_tasks(self):
     self.mock_modules('django.apps')
     from django.apps import apps
     f = DjangoFixup(self.app)
     configs = [Mock(name='c1'), Mock(name='c2')]
     apps.get_app_configs.return_value = configs
     self.assertEqual(
         f.autodiscover_tasks(),
         [c.name for c in configs],
     )
Beispiel #5
0
    def test_init(self):
        with self.fixup_context(self.app) as (f, importmod, sym):
            self.assertTrue(f)

            def se(name):
                if name == 'django.utils.timezone:now':
                    raise ImportError()
                return Mock()
            sym.side_effect = se
            self.assertTrue(DjangoFixup(self.app)._now)

            def se2(name):
                if name == 'django.db:close_old_connections':
                    raise ImportError()
                return Mock()
            sym.side_effect = se2
            self.assertIsNone(DjangoFixup(self.app)._close_old_connections)
Beispiel #6
0
 def test_setting_default_app(self):
     from celery.fixups import django
     prev, django.default_app = django.default_app, None
     try:
         app = Mock(name='app')
         DjangoFixup(app)
         app.set_default.assert_called_with()
     finally:
         django.default_app = prev
Beispiel #7
0
 def test_setting_default_app(self):
     from celery import _state
     prev, _state.default_app = _state.default_app, None
     try:
         app = Mock(name='app')
         DjangoFixup(app)
         app.set_default.assert_called_with()
     finally:
         _state.default_app = prev
Beispiel #8
0
 def fixup_context(self, app):
     with patch('celery.fixups.django.import_module') as import_module:
         with patch('celery.fixups.django.symbol_by_name') as symbyname:
             f = DjangoFixup(app)
             yield f, import_module, symbyname
Beispiel #9
0
 def test_on_import_modules(self):
     f = DjangoFixup(self.app)
     f.worker_fixup = Mock(name='worker_fixup')
     f.on_import_modules()
     f.worker_fixup.validate_models.assert_called_with()
Beispiel #10
0
 def test_worker_fixup_property(self, DjangoWorkerFixup):
     f = DjangoFixup(self.app)
     f._worker_fixup = None
     assert f.worker_fixup is DjangoWorkerFixup()
     assert f.worker_fixup is DjangoWorkerFixup()
Beispiel #11
0
# NOT need to be called here.
# nautobot.setup()

app = Celery("nautobot")

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes. Again, this is possible
# only after calling `nautobot.setup()` which sets `DJANGO_SETTINGS_MODULE`.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object("django.conf:settings", namespace="CELERY")

# Because of the chicken-and-egg Django settings bootstrapping issue,
# Celery doesn't automatically install its Django-specific patches.
# So we need to explicitly do so ourselves:
DjangoFixup(app).install()

# Load task modules from all registered Django apps.
app.autodiscover_tasks()


class NautobotKombuJSONEncoder(DjangoJSONEncoder):
    """
    Custom json encoder based on DjangoJSONEncoder that serializes objects that implement
    the `nautobot_serialize()` method via the `__nautobot_type__` interface. This is useful
    in passing special objects to and from Celery tasks.

    This pattern should generally be avoided by passing pointers to persisted objects to the
    Celery tasks and retrieving them from within the task execution. While this is always possible
    for model instances (which covers 99% of use cases), for rare instances where it does not,
    and the actual object must be passed, this pattern allows for encoding and decoding
Beispiel #12
0
 def test_worker_fixup_property(self, DjangoWorkerFixup):
     f = DjangoFixup(self.app)
     f._worker_fixup = None
     self.assertIs(f.worker_fixup, DjangoWorkerFixup())
     self.assertIs(f.worker_fixup, DjangoWorkerFixup())
Beispiel #13
0
 def test_on_import_modules(self):
     f = DjangoFixup(self.app)
     f.worker_fixup = Mock(name='worker_fixup')
     f.on_import_modules()
     f.worker_fixup.validate_models.assert_called_with()
Beispiel #14
0
 def test_worker_fixup_property(self, DjangoWorkerFixup):
     f = DjangoFixup(self.app)
     f._worker_fixup = None
     assert f.worker_fixup is DjangoWorkerFixup()
     assert f.worker_fixup is DjangoWorkerFixup()
Beispiel #15
0
 def test_autodiscover_tasks_pre17(self):
     self.mask_modules('django.apps')
     f = DjangoFixup(self.app)
     f._settings = Mock(name='_settings')
     self.assertIs(f.autodiscover_tasks(), f._settings.INSTALLED_APPS)
Beispiel #16
0
 def test_autodiscover_tasks_pre17(self):
     self.mask_modules('django.apps')
     f = DjangoFixup(self.app)
     f._settings = Mock(name='_settings')
     self.assertIs(f.autodiscover_tasks(), f._settings.INSTALLED_APPS)
Beispiel #17
0
 def test_worker_fixup_property(self, DjangoWorkerFixup):
     f = DjangoFixup(self.app)
     f._worker_fixup = None
     self.assertIs(f.worker_fixup, DjangoWorkerFixup())
     self.assertIs(f.worker_fixup, DjangoWorkerFixup())