简单配置管理应用

config-source的Python项目详细描述


https://travis-ci.org/LudditeLabs/config-source.svg?branch=master

此包提供了从各种源加载的可扩展配置。

功能:

  • 类似dict的配置加载自:
    • python词典
    • python对象
    • python文件
    • 环境变量
    • json文件
  • 自定义配置源和对象。

基本上,config-source提供了注册配置加载程序和 直呼他们的名字。加载程序接受可选参数,读取配置 从特定源并填充配置对象。

示例:

from config_source import DictConfig
from config_source import DictConfigLoader

config = DictConfig()
config.load_from('pyfile', '/path/to/config.py')
config.load_from('json', '/path/to/config.json')
config.load_from('env', prefix='MYCFG_')

loader = DictConfigLoader(config)
loader.load('/path/to/config.py')
loader.load('/path/to/config.json')
loader.load(SomeClassWithConfigs)

用法

开箱即用:

  • 低级load_to()函数。
  • DictConfig类。
  • DictConfigLoader类来帮助加载配置。

load_to()调用为特定源注册的加载程序并填充 传递给它的配置对象:

load_to(config, 'source_name', ...)
  • config-要填充的配置对象。
  • source_name-配置源名称。

DictConfig的行为类似于普通的python字典,并提供 load_from方法从不同的源加载配置(它使用 load_to()内部):

config = DictConfig()
config.load_from(<source_name>, *args, **kwargs)
  • <source_name>-配置源名称;
  • *args**kwargs-配置加载器的参数。

以下是dict-like的现成资源 配置。

notedict like表示任何具有映射接口的对象都可以用作 配置对象:

config = {}
load_to(config, 'env', ...)

dictconfig = DictConfig()
dictconfig.load_from('env', ...)
load_to(dictconfig, 'env', ...)
  • object-从python加载配置object。它读取属性 大写名称:

    config.load_from('object', <object>)
    

    示例:

    class MyConfig:
        SECRET_KEY = 123
        DEBUG = False
    
    ...
    
    config.load_from('object', MyConfig)
    
  • dict-从python字典加载配置。只读大写 按键:

    config.load_from('dict', <dict>)
    

    示例:

    myconfig = dict(SECRET_KEY=123, DEBUG=False)
    config.load_from('dict', myconfig)
    
  • env-从当前运行时环境加载配置:

    config.load_from('env', prefix=<name_prefix>, trim_prefix=True)
    
    • prefix-环境变量名称前缀。
    • trim_prefix-包含或不包含结果配置名称的前缀

    示例:

    # Load vars with names MYCFG_*, like MYCFG_SECRET.
    config.load_from('env', prefix='MYCFG_')
    
  • pyfile-从python文件加载配置。只读大写 属性:

    config.load_from('env', filename, silent=False)
    
    • filename-要加载的文件名。
    • silent-不要对丢失的文件引发错误。

    示例:

    config.load_from('pyfile', 'config.py')
    
  • json-从json文件加载配置。只读大写键:

    config.load_from('json', filename, silent=False)
    
    • filename-要加载的文件名。
    • silent-不要对丢失的文件引发错误。

    示例:

    config.load_from('json', '/path/to/config.json')
    

DictConfigLoaderauto从输入配置源检测源名称:

loader = DictConfigLoader(config)
loader.load('/path/to/file.py')

# Same as:
config.load_from('pyfile', '/path/to/file.py')

您可以子类化以扩展自动检测。

添加源

config_sourcedecorator用于注册附加配置 来源:

from config_source import config_source

@config_source('source_name')
def myloader(config, arg1, arg2):
    config['XX'] = arg1 + arg2

config.load_from('source_name', 1, arg2=2)

配置加载器必须是可调用的,至少有一个参数- 要填充的配置对象。其他参数是可选的和特定于加载程序的。

有可能通过实现 带入口点的包裹:

setup(
    ...
    entry_points={'config_source.sources': '<source> = <package name>'},
    ...
)

在包中使用config_sourcedecorator。

有关入口点的详细信息,请参见

note:即使包添加了 多种来源。

默认值

而不是总是将参数传递给您可以设置的配置加载程序 默认值在DictConfig

config = DictConfig(defaults={
    'env': {'prefix': 'MYAPP_'},
    'pyfile': {'filename': '/path/to/file.py'}
})

# 'prefix' will be set to MYAPP_ for 'env' config source.
# Load from 'MYAPP_*' vars by default.
config.load_from('env')

# Load from 'MY_*' vars
config.load_from('env', 'MY_')

# Load from '/path/to/file.py' by default.
config.load_from('pyfile')

# Load from '/path/to/another/file.py'.
config.load_from('pyfile', '/path/to/another/file.py')

defaults是一个映射,其中键是源名称,值是关键字 要传递给加载程序的参数。

自定义配置类型

您可以为特定类型注册配置源 (默认为adict):

@config_source('source_name', config_type='mytype')
def mytype_loader(config):
    ....

config_type这里是定义配置对象类型的字符串。

现在填充配置对象使用加载程序:

load_to(config, 'source_name', config_type='mytype')

其中config是实现mytype接口的对象。

list配置示例:

from config_source import config_source, load_to


@config_source('object', config_type='list')
def object_loader(config, obj):
has = False
for key in dir(obj):
    if key.isupper():
        has = True
        config.append(getattr(obj, key))
return has


class MyConfig:
    SECRET = 1
    DEBUG = False


cfg = []
load_to(cfg, 'object', config_type='list')

# cfg = [1, False]

# Fails because by default it calls loader for 'dict' configuration.
# load_to(cfg, 'object')

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

推荐PyPI第三方库


热门话题
java如何使用从PreparedStatement返回的RowId。getGeneratedKeys()?   selenium chrome驱动程序中下一个网站url的java空白页   java如何将参数化匿名类转换为lambda?   java JUnit在AfterClass上获取测试结果   java将动态XML/JSON内容与静态标记化负载进行比较,并检索标记值   java共享一个需要数据持久性的项目[数据库]   java在调用方法时获取意外的参数类型。getParameterTypes()   java如何用jdbc在swing中用另一个字段替换外键?   需要java Jersey Tomcat CDI依赖项解释   java如何生成UML图   java如何编写Jersey rest服务可以通过给定的spring代码访问   SpringMaven存储库管理器Nexus与Java依赖项的Artifactory   java将包从另一个项目导入eclipse中的当前项目   加密Java使用密码加密文件