Source code for aiida_vasp.utils.delegates

"""
Delegate types.

Module containing decorators and classes implementing delegate types.
"""

from __future__ import annotations

from functools import update_wrapper
from typing import Any, Callable, TypeVar

F = TypeVar('F', bound=Callable[..., Any])


[docs] def delegate_method_kwargs(prefix: str = '_init_with_') -> Callable[[F], F]: """ Get a kwargs delegating decorator. :params prefix: (str) common prefix of delegate functions """ def decorator(meth: F) -> F: """Decorate a class method to delegate kwargs.""" def wrapper(*args: Any, **kwargs: Any) -> Any: for kwarg, value in kwargs.items(): getattr(args[0], prefix + kwarg)(value) meth(*args, **kwargs) update_wrapper(wrapper, meth) return wrapper return decorator