我的任务是从Plone 3.1.2网站卸载内容并将有关内容的信息加载到SQL数据库+文件系统
我重新创建了网站,访问了ZODB并重新创建了对象和文件夹结构。我还能够读取文件夹,文件和文档的属性。我无法使ATDocument的.getText()方法起作用。 Traceback看起来像这样:
追踪(最近一次呼叫最后一次):
File "C:\Users\jan\Eclipse_workspace\Plone\start.py", line 133, in ?
main()
File "C:\Users\jan\Eclipse_workspace\Plone\start.py", line 118, in main
print dokument.getText()
File "e:\Program Files\Plone 3\Data\Products\Archetypes\ClassGen.py", line 54, in generatedAccessor
File "e:\Program Files\Plone 3\Data\Products\Archetypes\BaseObject.py", line 828, in Schema
TypeError: ('Could not adapt', <ATDocument at /*object_path*>, <InterfaceClass Products.Archetypes.interfaces._schema.ISchema>)
我怀疑将对象连接到接口ISchema时出现问题,但我之前从未使用过Plone,也不知道它的对象模型。
任何可能错误或遗漏的建议,我该如何解决它/和/或下一步做什么?我怀疑我必须以某种方式将ISchema接口类与此对象连接,但不知道从哪里开始。有什么建议?
我会很高兴得到任何帮助,因为我现在已经停留了2天而没有继续前进。
我对ZCML格式或如何编辑它一无所知。
因为在调试模式下>>> print dokument.getText()
之后,脚本会跳转到Generator类中的makeMethod()
方法,我认为脚本不会执行.getText()
,而是尝试创建此方法。
由于inspect.getmembers(dokument)
返回getText()
方法,我真的很困惑。
你知道哪个ZCML文件可能与ATDocument类有关吗?或者我在哪里可以查找有关此主题的任何信息?
我的start.py文件除了以下导入之外没有其他作用:
from ZODB.FileStorage import FileStorage
from ZODB.DB import DB
from OFS.Application import Application
from BTrees import OOBTree
from Products.CMFPlone.Portal import PloneSite
然后它可以访问dokument对象并尝试执行.getText()
编辑213-03-26 15:27(GMT):
关于.zcml文件
我收到的网站是3个文件夹:产品(提取到\Plone 3\Data
),lib和包含。
在lib里面有一个包含3个子文件夹的python文件夹:'common','abc'和'def'(名称改为不释放客户端的信息)。每个子文件夹都包含一个configure.zcml文件,其中一个文件还包含override.zcml文件。
在文件夹package-includes中有4个文件,每个文件长1行。它们包含以下几行:
<include package="abc" file="configure.zcml" />
<include package="def" file="overrides.zcml" />
<include package="common" file="configure.zcml" />
<include package="def" file="configure.zcml" />
此刻不会复制这些zcml文件。我可以在哪里复制这些以进行这些导入?
答案 0 :(得分:1)
您缺少组件注册,通常在站点中加载ZCML文件时注册。
您希望最终能够运行bin/instance run yourscript.py
,这会将所有繁琐的网站和ZCML加载到Zope。
一旦您可靠地运行,您就可以在设置本地组件管理器和安全管理器的脚本中访问该站点:
from zope.app.component.hooks import setSite
from Testing.makerequest import makerequest
from AccessControl.SecurityManagement import newSecurityManager
site_id = 'Plone' # adjust to match your Plone site object id.
admin_user = 'admin' # usually 'admin', probably won't need adjusting
app = makerequest(app)
site = app[site_id]
setSite(site)
user = app.acl_users.getUser(admin_user).__of__(site.acl_users)
newSecurityManager(None, user)
# `site` is your Plone site, now correctly set up
将此脚本保存在某处,然后使用以下命令运行:
bin/instance run path/to/yourscript.py
答案 1 :(得分:0)
你开始任务的方式并不好。 您正在尝试在没有框架设置的情况下使用API。这是可能的,但你必须非常了解框架(加载持久的站点管理器,...)
您应添加“浏览器视图”并将其调用以导出您的内容。
你可以通过以下方式做到:
您可以在http://developer.plone.org
找到有关browserview和plone的文档很抱歉,如果您需要为Plone开发,您需要阅读所有这些内容。