in chz/tiepin.py [0:0]
def __init__(self, fn: typing.Callable, strip_self: bool = False):
self.fn = fn
self._sig = inspect.signature(fn)
self.pos = []
self.kwonly = {}
self.varpos = None
self.varkw = None
for param in self._sig.parameters.values():
if param.kind in {param.POSITIONAL_OR_KEYWORD, param.POSITIONAL_ONLY}:
self.pos.append(param)
elif param.kind is param.KEYWORD_ONLY:
self.kwonly[param.name] = param
elif param.kind is param.VAR_POSITIONAL and param.name != "__chz_args":
self.varpos = param
elif param.kind is param.VAR_KEYWORD:
self.varkw = param
if strip_self:
if self.pos[0].name != "self":
raise ValueError(f"Cannot strip self from signature of {self.fn}")
self.pos = self.pos[1:]
self.ret = self._sig.return_annotation
if isinstance(self.ret, str):
self.ret = eval_in_context(self.ret, self.fn)