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