Source code for blocks.utils.reflection
import logging
import emloop as el
__all__ = ['try_import']
[docs]def try_import(class_fqn: str) -> type:
"""
Try to import and return the specified class. If it fails return an empty class instead.
.. code-block:: python
:caption: example usage with **hipipe** dataset
import blocks as bl
class OdoCapDataset(bl.utils.try_import('my_module.Dataset'),
bl.datasets.RectangleRPNDataset,
metaclass=bl.utils.classmaker()):
:param class_fqn: class fully qualified name
:return: specified class or an empty class
"""
module, name = el.utils.parse_fully_qualified_name(class_fqn)
try:
class_ = el.utils.get_attribute(module, name)
return class_
except (ModuleNotFoundError, AttributeError):
logging.warning('Could not import class `%s` from module `%s`. Creating `ObjectProxy` class instead.',
name, module)
class EmptyClass:
pass
return EmptyClass