金字塔:将杂项配置发送到应用程序工厂

时间:2013-03-07 14:03:11

标签: python configuration-files pyramid

我已经设置了Pyramid配置文件,如下所示:

[app:main]
...

[server:main]
...


[memcache]
# memcache config

[zeromq]
# zeromq xonfig

现在在我的app_factory内,我希望获得所有配置 - 不仅包括app:main部分,还包括memcachezeromq和其他可能的部分。< / p>

我该怎么做。

我将配置分成不同部分的原因是因为我的应用程序使用了大量不同的服务而且我不想将所有配置拼凑到app:main部分。

执行此操作的一种方法是通过读取配置文件手动将配置拉入应用程序。然后你必须知道应用程序运行的模式(开发或生产)。此外,还有多次解析配置的开销(因为粘贴部署将首先执行此操作)。

对此有更好,更优雅的解决方案吗?

2 个答案:

答案 0 :(得分:2)

不幸的是,如果你想采用这种方法,你将不得不再次解析配置文件。您可以通过config_file = global_config['__file__']中的main抓取该文件,然后使用stdlib ConfigParser自行解析。

如果您喜欢这种带有单独部分的INI格式,Mozilla服务有一个很好的小模块,您可以使用它来为您处理所有这些。它确实进行了值转换(尝试将值转换为整数或布尔值)。它支持使用其他部分扩展您的配置,例如[foo:bar] key = value,在解析时会返回一个包含settings['foo.bar.key'] == value的简单字典。它也可以方便地为你解析这个东西,所以你的主要看起来像:

def main(global_config, **settings):
    config = get_configurator(global_config, **settings)
    settings = config.registry.settings
    # ... do your app configuration
    return config.make_wsgi_app()

https://wiki.mozilla.org/index.php?title=Services/Sync/Server/GlobalConfFile https://github.com/mozilla-services/mozservices/blob/master/mozsvc/config.py

答案 1 :(得分:0)

您可以将特定于应用程序的配置传递到ini文件中:

[app:xyz]
    something = True

然后在main函数(应用程序工厂)中,您可以将其作为

进行访问
settings['something']

更多信息:

http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html#adding-a-custom-setting