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 set_function_name(f: F, name: str, cls) -> F: """ Bind the name/qualname attributes of the function. """ f.__name__ = name f.__qualname__ = f"{cls.__name__}.{name}" f.__module__ = cls.__module__ return f
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
def decorate(func: F) -> F: @wraps(func) def wrapper(*args, **kwargs) -> Callable[..., Any]: return func(*args, **kwargs) kind = inspect.Parameter.POSITIONAL_OR_KEYWORD params = [ inspect.Parameter("self", kind), inspect.Parameter(name, kind, default=None), inspect.Parameter("index", kind, default=None), inspect.Parameter("columns", kind, default=None), inspect.Parameter("axis", kind, default=None), ] for pname, default in extra_params: params.append(inspect.Parameter(pname, kind, default=default)) sig = inspect.Signature(params) # https://github.com/python/typing/issues/598 func.__signature__ = sig # type: ignore return cast(F, wrapper)
def __call__(self, func: F) -> F: func.__doc__ = func.__doc__ if func.__doc__ else "" self.addendum = self.addendum if self.addendum else "" docitems = [func.__doc__, self.addendum] func.__doc__ = dedent(self.join.join(docitems)) return func
def __call__(self, func: F) -> F: func.__doc__ = func.__doc__ and func.__doc__ % self.params return func