跳转到主要内容

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 (45.7 kB 查看哈希)

上传于 源代码

构建版本

bison-0.1.3-py2.py3-none-any.whl (24.4 kB 查看哈希值)

上传于 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面