我目前正在为多种服务编写数据收集服务.可能有5个不同的API端点具有不同的主机和端口号.我想为此创建一个设置文件,但认为.ini应该是一个更好的地方,或者我认为 ......
我的development.ini看起来像这样:
[app:main]
use = egg:awesomeproject
auth.tkt = 'abc'
auth.secret = 'I love python'
mongodb.host = 'somehost'
mongodb.port= 6379
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543
[user:sg:qa]
host = 127.0.0.1
port = 1234
[customer:sg:qa]
host = 127.0.0.2
port = 4567
Run Code Online (Sandbox Code Playgroud)
我试图访问金字塔事件中的自定义部分,如下所示:
def add_api_path(event):
request = event.request
settings = request.registry.settings
_type = 'customer:sg:qa'
base_config = settings[_type]
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为设置实际上是[app:main]属性的字典.有人可以教我如何访问金字塔方式的部分吗?我用另一种方式阅读,使用ConfigParser,但我想问一下金字塔中是否还有其他更简单的方法.
如果你想这样做,你必须自己解析配置文件.您所看到的部分隔离行为是故意的.
def main(global_conf, **settings):
parser = ConfigParser({'here': global_conf['__here__']})
parser.read(global_conf['__file__'])
for k, v in parser.items('user:sg:qa'):
settings['user:sg:qa:' + k] = v
config = Configurator(settings=settings)
Run Code Online (Sandbox Code Playgroud)
然后您可以获取设置:
request.registry.settings['user:sg:qa:host']
Run Code Online (Sandbox Code Playgroud)
更新
在Pyramid 1.9中,ini解析是可插入的,并且创建了一个新库以帮助以标准方式加载文件的任意部分.以下是更新的示例:
import plaster
def main(global_conf, **settings):
user_settings = plaster.get_settings(global_conf['here'], 'user:sg:qa')
for k, v in user_settings.items():
settings['user:sg:qa:' + k] = v
config = Configurator(settings=settings)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |