| |
| """ Utilities for developers only. |
| These are not visible to users (not automatically imported). And should not |
| appeared in docs.""" |
| |
|
|
|
|
| def create_dummy_class(klass, dependency, message=""): |
| """ |
| When a dependency of a class is not available, create a dummy class which throws ImportError |
| when used. |
| |
| Args: |
| klass (str): name of the class. |
| dependency (str): name of the dependency. |
| message: extra message to print |
| Returns: |
| class: a class object |
| """ |
| err = "Cannot import '{}', therefore '{}' is not available.".format(dependency, klass) |
| if message: |
| err = err + " " + message |
|
|
| class _DummyMetaClass(type): |
| |
| def __getattr__(_, __): |
| raise ImportError(err) |
|
|
| class _Dummy(object, metaclass=_DummyMetaClass): |
| |
| def __init__(self, *args, **kwargs): |
| raise ImportError(err) |
|
|
| return _Dummy |
|
|
|
|
| def create_dummy_func(func, dependency, message=""): |
| """ |
| When a dependency of a function is not available, create a dummy function which throws |
| ImportError when used. |
| |
| Args: |
| func (str): name of the function. |
| dependency (str or list[str]): name(s) of the dependency. |
| message: extra message to print |
| Returns: |
| function: a function object |
| """ |
| err = "Cannot import '{}', therefore '{}' is not available.".format(dependency, func) |
| if message: |
| err = err + " " + message |
|
|
| if isinstance(dependency, (list, tuple)): |
| dependency = ",".join(dependency) |
|
|
| def _dummy(*args, **kwargs): |
| raise ImportError(err) |
|
|
| return _dummy |
|
|