python - 如何访问 Pyramid .ini 文件中的自定义部分?

标签 python pyramid

我目前正在为多个服务编写数据收集服务。可能有 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

我试图访问像这样的 Pyramid 事件中的自定义部分:

def add_api_path(event):
    request = event.request
    settings = request.registry.settings
    _type = 'customer:sg:qa'
    base_config = settings[_type]

但这没有用,因为设置实际上是 [app:main] 属性的字典。有人可以教我如何以 Pyramid 方式访问这些部分吗?我阅读了另一种使用 ConfigParser 的方法,但我想先问一下 Pyramid 中是否还有其他更简单的方法。

最佳答案

如果你想这样做,你必须自己解析配置文件。您看到的部分隔离行为是故意的。

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)

然后您可以获取设置:

request.registry.settings['user:sg:qa:host']

更新

在 Pyramid 1.9 中,ini 解析是可插入的,并创建了一个新库来帮助以标准方式加载文件的任意部分。以下是更新后的示例:

import plaster

def main(global_conf, **settings):
    user_settings = plaster.get_settings(global_conf['__file__'], 'user:sg:qa')
    for k, v in user_settings.items():
        settings['user:sg:qa:' + k] = v

    config = Configurator(settings=settings)

关于python - 如何访问 Pyramid .ini 文件中的自定义部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19656001/

相关文章:

python - 如何编辑flask-admin以支持 Multi-Tenancy ?

python - Pyramid 中模板上下文的等价物(pylons 用户)

python - Pyramid 为自动重启监控的附加文件/目录

python - zope.depectation : solve import issues with pydev, .pth 文件和站点包

python - 确定 Pyramid 中的用户语言

python - 使用 set_table_styles() 时,如何将格式应用于具有多级列索引的数据框?

python - 从字典键/值对动态设置 self.x

Python:自动在短语中引入轻微的单词拼写错误?

python - 如何使用 cv2 矩形 (YOLOv5) 从 "results.xyxy[0]"绘制边界框?

python - 如何对运行 celery 任务的代码进行单元测试?