用于从Plone导入和导出内容的包
项目描述
collective.plone.gsxml
一个用于Plone的XML导入/导出插件。
安装
collective.plone.gsxml是一个egg,如果你使用buildout,安装将非常简单。你只需要将collective.plone.gsxml添加到你的plone部分的eggs和zcml选项。
这里有一个示例buildout
https://svn.plone.org/svn/collective/gsxml/buildout/trunk
此包需要lxml,请参阅buildout示例。
用法
安装后,你将在Plone的操作菜单中获得两个新项目,一个用于导入,一个用于导出。有关其他信息,请参阅下面的详细文档。
功能
导出几乎所有基于Archetypes的文档
导出并保留引用
将二进制数据作为单独的文件导出
与ZOPE blob协同工作
发送自定义事件,您可以在导入/导出之前和之后订阅这些事件
使用ZCA获取内容类型的序列化器 - 默认适配器使用Plone Marshaller
注意事项
此包在很大程度上依赖于plone的Marshall产品(它随Plone一起提供)。虽然该产品提供出色的功能,但有些复杂,并且不允许使用ZCA进行挂钩。
此外,这个包尝试导出引用,目前使用pickle方式,这并不安全。引用应该由实际使用这些引用并知道如何导出它们的人定义的适配器来导出(在我看来,这是无法以通用方式完成的)。
错误
使用pickle导出引用
由于缺少钩子,与Marshal产品的内部结构交互
使用pickle,这并不安全
manifest XML尚未解析
烦恼
代码复杂。这个包的代码需要清理。这将在适当的时候完成。
注意事项
这个包默认只导出基于AT的内容,但您可以提供自己的序列化器作为适配器
这个包不导出动态标记的接口
这个包不导出内容上的注释
Products.Poi
您需要Products.Marshall的分支版本来处理DataGridFields
https://svn.plone.org/svn/archetypes/Products.Marshall/branches/use-zca-in-atns
Products.eXtremeManagement
将Products.eXtremeManagement.content.PoiTask的第44行更改为
def getAssignees(self): managers = set() try: for issue in self.getRefs('task_issues'): managers.add(issue.getResponsibleManager()) except: pass return sorted(list(managers))
因为POI问题的引用在导入结束时固定,并且在对象重新创建时不可用
- ::
vim: set ft=rst ts=4 sw=4 expandtab tw=78
变更历史
HEAD
0.4.7 (2008-12-19)
导入后修复了引用处理[ramonski]
0.4.6 (2008-12-16)
修复了测试并将它们移动到源包中。[seletz]
添加了对PloneArticle的修复。感谢Freshmilk Entertainment GmbH赞助此修复。[seletz]
添加了通知ObjectWillBeExportedEvent、ObjectExportedEvent、ObjectWillBeImportedEvent和ObjectImportedEvent的事件。[seletz]
将lxml和libxml2-python添加到buildout中。将启用ZOPE的ipython添加到buildout中。[seletz]
更改包布局,以便将源代码放在src下 - 这允许在开发期间buildout包含开发包。[seletz]
修复了与处理blob字段的错误。现在它们被像文件字段一样处理。[seletz]
将plone.app.blob添加到buildout中,以测试#10。[seletz]
将buildout切换到plone 3.2a1。[seletz]
0.4.5 (2008-06-23)
更多importview工作。[seletz]
添加了缺失的文件。[seletz]
修复了错别字[seletz]
详细文档
导出内容
为了测试导出某些内容,我们将创建内容
>>> _ = self.folder.invokeFactory("Folder", "content") >>> folder = self.folder["content"] >>> _ = folder.invokeFactory("Document", "doc1", title="A Document") >>> _ = folder.invokeFactory("Document", "doc2", title="A second Document") >>> folder.keys() ['doc1', 'doc2']
现在我们创建一个导出上下文 - 这将像容器一样持有导出数据。这里我们使用TarballExportContext
>>> from collective.plone.gsxml.context import TarballExportContext >>> export_context = TarballExportContext()
现在我们创建一个导出器对象,它将使用上面创建的导出上下文来存储导出数据,并使用Marshaller来实际序列化内容。我们使用要导出的root文件夹初始化导出器
>>> from collective.plone.gsxml.content import XMLContentFSExporter >>> exporter = XMLContentFSExporter(folder)
现在我们可以开始导出了。我们提供导出上下文和导出上下文内的文件夹(因此,一个导出上下文可以通过提供不同的root文件夹多次使用)。我们还指定这是一个根级别导出
>>> exporter.export(export_context, "structure", True)
好了,就这些。现在可以从导出上下文中获取存档流
>>> archive = export_context.getArchiveStream() >>> archive.seek(0)
导入内容
为了测试导入,我们将删除上面导出的对象
>>> folder.manage_delObjects(['doc1', 'doc2']) >>> folder.keys() []
现在我们创建一个导入上下文,它将持有我们的导出流,以及一个导入器,该导入器将使用该导入上下文来读取序列化数据
>>> from collective.plone.gsxml.context import TarballImportContext >>> import_context = TarballImportContext(archive)
导入器 - 我们使用目标文件夹初始化导入器
>>> from collective.plone.gsxml.content import XMLContentFSImporter >>> importer = XMLContentFSImporter(folder)
现在我们开始导入。我们提供导入上下文和导入上下文内的根文件夹(因此,一个导入上下文可以通过提供不同的root文件夹多次使用)。我们还指示这确实是一个根级别导入
>>> importer.import_(import_context, "structure", True)
现在我们可以再次获取文档
>>> folder.keys() ['doc1', 'doc2'] >>> folder.doc1.Title() 'A Document'
贡献者
(不分先后顺序。这些是 #plone 上的昵称)
fschulze
magnon
ramonski
seletz
hannosch
witsch
下载
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分发
collective.plone.gsxml-0.4.7.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f13335bde13a19789fee8c4cb18608577e01b9501503e0917d9e16b015795420 |
|
MD5 | 3ee79eff4b14b6e00a5cf718cf61cbb0 |
|
BLAKE2b-256 | 97902a37a8270332a0f7b3ce0336dbf2a84ce95aaa2bb57c0f3fd8a39d907bd4 |