Plone 3.1.2类型错误ATDocument.getText文件()方法

2024-05-16 05:30:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是从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有问题,但我以前从未使用过Plone,也不知道它的对象模型。在

有什么建议可能是错的或缺失的,我如何修复它和/或下一步怎么做?我怀疑我必须以某种方式将ISchema接口类与这个对象连接起来,但是不知道从哪里开始。有什么建议吗?在

我会很乐意为任何帮助,因为我现在被困了两天,没有前进。在

我对ZCML格式一无所知,也不知道如何编辑它。 因为在调试模式下的>>> print dokument.getText()之后,脚本跳到生成器类中的makeMethod()方法,所以假设脚本不执行.getText(),而是尝试创建这个方法。在

由于inspect.getmembers(dokument)返回一个getText()方法,我真的很困惑。 你知道哪个ZCML文件可能与ATDocument类相关吗?或者我在哪里可以找到关于这个问题的信息?在

我的开始.py文件只执行以下导入操作:

^{pr2}$

然后它访问dokument对象并尝试执行.getText()

编辑213-03-26 15:27(GMT):

关于.zcml文件 我收到的站点有3个文件夹:Products(extracted to \Plone 3\Data)、lib和package includes。在

在lib中有一个python文件夹,包含3个子文件夹:“common”、“abc”和“def”(更改名称以不发布客户端信息)。每个子文件夹都包含配置.zcml文件,其中之一还包括覆盖.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文件目前没有被复制。我在哪里可以复制这些来进口?在


Tags: 文件方法inpy文件夹packageincludeplone
2条回答

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

你应该添加一个“浏览器视图”并调用它来导出你的内容。在

您可以通过:

  • 创建你自己的插件并安装它
  • 修改已安装的插件(嘿,这毕竟是临时工作)

您可以在http://developer.plone.org找到关于browserview和plone的文档

抱歉,但如果你需要为普隆发展,你需要阅读一点这一切。在

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

将此脚本保存到某个位置,并使用以下命令运行它:

^{pr2}$

相关问题 更多 >