|
|
|
""" 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 |
|
|