From f90b297ac7d205e07b93babedb95776bc78b6dbf Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 17 May 2024 22:15:13 -0400 Subject: [PATCH] Add broken transformer. --- jaraco/functools/__init__.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/jaraco/functools/__init__.py b/jaraco/functools/__init__.py index d66f1af..631ff23 100644 --- a/jaraco/functools/__init__.py +++ b/jaraco/functools/__init__.py @@ -639,3 +639,27 @@ def splat(func): {'msg': 'unknown', 'code': 0} """ return functools.wraps(func)(functools.partial(_splat_inner, func=func)) + + +def transform_params(**replacements): + """ + Decorate a function with replacement functions for parameters. + + >>> none_as_colon = lambda val: val or ':' + >>> transform_params(sep=none_as_colon)(print)('foo', 'bar', sep=None) + foo:bar + """ + + def wrap(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + sig = inspect.signature(func) + bsig = sig.bind(*args, **kwargs) + args = bsig.arguments + for arg in replacements: + args[arg] = replacements[arg](args[arg]) + return func(**args) + + return wrapper + + return wrap