Python应用程序配置
项目描述
Bison
Python应用程序配置
什么是 Bison?
Bison 是一个旨在简单直观的 Python 应用程序配置解决方案。它支持
- 从 YAML 配置文件中读取
- 从环境变量中读取
- 设置显式值
- 设置默认值
- 配置验证
- 使用点表示法访问/操作配置
您无需实现自定义配置读取和解析,可以使用 Bison 来处理。
Bison 受到 Viper 以及 Python 中缺少好的应用程序配置解决方案(至少,据我所知)的启发。Bison 的文档可以在 ReadtheDocs 上找到
Bison 使用以下优先级顺序。列表中的每个项目都比下面的项目具有更高的优先级。
- 覆盖(例如,调用
Bison.set()
) - 环境
- 配置文件
- 默认值
安装
您可以使用 pip
安装 Bison
pip install bison
或使用 pipenv
pipenv install bison
使用 Bison
创建配置方案
配置方案对 Bison 不是必需的,但它允许您为配置字段设置默认值以及进行配置验证。创建新的方案非常简单
scheme = bison.Scheme()
方案实际上只是一个配置选项的容器,因此如果没有任何选项,方案就有些无用了。
配置选项
目前有三种配置选项类型
bison.Option
bison.DictOption
bison.ListOption
它们的功能主要可以从其名称中看出。一个 Option
代表配置中的一个单一值。一个 DictOption
代表配置中的一个值字典或映射。一个 ListOption
代表配置中的一个值列表。
有关选项配置的更多详细信息,请参阅文档。
可以将任意数量的选项添加到Scheme中,但作为一个简单的例子,我们可以定义一个Scheme,它期望有一个名为“log”的键和一个名为“count”的键。
scheme = bison.Scheme(
bison.Option('log'),
bison.Option('count'),
)
配置验证
验证基于选项上设置的约束。在上面,没有设置约束(除了那些键必须存在之外),所以“log”和“count”的任何值都将通过验证。
可以通过其关键字参数以不同的方式对选项进行约束。例如,为确保“count”的值为整数,
bison.Option('count', field_type=int)
或者,将值限制为一系列选项
bison.Option('log', choices=['debug', 'info', 'warn', 'error'])
文档详细介绍了其他验证设置。
设置默认值
如果未在选项上设置默认值,则认为它是必需的。在这些情况下,如果指定的键在解析配置中不存在,将导致验证失败。
如果设置了默认值,则配置中缺少该字段不会导致验证失败。
bison.Option('log', default='info')
配置Bison
一旦有了要使用的Scheme(如果您想的话),它需要传递给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 variables
config.auto_env = True # automatically bind all options to env variables based on their key
构建统一配置
一旦设置了方案(如果使用)并且配置了Bison,剩下的唯一事情就是读取所有配置源并将它们解析为一个统一配置。这可以通过以下方式简单地完成
config.parse()
示例
以下是一个完整的示例,用于解析由以下YAML配置描述的假设应用程序配置。
log: debug
port: 5000
settings:
requests:
timeout: 3
backends:
- host: 10.1.2.3
port: 5001
- host: 10.1.2.4
port: 5013
- host: 10.1.2.5
port: 5044
import bison
# the scheme for the configuration. this allows us to set defaults
# and validate configuration data
config_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 data
config = 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-env
config.env_prefix = 'MY_APP'
config.auto_env = True
# finally, parse the config sources to build the unified configuration
config.parse()
有关此示例以及如何访问配置数据的演示,请参阅示例目录。
未来工作
还有更多可以做的事情来改进Bison并扩展其功能。如果您想贡献,请发起一个拉取请求。如果您有疑问或功能请求,请发起一个问题。以下是一些未来改进的高级想法
- 支持其他配置格式(JSON、TOML等)
- 版本化配置
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建版本
bison-0.1.3.macosx-10.15-x86_64.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4b7ce2fb4ed2cbddb2dff604c34b6f4251dd8d6d178e50b3069ab623f0a8a2f6 |
|
MD5 | a4609c5ede7b71836cdc1b4d80c9957d |
|
BLAKE2b-256 | 7eca24c64e66d81924aeaee9db3085f0d5a355463fb8c1a187e441e5e1e68797 |
bison-0.1.3-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 323e9613c7aa38319b4319e61a14f4b582785f0d568025c11633f32423f195c8 |
|
MD5 | bce2be931ae319dd249d2a704ec51cee |
|
BLAKE2b-256 | cf26420810309eda0aafe7c89d2f35028f5bdcdb8a8d6583c107752a033bafe6 |