def trait_to_option(name, trait):
if is_trait(trait):
if isinstance(trait, Int):
return click.Option(param_decls=('--' + name,),
default=trait.default_value,
type=click.IntRange(trait.min, trait.max))
elif isinstance(trait, Float):
return click.Option(param_decls=('--' + name,),
default=trait.default_value,
type=float)
elif isinstance(trait, Complex):
return click.Option(param_decls=('--' + name,),
default=trait.default_value,
type=complex)
elif isinstance(trait, Bool):
return click.Option(param_decls=('--' + name,),
default=trait.default_value,
is_flag=True)
elif isinstance(trait, Unicode):
return click.Option(param_decls=('--' + name,),
default=trait.default_value,
type=str)
elif isinstance(trait, Enum):
# FIXME: trait.values should be strings
return click.Option(param_decls=('--' + name,),
default=str(trait.default_value),
type=click.Choice(list(map(str, trait.values))))
elif isinstance(trait, Tuple):
return click.Option(param_decls=('--' + name,),
default=trait.default_value,
type=tuple(
trait_to_type(t) for t in trait._traits))
else:
raise InvalidValue('Trait conversion is not supported for: '
'{}'.format(trait))
else:
raise InvalidType('Trait should be instance of {}'.format(TraitType))
评论列表
文章目录