12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- # -*- coding: utf-8 -*-
- """
- celery.backends
- ~~~~~~~~~~~~~~~
- Backend abstract factory (...did I just say that?) and alias definitions.
- """
- from __future__ import absolute_import
- import sys
- from celery.local import Proxy
- from celery._state import current_app
- from celery.five import reraise
- from celery.utils.imports import 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',
- 'cassandra': 'celery.backends.cassandra:CassandraBackend',
- 'couchbase': 'celery.backends.couchbase:CouchBaseBackend',
- 'couchdb': 'celery.backends.couchdb:CouchDBBackend',
- 'riak': 'celery.backends.riak:RiakBackend',
- 'disabled': 'celery.backends.base:DisabledBackend',
- }
- #: deprecated alias to ``current_app.backend``.
- default_backend = Proxy(lambda: current_app.backend)
- def get_backend_cls(backend=None, loader=None):
- """Get backend class by name/alias"""
- backend = backend or 'disabled'
- loader = loader or current_app.loader
- aliases = dict(BACKEND_ALIASES, **loader.override_backends)
- try:
- return symbol_by_name(backend, aliases)
- except ValueError as exc:
- reraise(ValueError, ValueError(UNKNOWN_BACKEND.format(
- backend, exc)), sys.exc_info()[2])
- def get_backend_by_url(backend=None, loader=None):
- 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
|