in bowler/query.py [0:0]
def selector(pattern: str) -> Callable[[QM], QM]:
def wrapper(fn: QM) -> QM:
selector = fn.__name__.replace("select_", "").lower()
SELECTORS[selector] = pattern
signature = inspect.signature(fn)
arg_names = list(signature.parameters)[1:]
@wraps(fn)
def wrapped(self: Q, *args, **kwargs) -> Q:
for arg, value in zip(arg_names, args):
if hasattr(value, "__name__"):
kwargs["source"] = value
kwargs[arg] = value.__name__
else:
kwargs[arg] = str(value)
if "name" in kwargs:
kwargs["dotted_name"] = " ".join(quoted_parts(kwargs["name"]))
kwargs["power_name"] = " ".join(power_parts(kwargs["name"]))
self.transforms.append(Transform(selector, kwargs))
return self
return wrapped
return wrapper