跳转到主要内容

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文件(本地和远程)并返回它

变更日志

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 (97.1 kB 查看散列值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面