Skip to content

system

import_attr(attr_path)

Get an attribute from a module.

The attr_path should be a fully qualified path to the attribute. For example import_attr('m.core.one_of') will attempt to retrieve a handle on one_of.

Parameters:

Name Type Description Default
attr_path str

The path to the attribute.

required

Returns:

Type Description
Res[Any]

A Good containing the attribute or an issue.

Source code in m/github/actions/system.py
def import_attr(attr_path: str) -> Res[Any]:
    """Get an attribute from a module.

    The `attr_path` should be a fully qualified path to the attribute. For
    example `import_attr('m.core.one_of')` will attempt to retrieve a handle
    on `one_of`.

    Args:
        attr_path: The path to the attribute.

    Returns:
        A `Good` containing the attribute or an issue.
    """
    module_parts = attr_path.split('.')
    module_name = '.'.join(module_parts[:-1])
    item_name = module_parts[-1]
    try:
        module = import_module(module_name)
    except Exception as ex:
        return issue(
            'import_module_failure',
            cause=ex,
            context={'attr_path': attr_path, 'module_name': module_name},
        )
    module_dict = module.__dict__
    if item_name not in module_dict:
        return issue(
            'missing_attribute',
            context={'module': str(module), 'missing_attribute': item_name},
        )
    return Good(module_dict[item_name])