1
我有一个计划任务(我使用apscheduler.scheduler
lib)需要访问plone站点对象,但在这种情况下我没有上下文。我订阅了IProcessingStart
事件,但不幸getSite()
函数返回None
。如何在没有上下文的情况下访问“plone站点对象”?
此外,有没有一种编程方式从Zope Server根获取特定的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
变量始终是一个None
工作APScheduler里面。我们需要关于网站的信息来正确运行这项工作。
我们避免使用公共URL执行,因为用户可以直接执行作业。
您究竟如何在Plone网站上运行这项工作?为什么不在网站中执行某个网址? –
嗨,Martijn。我添加一些信息并试图回答你的问题。 有没有办法getSite()返回一个有效的值(一个站点对象),而无需打开ZODB连接,如下面的答案所示? –
不,你不能从某处加载它。我不熟悉APScheduler,但是如果它涉及一个单独的线程来执行预定的工作,那么你需要打开一个新的ZODB连接并从那里加载Plone站点,并用该对象调用'setSite()'。 –