Module pedantic.decorators.fn_deco_rename_kwargs

Functions

def rename_kwargs(*params: Rename) ‑> Callable[[Callable[..., ~ReturnType]], Callable[..., ~ReturnType]]
Expand source code
def rename_kwargs(*params: Rename) -> Callable[[F], F]:
    """
        Renames the keyword arguments based on the given "Rename" rules when the decorated function is called.
        You can also use this to define aliases for keyword arguments.

        Example:

        >>> @rename_kwargs(
        ...     Rename(from_='firstname', to='a'),
        ...     Rename(from_='lastname', to='b'),
        ... )
        ... def my_function(a, b):
        ...     return a + ' ' + b
        >>> my_function(a='egon', b='olsen')  # the normal way
        'egon olsen'
        >>> my_function(firstname='egon', lastname='olsen')  # using new defined keyword arguments
        'egon olsen'
    """

    param_dict = {p.from_: p.to for p in params}

    def decorator(func: F) -> F:
        @wraps(func)
        def wrapper(*args, **kwargs) -> ReturnType:
            result_kwargs = {}

            for k, v in kwargs.items():
                if k in param_dict:
                    result_kwargs[param_dict[k]] = kwargs[k]
                else:
                    result_kwargs[k] = kwargs[k]

            return func(*args, **result_kwargs)
        return wrapper
    return decorator

Renames the keyword arguments based on the given "Rename" rules when the decorated function is called. You can also use this to define aliases for keyword arguments.

Example:

>>> @rename_kwargs(
...     Rename(from_='firstname', to='a'),
...     Rename(from_='lastname', to='b'),
... )
... def my_function(a, b):
...     return a + ' ' + b
>>> my_function(a='egon', b='olsen')  # the normal way
'egon olsen'
>>> my_function(firstname='egon', lastname='olsen')  # using new defined keyword arguments
'egon olsen'

Classes

class Rename (from_: str, to: str)
Expand source code
class Rename:
    def __init__(self, from_: str, to: str) -> None:
        self.from_ = from_
        self.to = to