Browse Source

Moves code from celery.backends __init__ to celery.app.backends

Ask Solem 8 years ago
parent
commit
61552e1475

+ 67 - 0
celery/app/backends.py

@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+"""Backend selection."""
+from __future__ import absolute_import, unicode_literals
+
+import sys
+import types
+
+from celery.exceptions import ImproperlyConfigured
+from celery._state import current_app
+from celery.five import reraise
+from celery.utils.imports import load_extension_class_names, symbol_by_name
+
+__all__ = ['get_backend_cls', 'get_backend_by_url']
+
+UNKNOWN_BACKEND = """
+Unknown result backend: {0!r}.  Did you spell that correctly? ({1!r})
+"""
+
+BACKEND_ALIASES = {
+    'amqp': 'celery.backends.amqp:AMQPBackend',
+    'rpc': 'celery.backends.rpc.RPCBackend',
+    'cache': 'celery.backends.cache:CacheBackend',
+    'redis': 'celery.backends.redis:RedisBackend',
+    'mongodb': 'celery.backends.mongodb:MongoBackend',
+    'db': 'celery.backends.database:DatabaseBackend',
+    'database': 'celery.backends.database:DatabaseBackend',
+    'elasticsearch': 'celery.backends.elasticsearch:ElasticsearchBackend',
+    'cassandra': 'celery.backends.cassandra:CassandraBackend',
+    'couchbase': 'celery.backends.couchbase:CouchbaseBackend',
+    'couchdb': 'celery.backends.couchdb:CouchBackend',
+    'riak': 'celery.backends.riak:RiakBackend',
+    'file': 'celery.backends.filesystem:FilesystemBackend',
+    'disabled': 'celery.backends.base:DisabledBackend',
+    'consul': 'celery.backends.consul:ConsulBackend'
+}
+
+
+def get_backend_cls(backend=None, loader=None,
+                    extension_namespace='celery.result_backends'):
+    """Get backend class by name/alias."""
+    backend = backend or 'disabled'
+    loader = loader or current_app.loader
+    aliases = dict(BACKEND_ALIASES, **loader.override_backends)
+    aliases.update(
+        load_extension_class_names(extension_namespace) or {})
+    try:
+        cls = symbol_by_name(backend, aliases)
+    except ValueError as exc:
+        reraise(ImproperlyConfigured, ImproperlyConfigured(
+            UNKNOWN_BACKEND.strip().format(backend, exc)), sys.exc_info()[2])
+    if isinstance(cls, types.ModuleType):
+        raise ImproperlyConfigured(UNKNOWN_BACKEND.strip().format(
+            backend, 'is a Python module, not a backend class.'))
+    return cls
+
+
+def get_backend_by_url(backend=None, loader=None):
+    """Get backend class by URL."""
+    url = None
+    if backend and '://' in backend:
+        url = backend
+        scheme, _, _ = url.partition('://')
+        if '+' in scheme:
+            backend, url = url.split('+', 1)
+        else:
+            backend = scheme
+    return get_backend_cls(backend, loader), url

+ 1 - 1
celery/app/base.py

@@ -42,6 +42,7 @@ from celery.utils.log import get_logger
 from celery.utils.objects import FallbackContext, mro_lookup
 
 from .annotations import prepare as prepare_annotations
