我的任务是从 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/