Python Plone 3.1.2-ATDocument.getText()方法中的TypeError

Python Plone 3.1.2-ATDocument.getText()方法中的TypeError,python,plone,typeerror,zope,Python,Plone,Typeerror,Zope,我的任务是从Plone 3.1.2网站卸载内容,并将有关内容的信息加载到SQL数据库+文件系统 我重新创建了网站,访问了ZODB,并重新创建了对象和文件夹结构。我还能够读取文件夹、文件和文档的属性。我无法使ATDocument的.getText()方法工作。回溯如下所示: 回溯(最近一次呼叫最后一次): 然后它获得对dokument对象的访问权,并尝试执行.getText() 编辑213-03-26 15:27(格林尼治标准时间): 关于.zcml文件 我收到的站点有3个文件夹:产品(提取到\P

我的任务是从Plone 3.1.2网站卸载内容,并将有关内容的信息加载到SQL数据库+文件系统

我重新创建了网站,访问了ZODB,并重新创建了对象和文件夹结构。我还能够读取文件夹、文件和文档的属性。我无法使ATDocument的.getText()方法工作。回溯如下所示:

回溯(最近一次呼叫最后一次):

然后它获得对dokument对象的访问权,并尝试执行
.getText()

编辑213-03-26 15:27(格林尼治标准时间):

关于.zcml文件 我收到的站点有3个文件夹:产品(提取到
\Plone 3\Data
),库和包包含

在库中有一个python文件夹,其中包含3个子文件夹:“common”、“abc”和“def”(名称更改为不发布客户端信息)。每个子文件夹都包含一个configure.zcml文件,其中一个还包括override.zcml文件

在文件夹包中包含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文件。在哪里可以复制这些文件以导入这些文件?

您缺少组件注册,通常是在站点中加载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

你开始工作的方式并不好。 您正在尝试在没有框架设置的情况下使用API。这是可能的,但您必须非常了解框架(加载持久化sitemanager,…)

您应该添加“浏览器视图”并调用它来导出内容

您可以通过以下方式实现:

  • 创建自己的插件并安装它
  • 修改已安装的插件(嘿,这毕竟是临时工作)
您可以在以下网址找到有关browserview和plone的文档:


抱歉,如果您需要为Plone开发,您需要阅读一些有关这些的信息。

从您的回溯来看,您在自己的设置中装配了东西,而没有使用Zope脚手架?我想说你没有加载ZCML注册,其中有很多,但是如果没有看到你的
start.py
code,很难判断。谢谢你的输入@Martijn。我仍然无法让它工作,而且我对ZCML格式或如何编辑它一无所知。ZCML格式只是定义服务器配置的XML,包括注册组件和适配器。您不需要编辑它,只需加载它。这可能很复杂,我想知道如果不使用已经存在的Zope基础设施,您在做什么。因此,我请求您提供
start.py
源代码,以便我们可以帮助您正确地执行此操作。@Martijn我试图输入更长的注释,但结果我不能,因此我编辑了我的原始帖子。这是我希望您首先做的!编辑您的问题以添加评论中要求的详细信息总是可以的。@toutpt:我们一直在帮助Plone#IRC频道的OP运行
bin/instance
部分。我终于做到了您告诉我的事情,并且
ATDocument.getText()
非常有效。非常感谢你的帮助和耐心。
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