+from .backends import get_backend_by_url
 from .defaults import find_deprecated_settings
 from .registry import TaskRegistry
 from .utils import (
@@ -849,7 +850,6 @@ class Celery(object):
         return bugreport(self)
 
     def _get_backend(self):
-        from celery.backends import get_backend_by_url
         backend, url = get_backend_by_url(
             self.backend_cls or self.conf.result_backend,
             self.loader)

+ 0 - 71
celery/backends/__init__.py

@@ -1,71 +0,0 @@
-# -*- coding: utf-8 -*-
-"""Backend abstract factory (...did I just say that?) and alias definitions."""
-from __future__ import absolute_import, unicode_literals
-
-import sys
-import types
-
-from celery.exceptions import ImproperlyConfigured
-from celery.local import Proxy
-from celery._state import current_app
-from celery.five import reraise
-from celery.utils.imports import load_extension_class_names, symbol_by_name
-
-__all__ = ['get_backend_cls', 'get_backend_by_url']
-
-UNKNOWN_BACKEND = """\
-Unknown result backend: {0!r}.  Did you spell that correctly? ({1!r})\
-"""
-
-BACKEND_ALIASES = {
-    'amqp': 'celery.backends.amqp:AMQPBackend',
-    'rpc': 'celery.backends.rpc.RPCBackend',
-    'cache': 'celery.backends.cache:CacheBackend',
-    'redis': 'celery.backends.redis:RedisBackend',
-    'mongodb': 'celery.backends.mongodb:MongoBackend',
-    'db': 'celery.backends.database:DatabaseBackend',
-    'database': 'celery.backends.database:DatabaseBackend',
-    'elasticsearch': 'celery.backends.elasticsearch:ElasticsearchBackend',
-    'cassandra': 'celery.backends.cassandra:CassandraBackend',
-    'couchbase': 'celery.backends.couchbase:CouchbaseBackend',
-    'couchdb': 'celery.backends.couchdb:CouchBackend',
-    'riak': 'celery.backends.riak:RiakBackend',
-    'file': 'celery.backends.filesystem:FilesystemBackend',
-    'disabled': 'celery.backends.base:DisabledBackend',
-    'consul': 'celery.backends.consul:ConsulBackend'
-}
-
-#: deprecated alias to ``current_app.backend``.
-default_backend = Proxy(lambda: current_app.backend)
-
-
-def get_backend_cls(backend=None, loader=None,
-                    extension_namespace='celery.result_backends'):
-    """Get backend class by name/alias."""
-    backend = backend or 'disabled'
-    loader = loader or current_app.loader
-    aliases = dict(BACKEND_ALIASES, **loader.override_backends)
-    aliases.update(
-        load_extension_class_names(extension_namespace) or {})
-    try:
-        cls = symbol_by_name(backend, aliases)
-    except ValueError as exc:
-        reraise(ImproperlyConfigured, ImproperlyConfigured(
-            UNKNOWN_BACKEND.format(backend, exc)), sys.exc_info()[2])
-    if isinstance(cls, types.ModuleType):
-        raise ImproperlyConfigured(UNKNOWN_BACKEND.format(
-            backend, 'is a Python module, not a backend class.'))
-    return cls
-
-
-def get_backend_by_url(backend=None, loader=None):
-    """Get backend class by URL."""
-    url = None
-    if backend and '://' in backend:
-        url = backend
-        scheme, _, _ = url.partition('://')
-        if '+' in scheme:
-            backend, url = url.split('+', 1)
-        else:
-            backend = scheme
-    return get_backend_cls(backend, loader), url

+ 11 - 0
docs/reference/celery.app.backends.rst

@@ -0,0 +1,11 @@
+===================================
+ ``celery.app.backends``
+===================================
+
+.. contents::
+    :local:
+.. currentmodule:: celery.app.backends
+
+.. automodule:: celery.app.backends
+    :members:
+    :undoc-members:

+ 1 - 0
docs/reference/index.rst

@@ -17,6 +17,7 @@
     celery.app.defaults
     celery.app.control
     celery.app.registry
+    celery.app.backends
     celery.app.builtins
     celery.app.log
     celery.app.utils

+ 2 - 6
t/unit/backends/test_backends.py → t/unit/app/test_backends.py

@@ -4,7 +4,7 @@ import pytest
 
 from case import patch
 
-from celery import backends
+from celery.app import backends
 from celery.backends.amqp import AMQPBackend
 from celery.backends.cache import CacheBackend
 from celery.exceptions import ImproperlyConfigured
@@ -24,10 +24,6 @@ class test_backends:
         with pytest.raises(ImportError):
             backends.get_backend_cls('fasodaopjeqijwqe', app.loader)
 
-    @pytest.mark.usefixtures('depends_on_current_app')
-    def test_default_backend(self, app):
-        assert backends.default_backend == app.backend
-
     def test_backend_by_url(self, app, url='redis://localhost/1'):
         from celery.backends.redis import RedisBackend
         backend, url_ = backends.get_backend_by_url(url, app.loader)
@@ -35,7 +31,7 @@ class test_backends:
         assert url_ == url
 
     def test_sym_raises_ValuError(self, app):
-        with patch('celery.backends.symbol_by_name') as sbn:
+        with patch('celery.app.backends.symbol_by_name') as sbn:
             sbn.side_effect = ValueError()
             with pytest.raises(ImproperlyConfigured):
                 backends.get_backend_cls('xxx.xxx:foo', app.loader)