python - Plone 3.1.2 - ATDocument.getText() 方法中的类型错误

标签 python plone typeerror zope

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

我重新创建了网站,获得了对 ZODB 的访问权限,并重新创建了对象和文件夹结构。我还能够读取文件夹、文件和文档的属性。我无法使用 ATDocument 的 .getText() 方法。回溯看起来像这样:

回溯(最近调用最后):

  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 接口(interface)有问题,但我以前从未使用过 Plone,也不知道它是对象模型。

有什么建议可能是错的或遗漏的,我该如何解决它和/或下一步该做什么?我怀疑我必须以某种方式将 ISchema 接口(interface)类与该对象连接起来,但不知道从哪里开始。有什么建议么?

我将非常感谢任何帮助,因为我现在被困了 2 天并且没有前进。

我对 ZCML 格式或如何编辑它一无所知。 因为在 >>> 在 Debug模式下打印 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(格林威治标准时间):

关于 .zcml 文件 我收到的网站有 3 个文件夹:Products(提取到 \Plone 3\Data)、lib 和 package-includes。

在 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 文件目前没有被复制。我在哪里可以复制这些以导入这些?

最佳答案

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

关于python - Plone 3.1.2 - ATDocument.getText() 方法中的类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15633140/

相关文章:

plone - 避免删除对象(使用 IObjectWillBeRemovedEvent)并重定向到自定义 View /模板?

Python3 错误 : TypeError: Can't convert 'bytes' object to str implicitly

Javascript 未捕获类型错误 : Cannot read property '0' of undefined

python - 使用 smtplib 发送邮件在本地部署时有效,但在 swarm 中部署时失败(无法分配请求的地址)

python - 将录制的音频从浏览器持久保存为WAV文件到Python API

collections - 如何使用 "all content"-view 在 plone 集合中仅加载一次 AddThis?

plone - 有没有办法在调试控制台中删除一个 plone 站点?

python - Pytorch 嵌入 RuntimeError : Expected object of type torch. LongTensor 但发现参数类型 torch.cuda.LongTensor #3 'index'

javascript - 我怎样才能将这个随机生成器从 JS 版本转换为 Python 版本

python - 如何在 Robot 框架中使用 POST (ReST) API