Plone内容的预发布和发布插件。
项目描述
简介
ftw.publisher软件包提供了一组工具,用于在实例之间发布Plone内容。
通过提供一种简单的机制来调用发布,可以以多种方式设置发布者,例如与工作流绑定、手动调用或自动发布。
ftw.publisher软件包库还提供了一系列监控和分析工具,使维护变得舒适。
预发布
ftw.publisher旨在在存在两个不共享数据库的独立Plone站点环境中使用。编辑器在一个编辑站点上工作,当内容准备好时,将其发布到一个公开站点。使用ftw.publisher设置此类环境可以让您拥有一个功能强大的预发布解决方案,实例完全隔离。
网络安全
使用两个隔离的安装环境,可以保护编辑站点不受防火墙影响,甚至可以将其置于私有公司网络中。这样,编辑站点就可以完全保护免受互联网的侵害,这在某些情况下对于保护其他未发布的内容(例如,从内部网络发布互联网内容)是强制性的。
组件支持
Archetypes对象
标准Archetypes字段类型
主题:当主题发布时,标准会自动发布
反向引用 - 当两个对象都发布时,引用会自动添加
在/Manage_interfaces或其他产品中添加的额外接口
上下文小部件
属性
使用发布适配器结构,创建另一个适配器以支持其他组件就像易如反掌。例如,注释默认不支持,因为你可能不希望发布所有注释,而只想发布某些注释。因此,为需要发布的那些注释实现自定义适配器更容易。
包
核心包
- ftw.publisher.sender
发送器包提供了一个配置面板,负责将内容发送到目标实例。它通常安装在编辑网站上。ftw.publisher.sender 源码 | ftw.publisher.sender pypi
- ftw.publisher.receiver
接收器包安装在公共网站上,是发布过程的目标。它具有接收请求并创建、更新或删除应发布或检索的对象的工具。ftw.publisher.receiver 源码 | ftw.publisher.receiver pypi
- ftw.publisher.core
核心包安装在发送器和接收器实例上。它为序列化和反序列化 Plone 内容的组件(如小部件)提供适配器。ftw.publisher.core 源码 | ftw.publisher.core pypi
附加包
- ftw.publisher.example
此示例包提供了一个与发布器绑定的工作流,并展示了如何为此用例编写集成包。ftw.publisher.example 源码 | ftw.publisher.example pypi
- ftw.publisher.monitor
当发布器队列阻塞且发布不再工作时,发送警报邮件。ftw.publisher.monitor 源码 | ftw.publisher.monitor pypi
- ftw.publisher.mailreport
发送有关发布状态的计划报告(已执行作业、失败作业等)。ftw.publisher.mailreport 源码 | ftw.publisher.mailreport pypi
- ftw.publisher.controlling
比较编辑网站和公共网站的可视化界面。通过比较两个网站的目录来检测不一致和问题。在基于工作流发布的环境中很有用。ftw.publisher.controlling 源码 | ftw.publisher.controlling pypi
安装 & 使用
请查看ftw.pubisher.example 包和 示例 buildout。另请参阅 wiki。
使用 ZCML 覆盖区域配置
默认情况下,区域通过控制面板在数据库中配置。当从生产环境复制数据库到测试环境时,区域配置也会被复制,这可能会导致测试编辑网站将内容发布到生产公共网站,这是非常糟糕的。
为了解决此问题,可以使用 ZCML 覆盖区域配置,这样也可以使用 buildout 的 zcml-additional 选项进行配置。
<configure xmlns:publisher="http://namespaces.zope.org/ftw.publisher">
<include package="ftw.publisher.sender" file="meta.zcml" />
<publisher:override-realm
url="https://127.0.0.1:9090/site"
username="publisher-user"
password="publisher-password" />
</configure>
使用异步任务队列进行提取
当在单个请求中创建大量发布作业时,内容的提取(JSON 序列化)可能需要很长时间。为了减少用户的反馈时间,可以配置基于 collective.taskqueue 的可选任务队列。默认情况下,提取是阻塞的。
示例 buildout 配置
- zope-conf-additional +=
%import collective.taskqueue <taskqueue /> <taskqueue-server />
- environment-vars +=
PUBLISHER_TASKQUEUE true
配置工作流以发布
ftw.publisher可以与工作流一起使用。为了在工作流中使用它,您需要配置工作流以使用发布者操作,并且您需要为工作流提供配置,告诉发布者每个状态和转换的含义。
定义发布者配置
发布者配置是一个简单的IWorkflowConfiguration适配器,可能看起来像这样
from ftw.publisher.sender.workflows import interfaces
from zope.component import adapts
from zope.interface import Interface
from zope.interface import implements
class MyWorkflowConfiguration(object):
implements(interfaces.IWorkflowConfiguration)
adapts(Interface)
def __init__(self, request):
self.request = request
def states(self):
return {
'private': None,
'pending': None,
'published': interfaces.PUBLISHED,
'revision': interfaces.REVISION}
def transitions(self):
return {
'submit': interfaces.SUBMIT,
'publish': interfaces.PUBLISH,
'reject': interfaces.RETRACT,
'retract': interfaces.RETRACT,
'revise': None}
然后通过ZCML注册这个命名的适配器,适配器的名称是工作流在portal_workflow中的ID。
<adapter factory=".config.MyWorkflowConfiguration"
name="my-workflow" />
Lawgiver-Workflows
ftw.lawgiver是一个编写工作流的工具。如果您正在使用lawgiver,可以使用LawgiverWorkflowConfiguration作为基类,这允许您通过名称/语句定义状态和转换,而不是通过ID。
from ftw.publisher.sender.workflows import config
from ftw.publisher.sender.workflows import interfaces
class ExampleWorkflowConfiguration(config.LawgiverWorkflowConfiguration):
workflow_id = 'publisher-example-workflow'
def lawgiver_states(self):
return {
'Internal': None,
'Pending': None,
'Published': interfaces.PUBLISHED,
'Revision': interfaces.REVISION}
def lawgiver_transitions(self):
return {
'submit (Internal => Pending)': interfaces.SUBMIT,
'publish (Internal => Published)': interfaces.PUBLISH,
'reject (Pending => Internal)': None,
'publish (Pending => Published)': interfaces.PUBLISH,
'retract (Published => Internal)': interfaces.RETRACT,
'revise (Published => Revision)': None,
'publish (Revision => Published)': interfaces.PUBLISH,
}
转换验证(约束条件)
当用户发布内容且其容器尚未发布时,在远程系统上会失败,因为容器缺失。
发布者提供工作流约束,以禁止不良转换并在需要执行某些操作时发出警告(例如,应发布引用)。
您应通过更改转换操作URL(“显示在动作框中”->“URL(格式化)”)到格式%(content_url)s/publisher-modify-status?transition=TRANSITION(替换TRANSITION)来为工作流启用这些约束条件,其中TRANSITION是转换ID。默认Plone URL为%(content_url)s/content_status_modify?workflow_action=TRANSITION。
这些约束条件是为每个工作流注册的适配器。这允许您轻松地为每个工作流更改约束条件。请参阅发布者示例工作流约束。
您可以继承示例工作流约束并扩展它,从头开始编写自己的约束定义,或者直接为您的流程使用示例工作流约束。
重用示例工作流约束就像注册一个命名的适配器一样简单(您在portal_workflow中的工作流ID是适配器的名称)
<adapter factory="ftw.publisher.sender.workflows.example.ExampleWorkflowConstraintDefinition"
name="my-workflow" />
测试工作流
为了自动测试您的流程配置是否正确,您可以重用发布者示例工作流配置测试 <https://github.com/4teamwork/ftw.publisher.sender/blob/master/ftw/publisher/sender/tests/test_example_workflow_config.py>
from ftw.publisher.sender.tests import test_example_workflow_config
from my.package.testing import MY_INTEGRATION_TESTING
class TestMyWorkflowConfig(test_example_workflow_config.TestWorkflowConfig):
layer = MY_INTEGRATION_TESTING
workflow_id = 'my-workflow'
如果您编写自定义约束,也应该查看示例约束测试。
禁用创建发布者作业
from ftw.publisher.sender.nojobs import publisher_jobs_disabled
with publisher_jobs_disabled():
pass # no publisher jobs created here.
FormGen / EasyForm集成
FormGen集成允许它下载在已发布站点上输入的数据。如果内容已发布,它将从公共站点获取数据。如果没有发布,它将使用本地数据。这种区别的原因是我们支持内部表单,这些表单永远不会发布。在这种情况下,内部收集的数据应下载。
EasyForm的进一步提示:Easyform支持Excel作为保存数据的导出格式。为了支持这一点,需要openpyxl。openpyxl将合并两个Excel文件(本地和远程)并返回它
链接
主要项目包是ftw.publisher.sender,因为它包含所有配置面板和大多数工具 - 但如果没有其他必需的包,它将无法工作。以下是一些额外的链接
PyPI上的发布者包:http://pypi.python.org/pypi?%3Aaction=search&term=ftw.publisher&submit=search
持续集成: https://jenkins.4teamwork.ch/search?q=ftw.publisher.sender
版权
本软件包的版权属于 4teamwork。
ftw.publisher.sender 采用 GNU 通用公共许可证,版本 2。
变更日志
2.14.6 (2022-02-16)
修复 easyform xlsx 下载集成。如果远程不存在,则不合并 xlsx。[mathias.leimgruber]
2.14.5 (2021-09-30)
修复 easyform 下载集成。从 v3 版本开始,分隔符是下载方法签名的一部分。[mathias.leimgruber]
2.14.4 (2021-07-19)
在文件夹内容重命名视图上创建移动作业(仅适用于 Plone 5)。[mathias.leimgruber]
2.14.3 (2021-07-19)
在对象重命名视图上创建移动作业(仅适用于 Plone 5)。[mathias.leimgruber]
2.14.2 (2021-07-16)
支持返回 Excel 格式的保存数据适配器。[mathias.leimgruber]
2.14.1 (2020-07-30)
在将约束类型适配器添加到核心后修复测试。[djowett-ftw]
修复针对旧版本 plone.protect 的 IDisableCSRFProtection 导入错误。[busykoala]
2.14.0 (2020-01-31)
添加 collective.easyform 支持:下载安全数据适配器的远程数据。[jone]
修复新页面上的引用匹配为未发布的问题。[Nachtalb]
2.13.0 (2019-11-27)
删除 ftw.contentpage / simplelayout.base 支持。[jone]
与 ftw.publisher.core = 2.13.0 兼容。[jone]
2.10.1 (2019-11-11)
支持 CSRF 保护,并修复 Plone 5 上的发布。[Nachtalb]
修复区域编辑表单。[Nachtalb]
2.10.0 (2019-10-18)
通过使用 contentValues 代替 objectValues 来改进 ftw.trash 的兼容性。[jone]
重构同步简单布局状态,使其适用于非内容页面。[jone]
引入新的“BeforePublishEvent”。[jone]
用通用机制替换简单布局的发布递归,以支持 PloneFormGen。[jone]
用“belongs_to_parent”替换“is_sl_contentish”函数的使用。这需要将 ftw.publisher.core 更新到兼容版本。[jone]
2.9.0 (2019-08-29)
在 monkeypatched Products.PloneFormGen 下载方法中连接来自自我和区域的 csv 条目。[busykoala]
2.8.2 (2018-10-02)
不再警告将发布的新发布引用。[jone]
2.8.1 (2018-09-17)
提取:将尝试次数增加到 10,并在之间暂停 0.5 秒。[jone]
2.8.0 (2018-04-25)
改进提取工作进程。[mbaechtold]
添加对 Plone 5.1 的支持。[mbaechtold]
2.7.13 (2018-02-23)
在向接收器发送数据时定义两分钟的超时。[mbaechtold]
2.7.12 (2018-02-06)
同步执行移动作业,而不是异步执行。[mbaechtold]
2.7.11 (2017-10-03)
修复更改对象 ID 的问题(仅在 Redis 组合中发生)。[mbaechtold]
使 Plone 站点上的对象重命名再次工作。[mbaechtold]
2.7.10 (2017-07-27)
使 WorkflowConfigTest 基类在没有安装测试额外组件的情况下可导入。[jone]
2.7.9 (2017-07-25)
修复移动作业提取的重试。[mathias.leimgruber]
使用“ftw.testbrowser”重写测试,删除对“ftw.testing[splinter]”的依赖。[mbaechtold]
2.7.8 (2017-06-12)
修复 2.7.7 中引入的重试提取时的错误。[jone]
2.7.7 (2017-06-09)
修复 Redis 激活时的移动提取错误。[jone]
2.7.6 (2017-06-08)
修复第一次发布时提取令牌访问错误。[jone]
2.7.5 (2017-05-16)
如果表单文件夹已发布,则从公共站点获取 FormGen 数据。[tschanzt]
2.7.4 (2017-04-27)
不再立即移动简单布局块。[jone]
2.7.3 (2017-03-20)
修复旧版本发布的问题。[jone]
发布后关闭连接。[jone]
2.7.2 (2016-09-06)
使移动到工作队列更加健壮。[jone]
2.7.1 (2016-08-30)
修复边缘情况,如果发布的对象在异步工作进程从对象收集数据之前被删除。[mathias.leimgruber]
2.7.0 (2016-08-16)
添加 IPreventPublishing 标记接口。[jone]
修复 removeJob 方法,它始终尝试从工作队列中删除作业。[mathias.leimgruber]
2.6.0 (2016-07-29)
添加第二个工作队列,该队列由工作进程用于执行实际作业。同时删除批量功能,因为已经禁用很长时间了。[mathias.leimgruber]
不要将删除任务添加到任务队列。如果提取器尝试获取删除对象的一些数据,那么对象肯定不存在。[mathias.leimgruber]
2.5.0 (2016-07-27)
使用collective.taskqueue进行延迟提取。[jone]
将队列存储迁移到zc.queue。[jone]
通过减少日志记录来加快入队速度。[jone]
支持dexterity关系。[mbaechtold]
添加禁用作业创建的上下文管理器。[jone]
2.4.0 (2016-05-20)
工作流上下文状态:在查找父状态时跳过没有工作流的父母。这增加了对没有工作流的嵌套容器的支持。[jone]
2.3.1 (2015-12-23)
使用base class WorkflowConfigTest进行TestWorkflowConfig测试。如果不这样做,在将测试类导入另一个项目后,我们将得到构建器注册冲突错误。在直接在无ftw.simplelayout但有ftw.contentpage的项目上导入测试类时也存在问题。[elioschmutz]
ftw.contentpage的块在删除后将不再直接发布。为ftw.contentpage的后向移植提供功能,该功能为ftw.simplelayout提供:[a href="https://github.com/4teamwork/ftw.publisher.sender/pull/20" rel="nofollow">https://github.com/4teamwork/ftw.publisher.sender/pull/20
2.3.0 (2015-09-30)
停止支持Plone 4.2。[jone]
添加ftw.simplelayout支持。[jone]
2.2.2 (2015-03-19)
排序数据收集器,以便我们有预期的顺序。这允许通过数据收集器名称来影响顺序。[jone]
2.2.1 (2014-12-31)
以安全的方式获取未发布和已发布的引用 - 它们可能被删除。[mathias.leimgruber]
2.2.0 (2013-09-02)
添加简单布局支持:当简单布局容器内的块没有工作流时,自动发布块。[jone]
提供示例发布者工作流的流程集成。[jone]
使用发布者权限来保护发布者控制面板操作。所需权限:“ftw.publisher.sender: 更改发布者配置” [jone]
2.1.0 (2013-06-13)
添加访问控制面板中发布者设置的单独权限。默认情况下,权限授予给管理者和站点管理员。权限是“ftw.publisher.sender: 更改发布者配置” [jone]
2.0.1 (2013-05-24)
执行队列视图:添加批量大小参数。[jone]
2.0 (2013-05-24)
使状态消息具有事务感知性,以便它可以在完整性检查回滚时工作。[jone]
实现一个override-realm ZCML指令,以使用ZCML覆盖数据库设置。[jone]
使升级步骤1.1 -> 1.2保存:如果没有数据则不迁移。[jone]
Plone 4.3兼容性。[jone]
添加“disable-publisher-for-testing”环境变量以禁用事件处理器。[jone]
修复数据适配器(JSON数据)不包含field_data_adapter的错误。[jinfanger]
日志中的UnicodeError。LogStream不应混合utf8和unicode。[jinfanger]
可以配置要忽略的字段,发布者将忽略这些字段。[jinfanger]
停止支持Plone 3。[jone]
1.5 (2011-07-05)
修复认证问题(base64)(问题#1)[jone]
修复PloneFormGen发布支持。递归发布FormFolder中的所有项目。[mathias.leimgruber]
1.4 (2011-04-06)
清理,移动到github([a href="https://github.com/4teamwork/ftw.publisher.sender" rel="nofollow">https://github.com/4teamwork/ftw.publisher.sender)并准备发布。[jone]
1.3 (2011-01-19)
添加了一些德语翻译并添加了纯英文po文件。[mathias.leimgruber]
合并lock-config-branch到trunk。在直接发布且无队列的情况下,锁定没有意义。因此,现在可以启用/禁用锁定。[mathias.leimgruber]
添加了新的IBeforeQueueExecutionEvent,允许第三方包执行一些操作。[jone]
1.2 (2010-09-27)
在publishploneformgen.py中添加了缺少的消息工厂导入。[jone]
添加了QueueExecutedEvent [jone]
在配置页面添加了视图管理器。[jone]
不要捕获BadStatusLine异常,因为它们应该像常规异常发生时一样移动到执行作业列表中。[jone]
在执行作业视图中添加了批处理。[jone]
添加了将执行作业存储迁移到IOBTree的升级步骤。[jone]
添加了一些存储测试,并将执行作业存储更改为IOBTree存储以提高性能。[jone]
升级
portal_setup:运行ftw.publisher.sender升级步骤以迁移存储
1.1 (2010-07-21)
使用翻译后的通信状态名称[jone]
在配置中显示json缓存路径[jone]
执行作业列表:提高了鲁棒性;反转列表[jone]
1.0c4 (2010-06-24)
修复了不良适配器的使用[jone]
1.0c3 (2010-06-24)
添加了与json兼容的字符串编码/解码方法[jone]
1.0c2 (2010-06-22)
修复了setup.py中的fixed namespace_packages[jone]
1.0c1 (2010-06-18)
在执行队列时锁定[jone]
在控制面板中添加了禁用自动发布的功能[jone]
添加了在队列中执行/删除单个作业的功能[jone]
添加了执行作业列表[jone]
添加了发布者控制面板图标[jone]
实现了黑名单支持[jone]
添加了修改日期到元数据:它将由接收者设置[jone]
修复了编码问题:导出的数据应始终包含Unicode字符串[jone]
客户端对象现在是IAttributeAnnotable[jone]
使用z3c.autoinclude包含zcml依赖项[jone]
实现重命名操作[mle]
项目详情
ftw.publisher.sender-2.14.6.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 760efa363c471bff9731a31a086189be1e4c0bf7584c9f11eee84516f30091b4 |
|
MD5 | 6800d06364a38b9b22a0157006fafee9 |
|
BLAKE2b-256 | 896b977e42c8506e97c4a9f553ed76a4af06c5d2c8938c9d1fa4158283e59349 |