From bb2cd9e375e550a046398ed0b964ff3bdeeae111 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 4 Jun 2013 14:11:29 -0700 Subject: [PATCH] task/: add args.py The usage doc string for a task is tedious to write and hard to keep reconciled with the code as defaults are changed. args.py includes a helper to put it all in one place. Signed-off-by: Samuel Just --- teuthology/task/args.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 teuthology/task/args.py diff --git a/teuthology/task/args.py b/teuthology/task/args.py new file mode 100644 index 0000000000000..fe88b06dbe413 --- /dev/null +++ b/teuthology/task/args.py @@ -0,0 +1,37 @@ +def gen_args(name, args): + usage = [""] + usage += [name + ':'] + usage += \ + [" {key}: <{usage}> ({default})".format( + key = key, usage = usage, default = default) + for (key, usage, default, _) in args] + usage.append('') + usage.append(name + ':') + usage += \ + [" {key}: {default}".format( + key = key, default = default) + for (key, _, default, _) in args] + usage = '\n'.join(' ' + i for i in usage) + def ret(config): + class Object(object): pass + obj = Object() + for (key, usage, default, conv) in args: + if key in config: + setattr(obj, key, conv(config[key])) + else: + setattr(obj, key, conv(default)) + return obj + return usage, ret + +def argify(name, args): + (usage, config_func) = gen_args(name, args) + def ret1(f): + def ret2(**kwargs): + config = kwargs.get('config', {}) + if config is None: + config = {} + kwargs['config'] = config_func(config) + return f(**kwargs) + ret2.__doc__ = f.__doc__ + usage + return ret2 + return ret1 -- 2.39.5