Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/kombu/utils/imports.py : 48%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""Import related utilities."""
2from __future__ import absolute_import, unicode_literals
4import importlib
5import sys
7from kombu.five import reraise, string_t
10def symbol_by_name(name, aliases=None, imp=None, package=None,
11 sep='.', default=None, **kwargs):
12 """Get symbol by qualified name.
14 The name should be the full dot-separated path to the class::
16 modulename.ClassName
18 Example::
20 celery.concurrency.processes.TaskPool
21 ^- class name
23 or using ':' to separate module and symbol::
25 celery.concurrency.processes:TaskPool
27 If `aliases` is provided, a dict containing short name/long name
28 mappings, the name is looked up in the aliases first.
30 Examples:
31 >>> symbol_by_name('celery.concurrency.processes.TaskPool')
32 <class 'celery.concurrency.processes.TaskPool'>
34 >>> symbol_by_name('default', {
35 ... 'default': 'celery.concurrency.processes.TaskPool'})
36 <class 'celery.concurrency.processes.TaskPool'>
38 # Does not try to look up non-string names.
39 >>> from celery.concurrency.processes import TaskPool
40 >>> symbol_by_name(TaskPool) is TaskPool
41 True
42 """
43 aliases = {} if not aliases else aliases
44 if imp is None:
45 imp = importlib.import_module
47 if not isinstance(name, string_t):
48 return name # already a class
50 name = aliases.get(name) or name
51 sep = ':' if ':' in name else sep
52 module_name, _, cls_name = name.rpartition(sep)
53 if not module_name:
54 cls_name, module_name = None, package if package else cls_name
55 try:
56 try:
57 module = imp(module_name, package=package, **kwargs)
58 except ValueError as exc:
59 reraise(ValueError,
60 ValueError("Couldn't import {0!r}: {1}".format(name, exc)),
61 sys.exc_info()[2])
62 return getattr(module, cls_name) if cls_name else module
63 except (ImportError, AttributeError):
64 if default is None:
65 raise
66 return default