gpt4 book ai didi

plone - 如何在没有上下文的情况下访问 "plone site object"?

转载 作者:行者123 更新时间:2023-12-02 04:42:49 25 4
gpt4 key购买 nike

我有一个需要访问 plone 站点对象的预定作业(我正在使用 apscheduler.scheduler 库),但在这种情况下我没有上下文。我订阅了 IProcessingStart 事件,但不幸的是 getSite() 函数返回 None

此外,是否有一种编程方式可以从 Zope Server root 获取特定的 Plone 站点?

附加信息:

我有一份这样的工作:

from zope.site import hooks

sched = Scheduler()

@sched.cron_schedule(day_of_week="*", hour="9", minute="0")
def myjob():
site = hooks.getSite()
print site
print site.absolute_url()
catalogtool = getToolByName(site, "portal_catalog")
print catalogtool

site 变量在 APScheduler 作业中始终为 None。我们需要有关站点的信息才能正确运行该作业。

我们避免使用公共(public) URL 执行,因为用户可以直接执行作业。

最佳答案

首先使用 setSite() 构建一个上下文,也许还有一个请求对象:

from zope.app.component.hooks import setSite
from Testing.makerequest import makerequest

app = makerequest(app)
site = app[site_id]
setSite(site)

这确实需要您自己打开一个 ZODB 连接并自己遍历到站点对象。

但是,尚不清楚您如何从您的调度程序访问 Plone 站点。与其运行一个全新的 Zope 进程,不如考虑从您的调度作业中调用一个 URL。如果你将 APScheduler 集成到你的 Zope 进程中,你必须在作业中创建一个新的 ZODB 连接,从根目录遍历到 Plone 站点,并使用上述方法设置站点 Hook (需要很多本地组件)。

关于plone - 如何在没有上下文的情况下访问 "plone site object"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471925/

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