Skip to main content

在整个 Python 应用程序中全局管理配置

项目描述

gconf

在整个 Python 应用程序中全局管理配置

概述

使用 gconf,可以在模块范围内加载 yaml 配置文件,以便可以从正在运行的应用程序中的任何位置访问其值。

用法

加载 yaml 文件

一个或多个 yaml 配置文件从类似路径的对象全局加载,通常在程序的 main 函数中。生成的配置是所有已加载配置的叠加,稍后加载的配置优先。

加载单个配置文件:

gconf.load('conf.yml')

一次加载多个配置文件:

gconf.load('conf1.yml', 'conf2.yml')

一个接一个地加载多个配置文件:

gconf.load('conf1.yml')
gconf.load('conf2.yml')

上面的两个示例产生了相同的结果。在这两种情况下config2都优先于config1并覆盖其值。

每次调用load都会返回实际已加载的所有路径的列表。

从路径列表中加载第一个配置:

gconf.load_first('conf1.yml', 'conf2.yml')

如果conf1.yml存在,它会被加载并被conf2.yml忽略。如果conf1.yml不存在,conf2.yml则加载。

load_first返回实际加载的路径。

FileNotFoundError如果没有找到文件,所有加载函数都会引发 a 。这可以通过设置关键字参数来防止required=False

手动添加值

可以从应用程序内将 dict 添加到配置中。这相当于加载具有相同内容的配置文件,如果它们已经存在则覆盖值,如果不存在则添加它们。

gconf.add({'parent': {'child': 'new child'}})

警告:使用此功能,可以将 gconf 模块作为全局变量的存储。全局变量是一种代码味道,不应该使用!请gconf.add()仅在您确切知道自己在做什么的情况下使用该功能。

访问配置值

有几种方法可以寻址存储在配置中的值,所有这些方法都使用模块级get方法。

点符号

gconf.get('parent.child.some value')

字符串参数

gconf.get('parent', 'child', 'some value')

两者的混合

gconf.get('parent.child', 'some value')

顶级项目作为字典

gconf.get()['parent']['child']['some value']

一些中间项目作为字典

gconf.get('parent')['child']['some value']

要访问列表项,只需在路径中使用它们的索引

gconf.get('list.3')

默认值

get方法接受一个default参数,如果指定的项目不存在,则返回该参数:

gconf.get('non-existing', default=default_value)

这甚至适用于虚假值,如FalseNone或空字符串。

环境变量覆盖

配置值被环境变量覆盖。由于环境变量的键按照惯例是带有下划线的大写字母,因此 gconf 期望它们以这种方式出现。转换规则如下:

  1. GCONF_添加前缀以避免冲突
  2. 层次结构级别由下划线分隔
  3. 空格替换为下划线
  4. 所有文本全部大写

例子:

gconf.get 环境变量
parent.some child GCONF_PARENT_SOME_CHILD
list.0.entry GCONF_LIST_0_ENTRY

错误

如果尝试加载不存在的文件并且required=True(默认),FileNotFoundError则会引发 an。

如果没有default提供,则尝试访问不存在的项目会引发KeyError.

临时覆盖

部分配置可以通过上下文管理器临时覆盖。传递给它一个覆盖现有字典的字典:

with gconf.override_conf({'parent': {'child': 'override_value'}}):
    gconf.get('parent.child')  # => 'override_value'
gconf.get('parent.child')  # => 'original_value'

要临时删除部分配置,DELETED可以使用常量:

import gconf

with gconf.override_conf({'parent': {'child': gconf.DELETED}}):
    gconf.get('parent.child')  # => KeyError
gconf.get('parent.child')  # => 'original_value'

重置

全局 gconf 字典可以完全重置。

gconf.reset()

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

gconf-0.8.2.tar.gz (17.9 kB 查看哈希

已上传 source