跳转到主要内容

连接到repose.zope2,允许第三方包注册一系列钩子,这些钩子可以在响应返回浏览器之前对其进行修改

项目描述

简介

plone.transformchain 提供了修改使用 repoze.zope2 或“经典” ZPublisher 发布的页面响应的方法,在将其返回给浏览器之前。

注册一个名为(发布,请求)的独特适配器,提供 ITransform 接口。 published 是发布的对象,例如视图;request 是当前请求。

可以通过适配器的 order 属性来维持转换的顺序。

将根据从发布者获取的输入类型和/或之前的方法调用三种方法之一。

  • transformBytes() 在输入是 str(字节)对象时被调用

  • transformUnicode() 在输入是 unicode 对象时被调用

  • transformIterable() 在输入是其他类型的可迭代对象时被调用

每个阶段可以返回字节字符串、unicode 字符串或可迭代对象。

大多数转换器将具有“自然”的结果表示,并将实现相应的方法以返回相同表示的另一个值,例如实现 transformUnicode() 以转换并返回 unicode 对象。其他方法可以实施为返回 None(不执行任何操作)或将值转换为适当的类型。

链中的第一个转换器可能会得到

  • 如果转换器在标准 Zope 2 ZPublisher 下运行,则为字节字符串。

  • 如果转换器在 repoze.zope2 或另一个 WSGI 管道下运行,则为可迭代对象。

检查 self.request.response.getHeader('content-type') 以查看结果的类型。当可迭代对象展开时,它将符合此类型,例如对于“text/html”,''.join(result) 应该是一个 HTML 字符串。

返回值将传递给链中的下一个转换。最终的转换应该返回 unicode 字符串、编码字符串或可迭代对象。

如果链中的最后一个转换返回字节字符串或 unicode 字符串,则 Content-Length 标头将自动更新。

返回 None 以表示结果不应从之前的转换中更改。

以下是一个将所有内容转换为大写的示例

from zope.component import adapter
from zope.interface import implementer
from zope.interface import Interface
from plone.transformchain.interfaces import ITransform

@implementer(ITransform)
@adapter(Interface, Interface) # any context, any request
class UpperTransform(object):

    order = 1000

    def __init__(self, published, request):
        self.published = published
        self.request = request

    def transformBytes(self, result, encoding):
        return result.upper()

    def transformUnicode(self, result, encoding):
        return result.upper()

    def transformIterable(self, result, encoding):
        return [s.upper() for s in result]

您可以在 ZCML 中注册此内容

<adapter factory=".transforms.UpperTransform" name="example.uppertransform" />

如果您需要关闭特定请求的转换,可以在 request.environ 中设置一个键

request.environ['plone.transformchain.disable'] = True

这将保留响应不变,并且不会调用任何 ITransform 适配器。

变更日志

3.0.1 (2024-01-22)

内部

  • 更新配置文件。[plone 开发者] (6e36bcc4, 7723aeaf)

3.0.0 (2023-04-27)

破坏性更改

  • 删除 Python 2 和 Plone 5.2 兼容性。[gforcada] (#6)

内部

  • 更新配置文件。[plone 开发者] (3333c742)

2.0.2 (2020-04-22)

错误修复

  • 小包装更新。[#1]

2.0.1 (2018-11-04)

错误修复

  • 更多 py3 测试和功能修复。[pbauer, thet]

2.0.0 (2018-06-20)

破坏性更改

  • 删除对 Python 2.6 的支持。[jensens]

新功能

  • 使 ZServer 可选

错误修复

  • 更多 Python 2/3 兼容性修复。[pbauer, thet]

1.2.2 (2018-02-11)

错误修复

  • 添加 Python 2/3 兼容性。[vincero]

1.2.1 (2017-06-28)

错误修复

  • 删除 unittest2 依赖项。[kakshay21]

1.2.0 (2016-06-21)

新功能

  • 添加事件来在所有/单个转换执行前后通知。[jensens]

1.1.0 (2016-02-21)

新功能

  • 需要 Zope2 >= 2.13.23。[jensens]

修复

  • PEP8 等.使用 zca 装饰器,...[jensens]

1.0.4 (2015-05-11)

  • 小清理:空白、git 忽略、rst。[gforcada, rnix, maurits]

1.0.3 (2013-01-13)

  • 存在 charset 正则表达式问题,它期望在 mime-type 和 charset 之间有一个空格,并且只有一个空格。因此,像“text/html;charset=utf-8”这样的有效值不匹配,并返回了默认编码。我们通过允许任何数量的空格(包括零)来修复了它。[jpgimenez]

1.0.2 (2012-01-26)

  • 修复打包错误。[esteele]

1.0.1 (2012-01-26)

  • 计算错误状态并将其存储在请求中。针对 Zope 2.13 发布事件中的错误进行处理:当通知 IPubBeforeAbort 时,response.status 未设置。[注意]

  • 不要转换 FTP 请求 [rochecompaan]

1.0 - 2011-05-13

  • 最终版本 1.0。 [esteele]

1.0b1 - 2010-04-21

  • 初始版本

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

plone.transformchain-3.0.1.tar.gz (13.5 kB 查看哈希)

上传时间

构建分布

plone.transformchain-3.0.1-py3-none-any.whl (11.1 kB 查看哈希)

上传时间 Python 3

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面