Source code for pyfileconf.io.file.load.parsers.extname
import ast
from typing import List, Optional
[docs]def extract_external_name_from_assign_value(ast_node: ast.AST) -> Optional[str]:
    """
    Identifies the root part of an assignment value, so long as it is not builtin.
    Examples
    from a import b
    b -> 'b'
    b.attr -> 'b'
    import c
    c.test -> 'c'
    c.thing.stuff -> 'c'
    'abc' -> None
    123 -> None
    Args:
        ast_node: should be ast form of the value of an assignment
    Returns:
    """
    ne = NameExtractor()
    ne.visit(ast_node)
    if len(ne.names) == 0:
        return None
    if len(ne.names) > 1:
        raise ValueError(f'expected single name, got {ne.names}')
    return ne.names[0]
[docs]def extract_unique_external_names_from_assign_value(ast_node: ast.AST) -> List[str]:
    """
    Same as extract_external_name_from_assign_value but returns a list always, can return multiple names,
    and drops duplicates in the returned names
    """
    ne = NameExtractor()
    ne.visit(ast_node)
    return list(set(ne.names))