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,…)
  • 版本化配置

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带Maven的Eclipse Java存储库:缺少工件:compile   java如何以编程方式停止RMI服务器并通知所有客户端   java Roboguice抛出ClassNotFoundException:AnnotationDatabaseImpl   java为什么lucene 4.0删除IndexWriter类的两个构造函数?   nls如何避免java项目上不需要的日志消息?   测试无法在Selenium Webdriver(java)中定位iframe   使用XML的java servlet   java如何使用jxl用****屏蔽单元格   java使用SQLite从数据库中选择“没有这样的列”   导入扫描程序后出现java编译错误   插入查询的java空指针异常   使用创建PostgreSQL数据库。Java应用中的sql脚本   java使用jsoup将HTML解析为格式化的明文