in core/util.py [0:0]
def walk_params(pipe):
from inspect import signature
from . import Pipe
def _walk_ann(ann, default, empty):
if isinstance(ann, type):
if issubclass(ann, Pipe.Context):
yield from _walk_context(ann)
return
node = None
help = None
notes = None
args = get_args(ann)
for arg in args:
if isinstance(arg, Pipe.Node):
node = arg
if isinstance(arg, Pipe.Help):
help = arg.help
if isinstance(arg, Pipe.Notes):
notes = arg.notes
if node:
yield node, help, notes, args[0], default, empty
def _walk_context(ctx):
for name, ann in ctx.__annotations__.items():
default = getattr(ctx, name, NoDefault)
yield from _walk_ann(ann, default, NoDefault)
for param in signature(pipe.func).parameters.values():
yield from _walk_ann(param.annotation, param.default, param.empty)