def decorator(decorated: F) -> F: # collecting docstring and docstring templates docstring_components: list[str | Callable] = [] if decorated.__doc__: docstring_components.append(dedent(decorated.__doc__)) for docstring in docstrings: if hasattr(docstring, "_docstring_components"): # error: Item "str" of "Union[str, Callable[..., Any]]" has no attribute # "_docstring_components" # error: Item "function" of "Union[str, Callable[..., Any]]" has no # attribute "_docstring_components" docstring_components.extend( docstring._docstring_components # type: ignore[union-attr] ) elif isinstance(docstring, str) or docstring.__doc__: docstring_components.append(docstring) # formatting templates and concatenating docstring decorated.__doc__ = "".join( [ component.format(**params) if isinstance(component, str) else dedent(component.__doc__ or "") for component in docstring_components ] ) # error: "F" has no attribute "_docstring_components" decorated._docstring_components = ( # type: ignore[attr-defined] docstring_components ) return decorated
def decorator(decorated: F) -> F: # collecting docstring and docstring templates_old docstring_components: List[Union[str, Callable]] = [] if decorated.__doc__: docstring_components.append(dedent(decorated.__doc__)) for docstring in docstrings: if hasattr(docstring, "_docstring_components"): docstring_components.extend( docstring._docstring_components # type: ignore ) elif isinstance(docstring, str) or docstring.__doc__: docstring_components.append(docstring) # formatting templates_old and concatenating docstring decorated.__doc__ = "".join([ component.format(**params) if isinstance(component, str) else dedent(component.__doc__ or "") for component in docstring_components ]) decorated._docstring_components = docstring_components # type: ignore return decorated