将额外元数据集成到 attr.ib()
项目描述
将额外元数据集成到 attr.ib()
示例
希望以后能提供更好的示例,但现在,这里有一样东西。
一个在 #python 中的开发者对通过 click 构建attrs定义的配置对象感兴趣。这是针对此问题的一个基本解决方案,其中click选项通过自定义exttr关键字参数click=在attrs类的属性中定义。
import collections
import sys
import attr
import click
import exttr
exttr.register_keywords(
    exttr.Keyword(name='click'),
)
@attr.s
class Configuration:
    foo = exttr.ib(click=click.option('--red'))
def main(configuration):
    print(configuration)
def clicked_fields(cls):
    fields = collections.OrderedDict()
    for field in attr.fields(cls):
        decorator = exttr.get(cls, field.name, 'click')
        if decorator is None:
            continue
        fields[field.name] = decorator
    return fields
def build_click(f, cls, command_or_group):
    fields = clicked_fields(cls)
    def cli(*args, **kwargs):
        configuration = cls(*args, **kwargs)
        return f(configuration)
    for name, decorator in reversed(fields.items()):
        before = getattr(cli, '__click_params__', [])
        cli = decorator(cli)
        after = getattr(cli, '__click_params__', [])
        new = after[len(before):]
        if len(new) == 1:
            new, = new
            new.name = name
    return command_or_group(cli)
click_main = build_click(
    f=main,
    cls=Configuration,
    command_or_group=click.command(),
)
sys.argv[1:] = ['--red', 'burgundy']
try:
    click_main()
except SystemExit:
    pass输出
Configuration(foo='burgundy')项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
         exttr-2019.2.2.tar.gz  (20.7 kB 查看散列)
      
    构建发行版
         exttr-2019.2.2-py3-none-any.whl  (6.6 kB 查看哈希值)
      
    
    
       关闭
    
      
        
    
    
  
exttr-2019.2.2.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 961c733f3ea00727f099904a4279fd44551754913c3aeed910837bf4ed0f7e45 | |
| MD5 | f1573fa6b294875d1d04cd1bb193a15f | |
| BLAKE2b-256 | ef6cb5872c040b75ce5b447c41ab9abedc6bcdb243a53734ae6a91bab1b072c8 | 
    
       关闭
    
      
        
    
    
  
exttr-2019.2.2-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5b6898fc3d9db71614805cd09ca7490495fa65a0580a2ad58c9ad9778913e468 | |
| MD5 | 7de8bb2afe6ddffa7f7ae3b49e953737 | |
| BLAKE2b-256 | c9ce4c1b8fb5be4aae1570c438c7162296e1c7a3a247bd65a2521af0d216ec1a |