python应用程序配置
bison的Python项目详细描述
野牛
Python应用程序配置
什么是野牛?
bison是一个针对python应用程序的配置解决方案,其目标是简单 和直觉。它支持:
- 读取yaml配置文件
- 读取环境变量
- 设置显式值
- 设置默认值
- 配置验证
- 使用点符号进行配置访问/操作
您可以使用 野牛帮你处理。
野牛的灵感来自Viper和缺乏好的 python的应用程序配置解决方案(至少在我看来)。文档 因为野牛可以在ReadtheDocs
野牛使用下列优先顺序。列表中的每一项都具有优先权 在下面的项目上。
- 覆盖(例如,调用
Bison.set()
) - 环境
- 配置文件
- 默认值
安装
bison可以用pip
pip install bison
或者用pipenv
pipenv install bison
使用bison
创建配置方案
bison不需要配置方案,但是有一个配置方案允许您设置默认值 配置字段的值以及进行配置验证。这很容易 创建新方案:
scheme=bison.Scheme()
方案实际上只是配置选项的容器,因此如果没有任何选项, 这个计划有点没用。
配置选项
目前有三种配置选项:
bison.Option
bison.DictOption
bison.ListOption
从他们的名字来看,他们想要的功能应该是显而易见的。一个Option
表示
配置中的一个奇异值。DictOption
表示值的字典或映射
在一个配置中。ListOption
表示配置中的值列表。
有关如何配置选项的详细信息,请参见documentation。
可以向方案添加任意数量的选项,但作为一个简单的示例,我们可以定义一个方案 它需要一个键“log”和一个键“count”。
scheme=bison.Scheme(bison.Option('log'),bison.Option('count'),)
配置验证
验证操作基于对选项设置的约束。上面,没有 约束(除了需要这些密钥存在),所以“日志”的任何值和 “count”将通过验证。
选项可以通过使用其关键字参数以不同的方式进行约束。例如, 要确保“count”的值是整数,
bison.Option('count',field_type=int)
或者,将值限制为一组选项
bison.Option('log',choices=['debug','info','warn','error'])
documentation详细介绍了其他验证设置。
设置默认值
如果未对选项设置默认值,则认为该值是必需的。在这些情况下, 如果该值指定的密钥不在解析配置中,则它将 导致验证失败。
如果设置了默认值,则配置中没有该字段将不会 导致验证失败。
bison.Option('log',default='info')
配置bison
一旦你有一个计划要使用(如果你愿意的话),它将需要被传递给一头野牛。 对象来管理配置生成。
scheme=bison.Scheme()config=bison.Bison(scheme)
可以在bison对象上设置几个选项来更改它 搜索并生成统一配置。
用于读取配置文件
config.config_name='config'# name of the config file (no extension)config.add_config_paths(# paths to look in for the config file'.','/tmp/app')config.config_format=bison.YAML# the config format to use
用于读取环境变量
config.env_prefix="MY_APP"# the prefix to use for environment variablesconfig.auto_env=True# automatically bind all options to env variables based on their key
构建统一配置
一旦方案被设置(如果使用)并且野牛被配置,唯一的事情 剩下要做的就是读入所有的配置源并将它们解析为一个统一的配置。 这只需使用
config.parse()
示例
下面是一个完整的示例,用于分析假设的应用程序配置 由下面的yaml配置描述。
^{公关12}$importbison# the scheme for the configuration. this allows us to set defaults# and validate configuration dataconfig_scheme=bison.Scheme(bison.Option('log',default='info',choices=['debug','info','warn','error']),bison.Option('port',field_type=int),bison.DictOption('settings',scheme=bison.Scheme(bison.DictOption('requests',scheme=bison.Scheme(bison.Option('timeout',field_type=int))))),bison.ListOption('backends',member_scheme=bison.Scheme(bison.Option('host',field_type=str),bison.Option('port',field_type=int))))# create a new Bison instance to store and manage configuration dataconfig=bison.Bison(scheme=config_scheme)# set the config file name to 'app' (default is 'config') and set the# search paths to '.' and '/tmp/app/config'config.config_name='app'config.add_config_paths('.','/tmp/app/config')# set the environment variable prefix and enable auto-envconfig.env_prefix='MY_APP'config.auto_env=True# finally, parse the config sources to build the unified configurationconfig.parse()
有关此示例和演示,请参见example目录 如何访问配置数据。
未来工作
为了改进bison并扩展其功能,还可以做更多的工作。如果 如果您想贡献,请打开一个拉取请求。如果您有问题或功能要求, 打开一个问题。下面是一些未来改进的高层次想法:
- 支持其他配置格式(json、toml,…)
- 版本化配置