gpt4 book ai didi

python - 在 Pyramid 的非请求上下文中检索应用程序配置设置

转载 作者:行者123 更新时间:2023-11-28 22:53:32 26 4
gpt4 key购买 nike

在我正在构建的 Pyramid 应用程序(称为 pyplay)中,我需要检索我在 development.ini 中的应用程序设置。问题是我尝试获取该设置的地方无法访问请求变量(例如,在模块文件的顶层)。

因此,在查看文档中的这个示例之后:http://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/configuration/django_settings.html一开始我开始做一些非常简单和硬编码的事情只是为了让它工作。由于我的development.ini有这一段:[app:main],那么我尝试的简单例子如下:

from paste.deploy.loadwsgi import appconfig
config = appconfig('config:development.ini', 'main', relative_to='.')

但应用程序拒绝启动并显示以下错误:

ImportError: <module 'pyplay' from '/home/pish/projects/pyplay/__init__.pyc'> has no 'main' attribute

所以,我想也许我应该放“pyplay”而不是“main”,我继续了,但我得到了这个错误:

LookupError: No section 'pyplay' (prefixed by 'app' or 'application' or 'composite' or 'composit' or 'pipeline' or 'filter-app') found in config ./development.ini

此时我有点卡住了,我不知道我做错了什么。有人可以教我怎么做吗?

提前致谢!

编辑: 以下是我的 development.ini 文件的内容(请注意,pish.theparam 是我试图获取的设置):

###
# app configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
###

[app:main]
use = egg:pyplay

pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en_US.utf8
pyramid.includes =
pyramid_debugtoolbar
pyramid_tm

sqlalchemy.url = mysql://user:passwd@localhost/pyplay?charset=utf8

# By default, the toolbar only appears for clients from IP addresses
# '127.0.0.1' and '::1'.
debugtoolbar.hosts = 127.0.0.1 ::1

pish.theparam = somevalue

###
# wsgi server configuration
###

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543

###
# logging configuration
# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
###

[loggers]
keys = root, pyplay, sqlalchemy

[handlers]
keys = console

[formatters]
keys = generic

[logger_root]
level = INFO
handlers = console

[logger_pyplay]
level = DEBUG
handlers =
qualname = pyplay

[logger_sqlalchemy]
level = INFO
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

最佳答案

在 Pyramid 中很难做到的原因是因为拥有模块级设置总是不是一个好主意。这意味着您的模块在每个进程中只能以一种方式使用(不同的代码路径不能以不同的方式使用您的库)。 :-)

解决无法访问请求对象的技巧是至少将您的全局隐藏在函数调用后面,以便每个线程(基本上是每个请求)的全局可以不同。

def get_my_param(registry=None):
if registry is None:
registry = pyramid.threadlocals.get_current_registry()
return registry.settings['pyplay.theparam']

关于python - 在 Pyramid 的非请求上下文中检索应用程序配置设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com