def test_get_link_private(): class A: def func(self): pass def _private(): pass q = "test_get_link_private.<locals>.A" m = "test_core_linker" assert linker.get_link(A) == f"[{q}](!{m}.{q})" assert linker.get_link(A, include_module=True) == f"[{m}.{q}](!{m}.{q})" assert linker.get_link(A.func) == f"[{q}.func](!{m}.{q}.func)" assert linker.get_link(A._private) == f"{q}._private"
def parse_bases(doc: Docstring, obj: Any): """Parses base classes to create a Base(s) line.""" if not inspect.isclass(obj) or not hasattr(obj, "mro"): return objs = get_mro(obj)[1:] if not objs: return types = [get_link(obj, include_module=True) for obj in objs] items = [Item(type=Type(type)) for type in types if type] doc.set_section(Section("Bases", items=items))
def to_string(annotation, kind: str = "returns") -> str: """Returns string expression of annotation. If possible, type string includes link. Args: annotation: Annotation kind: 'returns' or 'yields' Examples: >>> from typing import Iterator, List >>> to_string(Iterator[str]) 'iterator of str' >>> to_string(Iterator[str], 'yields') 'str' >>> from mkapi.core.node import Node >>> to_string(List[Node]) 'list of [Node](!mkapi.core.node.Node)' """ if kind == "yields": if hasattr(annotation, "__args__") and annotation.__args__: return to_string(annotation.__args__[0]) else: return "" if hasattr(annotation, "__forward_arg__"): return annotation.__forward_arg__ if annotation == inspect.Parameter.empty or annotation is None: return "" name = linker.get_link(annotation) if name: return name if not hasattr(annotation, "__origin__"): return str(annotation).replace("typing.", "").lower() origin = annotation.__origin__ if origin is Union: return union(annotation) if origin is tuple: args = [to_string(x) for x in annotation.__args__] if args: return "(" + ", ".join(args) + ")" else: return "tuple" if origin is dict: if type(annotation.__args__[0]) == TypeVar: return "dict" args = [to_string(x) for x in annotation.__args__] if args: return "dict(" + ": ".join(args) + ")" else: return "dict" if hasattr(annotation, "__args__") and len(annotation.__args__) <= 1: return a_of_b(annotation) return ""