mirror of
https://github.com/ceph/ceph
synced 2024-12-12 06:28:31 +00:00
bb2cd9e375
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 <sam.just@inktank.com>
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
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
|