Skip to content

get_api

Source code in src/library_analyzer/processing/api/_get_api.py
def get_api(
    package_name: str,
    root: Path | None = None,
    docstring_style: DocstringStyle = DocstringStyle.PLAINTEXT,
) -> API:
    if root is None:
        root = package_root(package_name)
    dist = distribution(package_name) or ""
    dist_version = distribution_version(dist) or ""
    files = package_files(root)

    api = API(dist, package_name, dist_version)
    docstring_parser = create_docstring_parser(docstring_style)
    callable_visitor = _AstVisitor(docstring_parser, api)
    walker = ASTWalker(callable_visitor)

    for file in files:
        posix_path = Path(file).as_posix()
        logging.info(
            "Working on file {posix_path}",
            extra={"posix_path": posix_path},
        )

        if _is_test_file(posix_path):
            logging.info("Skipping test file")
            continue

        with Path(file).open(encoding="utf-8") as f:
            source = f.read()
            walker.walk(astroid.parse(source, module_name=__module_name(root, Path(file)), path=file))

    return callable_visitor.api