"""Backend selection."""importsysimporttypesfromcelery._stateimportcurrent_appfromcelery.exceptionsimportImproperlyConfigured,reraisefromcelery.utils.importsimportload_extension_class_names,symbol_by_name__all__=('by_name','by_url')UNKNOWN_BACKEND="""Unknown result backend: {0!r}. Did you spell that correctly? ({1!r})"""BACKEND_ALIASES={'rpc':'celery.backends.rpc.RPCBackend','cache':'celery.backends.cache:CacheBackend','redis':'celery.backends.redis:RedisBackend','rediss':'celery.backends.redis:RedisBackend','sentinel':'celery.backends.redis:SentinelBackend','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','cosmosdbsql':'celery.backends.cosmosdbsql:CosmosDBSQLBackend','riak':'celery.backends.riak:RiakBackend','file':'celery.backends.filesystem:FilesystemBackend','disabled':'celery.backends.base:DisabledBackend','consul':'celery.backends.consul:ConsulBackend','dynamodb':'celery.backends.dynamodb:DynamoDBBackend','azureblockblob':'celery.backends.azureblockblob:AzureBlockBlobBackend','arangodb':'celery.backends.arangodb:ArangoDbBackend','s3':'celery.backends.s3:S3Backend','gs':'celery.backends.gcs:GCSBackend',}
[文档]defby_name(backend=None,loader=None,extension_namespace='celery.result_backends'):"""Get backend class by name/alias."""backend=backendor'disabled'loader=loaderorcurrent_app.loaderaliases=dict(BACKEND_ALIASES,**loader.override_backends)aliases.update(load_extension_class_names(extension_namespace))try:cls=symbol_by_name(backend,aliases)exceptValueErrorasexc:reraise(ImproperlyConfigured,ImproperlyConfigured(UNKNOWN_BACKEND.strip().format(backend,exc)),sys.exc_info()[2])ifisinstance(cls,types.ModuleType):raiseImproperlyConfigured(UNKNOWN_BACKEND.strip().format(backend,'is a Python module, not a backend class.'))returncls
[文档]defby_url(backend=None,loader=None):"""Get backend class by URL."""url=Noneifbackendand'://'inbackend:url=backendscheme,_,_=url.partition('://')if'+'inscheme:backend,url=url.split('+',1)else:backend=schemereturnby_name(backend,loader),url