{ "info": { "author": "Martin Aspeli", "author_email": "optilude@gmail.com", "bugtrack_url": null, "classifiers": [ "Framework :: Plone", "Framework :: Plone :: 5.0", "Framework :: Plone :: 5.1", "Framework :: Plone :: 5.2", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Introduction\n============\n\n``plone.transformchain`` provides methods to modify the response from a page published with ``repoze.zope2`` or the \"classic\" ``ZPublisher`` before it is returned to the browser.\n\nRegister a uniquely named adapter from ``(published, request)`` providing the ``ITransform`` interface.\n``published`` is the published object, e.g. a view; ``request`` is the current request.\n\nThe order of the transforms can be maintained using the ``order`` property of the adapter.\n\nOne of three methods will be called, depending on what type of input was obtained from the publisher and/or the previous method.\n\n* ``transformBytes()`` is called if the input is a str (bytes) object\n* ``transformUnicode()`` is called if the input is a unicode object\n* ``transformIterable()`` is called if the input is another type of iterable\n\nEach stage can return a byte string, a unicode string, or an iterable.\n\nMost transformers will have a \"natural\" representation of the result,\nand will implement the respective method to return another value of the same representation,\ne.g. implement transformUnicode() to transform and return a unicode object.\nThe other methods may then either be implemented to return None (do nothing) or convert the value to the appropriate type.\n\nThe first transformer in the chain is likely to get:\n\n* A byte string if the transformer is running under the standard Zope 2 ZPublisher.\n* An iterable if the transformer is running under repoze.zope2 or another WSGI pipeline.\n\nCheck ``self.request.response.getHeader('content-type')`` to see the type of result.\nThe iterable, when unwound, will conform to this type, e.g. for \"text/html\", ``''.join(result)`` should be an HTML string.\n\nThe return value is passed to the next transform in the chain.\nThe final transform should return a unicode string, an encoded string, or an iterable.\n\nIf a byte string or unicode string is returned by the last transform in the chain, the ``Content-Length`` header will be automatically updated.\n\nReturn ``None`` to signal that the result should not be changed from the previous transform.\n\nHere is an example that uppercases everything::\n\n from zope.component import adapter\n from zope.interface import implementer\n from zope.interface import Interface\n from plone.transformchain.interfaces import ITransform\n\n @implementer(ITransform)\n @adapter(Interface, Interface) # any context, any request\n class UpperTransform(object):\n\n order = 1000\n\n def __init__(self, published, request):\n self.published = published\n self.request = request\n\n def transformBytes(self, result, encoding):\n return result.upper()\n\n def transformUnicode(self, result, encoding):\n return result.upper()\n\n def transformIterable(self, result, encoding):\n return [s.upper() for s in result]\n\nYou could register this in ZCML like so::\n\n \n\nIf you need to turn off transformations for a particular request,\nyou can set a key in ``request.environ``::\n\n request.environ['plone.transformchain.disable'] = True\n\nThis will leave the response untouched and will not invoke any ``ITransform`` adapters at all.\n\nChangelog\n=========\n\n2.0.1 (2018-11-04)\n------------------\n\nBug fixes:\n\n- More py3 test and functionality fixes.\n [pbauer, thet]\n\n\n2.0.0 (2018-06-20)\n------------------\n\nBreaking changes:\n\n- Drop support for Python 2.6.\n [jensens]\n\nNew features:\n\n- Make ZServer optional\n\nBug fixes:\n\n- More fixes for Python 2 / 3 compatibility.\n [pbauer, thet]\n\n\n1.2.2 (2018-02-11)\n------------------\n\nBug fixes:\n\n- Add Python 2 / 3 compatibility\n [vincero]\n\n\n1.2.1 (2017-06-28)\n------------------\n\nBug fixes:\n\n- Remove unittest2 dependency\n [kakshay21]\n\n\n1.2.0 (2016-06-21)\n------------------\n\nNew:\n\n- Added events to notify before/after all/single transform(s) are executed.\n [jensens]\n\n\n1.1.0 (2016-02-21)\n------------------\n\nNew:\n\n- Require Zope2 >= 2.13.23\n [jensens]\n\nFixes:\n\n- PEP8 et al. use zca decorators, ...\n [jensens]\n\n\n1.0.4 (2015-05-11)\n------------------\n\n- Minor cleanup: whitespace, git ignores, rst.\n [gforcada, rnix, maurits]\n\n\n1.0.3 (2013-01-13)\n------------------\n\n- There was a problem with the charset regular expression, it expected one\n space, and only one, between mimetype and charset. So a valid values like\n \"text/html;charset=utf-8\" didn't match and default_encoding was returned.\n We fixed it by allowing any number of spaces (including zero).\n [jpgimenez]\n\n\n1.0.2 (2012-01-26)\n------------------\n\n- Fix packaging error.\n [esteele]\n\n\n1.0.1 (2012-01-26)\n------------------\n\n- Compute error_status and store it on request.\n Work around bug with Zope 2.13 publication events :\n response.status is not set when IPubBeforeAbort is notified.\n [gotcha]\n\n- Don't transform FTP requests\n [rochecompaan]\n\n1.0 - 2011-05-13\n----------------\n\n- Release 1.0 Final.\n [esteele]\n\n1.0b1 - 2010-04-21\n------------------\n\n- Initial release\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://pypi.org/project/plone.transformchain", "keywords": "zope2 repoze transform", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "plone.transformchain", "package_url": "https://pypi.org/project/plone.transformchain/", "platform": "", "project_url": "https://pypi.org/project/plone.transformchain/", "project_urls": { "Homepage": "https://pypi.org/project/plone.transformchain" }, "release_url": "https://pypi.org/project/plone.transformchain/2.0.1/", "requires_dist": [ "setuptools", "six", "zope.interface", "zope.component", "zope.schema", "Zope2 (>=2.13.23)", "repoze.zope2; extra == 'repoze'", "plone.testing[zca]; extra == 'test'" ], "requires_python": "", "summary": "Hook into repoze.zope2 that allows third party packages to register a sequence of hooks that will be allowed to modify the response before it is returned to the browser", "version": "2.0.1" }, "last_serial": 4449532, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "9fb2ce9c23d9b4a8ca86e42ee4ff876a", "sha256": "cd2ab98879c276c3a1c13e1a816475818d9d33b927fd8f8ae83cad08eb6cb0c2" }, "downloads": -1, "filename": "plone.transformchain-1.0.zip", "has_sig": false, "md5_digest": "9fb2ce9c23d9b4a8ca86e42ee4ff876a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16116, "upload_time": "2011-05-14T13:24:24", "url": "https://files.pythonhosted.org/packages/b6/65/fd21a4fbea31e3aa8c82da7efb3834b43dc4ad1e26fe3b1e51c14235cdff/plone.transformchain-1.0.zip" } ], "1.0.1dev": [ { "comment_text": "", "digests": { "md5": "e9ceab7a4bc39e2d5b852888a0d8863a", "sha256": "de1f5f0faa4437fe408e013fc6f2722e377c6cdf954ed6d859794883d844f298" }, "downloads": -1, "filename": "plone.transformchain-1.0.1dev.tar.gz", "has_sig": false, "md5_digest": "e9ceab7a4bc39e2d5b852888a0d8863a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8909, "upload_time": "2012-01-27T02:51:15", "url": "https://files.pythonhosted.org/packages/49/2c/8749570875a5d75957ca3d9041aa0f60caedf5a6eb153dfb437e7eb2c6d4/plone.transformchain-1.0.1dev.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "18f836f28ad78ee69ab5d182a1b7664a", "sha256": "f498a03e272a8ca7adc0d5e7daccf93be96a8048325b5baa94384c0c8e66d698" }, "downloads": -1, "filename": "plone.transformchain-1.0.2.tar.gz", "has_sig": false, "md5_digest": "18f836f28ad78ee69ab5d182a1b7664a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8922, "upload_time": "2012-01-27T02:55:49", "url": "https://files.pythonhosted.org/packages/a1/56/e4b479b7ce1a839a87da3c981bd4a626a95cbca44b468db2544003f9e69d/plone.transformchain-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "f5fb7ca894249e3e666501c4fae52a6c", "sha256": "958d017c3462e1d1b9c1fde10ce8fdde3a69134294a83e4a803bdbfb95e9bdfd" }, "downloads": -1, "filename": "plone.transformchain-1.0.3.zip", "has_sig": false, "md5_digest": "f5fb7ca894249e3e666501c4fae52a6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17586, "upload_time": "2013-01-13T17:58:32", "url": "https://files.pythonhosted.org/packages/ae/91/0d7cc877ef046158602950e70bf879838e11e9b34a57fd0287109c03d61a/plone.transformchain-1.0.3.zip" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "58c877c782c69cf908c99dcc74b5f5a7", "sha256": "5e404f6bbea9dc21c73f99f8790dfdb099d65ad8ce0bee4c31d1866824b2b7dd" }, "downloads": -1, "filename": "plone.transformchain-1.0.4.tar.gz", "has_sig": false, "md5_digest": "58c877c782c69cf908c99dcc74b5f5a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10866, "upload_time": "2015-05-11T14:20:53", "url": "https://files.pythonhosted.org/packages/f3/81/4e61dfc6485f1fcdb995051d3cbbb5f48e14af3a0b3dd8425e069eedaf22/plone.transformchain-1.0.4.tar.gz" } ], "1.0b1": [ { "comment_text": "", "digests": { "md5": "8d9183ad2a21b9508e8f3ec4af38a7fc", "sha256": "020fbc9ad44f010799640a7d2cb68f8298266246ab9f68d2775cdcc31cc32bd6" }, "downloads": -1, "filename": "plone.transformchain-1.0b1.zip", "has_sig": false, "md5_digest": "8d9183ad2a21b9508e8f3ec4af38a7fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16112, "upload_time": "2010-04-21T19:00:28", "url": "https://files.pythonhosted.org/packages/9d/fa/fb5336e9a4150c1ec82f40d7103db4828557029487a09b1304303da125ee/plone.transformchain-1.0b1.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9bcb20a11fb4c512b6ef692bebd1610f", "sha256": "2a23ca4a1cdfb24df97f62ba4083a1981085785fd7e53361724163b3a6163832" }, "downloads": -1, "filename": "plone.transformchain-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9bcb20a11fb4c512b6ef692bebd1610f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10762, "upload_time": "2016-02-21T17:37:44", "url": "https://files.pythonhosted.org/packages/70/12/d59c904d1301bc28130ea553e901676148f70df77f8686187c6a8a0f7af8/plone.transformchain-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "88026460ed8eb29fc44c0a6bce813b50", "sha256": "8a87bfd54b8d846cd52f7c9ac9c5f64ec6596523a7548eb49e83d171bf6e1bd0" }, "downloads": -1, "filename": "plone.transformchain-1.2.0.tar.gz", "has_sig": false, "md5_digest": "88026460ed8eb29fc44c0a6bce813b50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11294, "upload_time": "2016-06-21T14:52:22", "url": "https://files.pythonhosted.org/packages/ae/05/1a0c8ab59ec8be9450d461e0e75131c4b5bc59bd03e8f0642c120a397fe6/plone.transformchain-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "8928facd900eba23ce62ab5bc8ef2aef", "sha256": "931f0747221d114cc3ccc86881cde63d1adcfca8f7a88011d6b610590ef0195e" }, "downloads": -1, "filename": "plone.transformchain-1.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "8928facd900eba23ce62ab5bc8ef2aef", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14352, "upload_time": "2017-06-28T16:21:14", "url": "https://files.pythonhosted.org/packages/68/ca/6df0a7824175a47013a39ac3df756f1349bdabe2cc9c96b2b079577e3531/plone.transformchain-1.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bbdfbfdf0281402bb076b582515083a", "sha256": "3b53bd086c659ad210664188174d42f52c6d4ca955921c7b61526779231b4b48" }, "downloads": -1, "filename": "plone.transformchain-1.2.1.tar.gz", "has_sig": false, "md5_digest": "1bbdfbfdf0281402bb076b582515083a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11405, "upload_time": "2017-06-28T16:21:15", "url": "https://files.pythonhosted.org/packages/d6/d0/e02c1d2d4de731340f7548a5ecfe6fe0ca0c300644325f182b8fbfb45583/plone.transformchain-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "05737facca9f658d4e07cc891d5b40f5", "sha256": "8b9c32deb6d1185c921d63cb0bd653d2d5e84ccdfb72cd27bc8fa7b465515622" }, "downloads": -1, "filename": "plone.transformchain-1.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "05737facca9f658d4e07cc891d5b40f5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14502, "upload_time": "2018-02-12T02:31:31", "url": "https://files.pythonhosted.org/packages/26/d0/70ff3ea2a782348e6251b5667b3e4b7550b89d8cd4d321cf604cb450d067/plone.transformchain-1.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef26b703d9e0e318795eb4dd4df0abde", "sha256": "38af079d51fd34b7c0e022a7f17902d8408cb6e5bc6055f8bc6f7db6e8f268ee" }, "downloads": -1, "filename": "plone.transformchain-1.2.2.tar.gz", "has_sig": false, "md5_digest": "ef26b703d9e0e318795eb4dd4df0abde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11493, "upload_time": "2018-02-12T02:31:32", "url": "https://files.pythonhosted.org/packages/4c/3b/46e301b6878c69d5908693162c7a3a5f70d481c3abb39845f571cf535eca/plone.transformchain-1.2.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "672f36a3921b230ffcd0188156d12832", "sha256": "c3115dddd749f4f9f71f25bec0dd454ad2df73e914a0f1b9fdb2dc4f26059541" }, "downloads": -1, "filename": "plone.transformchain-2.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "672f36a3921b230ffcd0188156d12832", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11757, "upload_time": "2018-06-20T12:43:10", "url": "https://files.pythonhosted.org/packages/c2/13/1a43d7fde635cdd621ed88212f24cba5261e60719e021af67d0c67487328/plone.transformchain-2.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf4e57f78e95980fd419749b241567e1", "sha256": "2694fb4611715dc255368c5fb13a5fbb701ca3e20b471ec1d601fa31d4e62efb" }, "downloads": -1, "filename": "plone.transformchain-2.0.0.tar.gz", "has_sig": false, "md5_digest": "bf4e57f78e95980fd419749b241567e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12067, "upload_time": "2018-06-20T12:43:11", "url": "https://files.pythonhosted.org/packages/a4/ea/52771b45940dae0b87572d8c4bf4def7736671608f1b7132940172d9ae29/plone.transformchain-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "d5394a2cfe6828972a345a2ef7789dc8", "sha256": "11270d1730b096cb2d8d4eeaa2129f771900cb97df3c1e663012ef4e36fa1be1" }, "downloads": -1, "filename": "plone.transformchain-2.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "d5394a2cfe6828972a345a2ef7789dc8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11884, "upload_time": "2018-11-04T12:20:31", "url": "https://files.pythonhosted.org/packages/60/6a/c723b244d2bc01d6ffbfcf55aca7aeae7c4eb222877019e4095c5af83c15/plone.transformchain-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83f67f7891ecbb09e38357162e8fdc35", "sha256": "db5f930734e7b58d243196859f869864ef2a338f4b765f83aa570a720f3f2974" }, "downloads": -1, "filename": "plone.transformchain-2.0.1.tar.gz", "has_sig": false, "md5_digest": "83f67f7891ecbb09e38357162e8fdc35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11947, "upload_time": "2018-11-04T12:20:33", "url": "https://files.pythonhosted.org/packages/34/fc/5cd1af257e9cd9dcc58d57789e30db3d3a1ae9f624e9818579dd41630a10/plone.transformchain-2.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d5394a2cfe6828972a345a2ef7789dc8", "sha256": "11270d1730b096cb2d8d4eeaa2129f771900cb97df3c1e663012ef4e36fa1be1" }, "downloads": -1, "filename": "plone.transformchain-2.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "d5394a2cfe6828972a345a2ef7789dc8", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11884, "upload_time": "2018-11-04T12:20:31", "url": "https://files.pythonhosted.org/packages/60/6a/c723b244d2bc01d6ffbfcf55aca7aeae7c4eb222877019e4095c5af83c15/plone.transformchain-2.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "83f67f7891ecbb09e38357162e8fdc35", "sha256": "db5f930734e7b58d243196859f869864ef2a338f4b765f83aa570a720f3f2974" }, "downloads": -1, "filename": "plone.transformchain-2.0.1.tar.gz", "has_sig": false, "md5_digest": "83f67f7891ecbb09e38357162e8fdc35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11947, "upload_time": "2018-11-04T12:20:33", "url": "https://files.pythonhosted.org/packages/34/fc/5cd1af257e9cd9dcc58d57789e30db3d3a1ae9f624e9818579dd41630a10/plone.transformchain-2.0.1.tar.gz" } ] }