Browse Source

Remove module: celery.discovery, moved functionality to celery.loaders.djangoapp. Also TaskRegistry.autodiscover has been removed.

Ask Solem 15 years ago
parent
commit
6c1e6ba8b3

+ 0 - 41
celery/discovery.py

@@ -1,41 +0,0 @@
-"""celery.discovery"""
-import imp
-import importlib
-_RACE_PROTECTION = False
-
-
-def autodiscover():
-    """Include tasks for all applications in :setting:`INSTALLED_APPS`."""
-    from django.conf import settings
-    global _RACE_PROTECTION
-
-    if _RACE_PROTECTION:
-        return
-    _RACE_PROTECTION = True
-    try:
-        return filter(None, [find_related_module(app, "tasks")
-                                for app in settings.INSTALLED_APPS])
-    finally:
-        _RACE_PROTECTION = False
-
-
-def find_related_module(app, related_name):
-    """Given an application name and a module name, tries to find that
-    module in the application."""
-
-    try:
-        app_path = importlib.import_module(app).__path__
-    except AttributeError:
-        return
-
-    try:
-        imp.find_module(related_name, app_path)
-    except ImportError:
-        return
-
-    module = importlib.import_module("%s.%s" % (app, related_name))
-
-    try:
-        return getattr(module, related_name)
-    except AttributeError:
-        return

+ 55 - 14
celery/loaders/djangoapp.py

@@ -1,5 +1,10 @@
+import imp
+import importlib
+
 from celery.loaders.base import BaseLoader
 
+_RACE_PROTECTION = False
+
 
 class Loader(BaseLoader):
     """The Django loader."""
@@ -22,29 +27,65 @@ class Loader(BaseLoader):
         from django.db import connection
         connection.close()
 
-        # Reset cache connection only if using memcached/libmemcached
+        # ## Reset cache connection only if using memcached/libmemcached
         from django.core import cache
-        # XXX At Opera we use a custom memcached backend that uses libmemcached
-        # instead of libmemcache (cmemcache). Should find a better solution for
-        # this, but for now "memcached" should probably be unique enough of a
-        # string to not make problems.
+        # XXX At Opera we use a custom memcached backend that uses
+        # libmemcached instead of libmemcache (cmemcache). Should find a
+        # better solution for this, but for now "memcached" should probably
+        # be unique enough of a string to not make problems.
         cache_backend = cache.settings.CACHE_BACKEND
-        if hasattr(cache, "parse_backend_uri"):
-            cache_scheme = cache.parse_backend_uri(cache_backend)[0]
-        else:
-            # Django <= 1.0.2
-            cache_scheme = cache_backend.split(":", 1)[0]
+        try:
+            parse_backend = cache.parse_backend_uri
+        except AttributeError:
+            parse_backend = lambda backend: backend.split(":", 1)
+        cache_scheme = parse_backend(cache_backend)[0]
+
         if "memcached" in cache_scheme:
             cache.cache.close()
 
     def on_worker_init(self):
         """Called when the worker starts.
 
-        Uses :func:`celery.discovery.autodiscover` to automatically discover
-        any ``tasks.py`` files in the applications listed in
-        ``INSTALLED_APPS``.
+        Automatically discovers any ``tasks.py`` files in the applications
+        listed in ``INSTALLED_APPS``.
 
         """
         self.import_default_modules()
-        from celery.discovery import autodiscover
         autodiscover()
+
+
+def autodiscover():
+    """Include tasks for all applications in :setting:`INSTALLED_APPS`."""
+    from django.conf import settings
+    global _RACE_PROTECTION
+
+    if _RACE_PROTECTION:
+        return
+    _RACE_PROTECTION = True
+    try:
+        return filter(None, [find_related_module(app, "tasks")
+                                for app in settings.INSTALLED_APPS])
+    finally:
+        _RACE_PROTECTION = False
+
+
+def find_related_module(app, related_name):
+    """Given an application name and a module name, tries to find that
+    module in the application."""
+
+    try:
+        app_path = importlib.import_module(app).__path__
+    except AttributeError:
+        return
+
+    try:
+        imp.find_module(related_name, app_path)
+    except ImportError:
+        return
+
+    module = importlib.import_module("%s.%s" % (app, related_name))
+
+    try:
+        return getattr(module, related_name)
+    except AttributeError:
+        return

+ 0 - 5
celery/registry.py

@@ -2,7 +2,6 @@
 import inspect
 from UserDict import UserDict
 
-from celery import discovery
 from celery.exceptions import NotRegistered, AlreadyRegistered
 
 
@@ -14,10 +13,6 @@ class TaskRegistry(UserDict):
     def __init__(self):
         self.data = {}
 
-    def autodiscover(self):
-        """Autodiscovers tasks using :func:`celery.discovery.autodiscover`."""
-        discovery.autodiscover()
-
     def register(self, task):
         """Register a task in the task registry.
 

+ 1 - 2
celery/tests/test_discovery.py

@@ -1,6 +1,6 @@
 import unittest
 from django.conf import settings
-from celery.discovery import autodiscover
+from celery.loaders.djangoapp import autodiscover
 from celery.task import tasks
 
 
@@ -9,7 +9,6 @@ class TestDiscovery(unittest.TestCase):
     def assertDiscovery(self):
         apps = autodiscover()
         self.assertTrue(apps)
-        tasks.autodiscover()
         self.assertTrue("c.unittest.SomeAppTask" in tasks)
         self.assertEquals(tasks["c.unittest.SomeAppTask"].run(), 42)
 

+ 0 - 8
docs/internals/reference/celery.discovery.rst

@@ -1,8 +0,0 @@
-==================================
-Task Discovery - celery.discovery
-==================================
-
-.. currentmodule:: celery.discovery
-
-.. automodule:: celery.discovery
-    :members:

+ 0 - 1
docs/internals/reference/index.rst

@@ -31,7 +31,6 @@
     celery.datastructures
     celery.log
     celery.utils
-    celery.discovery
     celery.platform
     celery.managers
     celery.models