Commit 7187fb69 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

patch : Caching Policy Manager should not override existing response headers.

parent 0e43f1f9
...@@ -82,6 +82,7 @@ from Products.ERP5Type.patches import ExceptionFormatter ...@@ -82,6 +82,7 @@ from Products.ERP5Type.patches import ExceptionFormatter
from Products.ERP5Type.patches import WebDAV from Products.ERP5Type.patches import WebDAV
from Products.ERP5Type.patches import DTMLMethod from Products.ERP5Type.patches import DTMLMethod
from Products.ERP5Type.patches import DTMLDocument from Products.ERP5Type.patches import DTMLDocument
from Products.ERP5Type.patches import CMFCoreUtils
# These symbols are required for backward compatibility # These symbols are required for backward compatibility
from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager from Products.ERP5Type.patches.PropertyManager import ERP5PropertyManager
......
##############################################################################
#
# Copyright (c) 2001 Zope Foundation and Contributors.
# Copyright (c) 2015 Nexedi SA and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
from Acquisition import aq_parent
from Products.CMFCore.utils import getToolByName, SUBTEMPLATE
# patch _setCacheHeaders so that existing headers are not overridden
def _setCacheHeaders(obj, extra_context):
"""Set cache headers according to cache policy manager for the obj."""
REQUEST = getattr(obj, 'REQUEST', None)
if REQUEST is not None:
call_count = getattr(REQUEST, SUBTEMPLATE, 1) - 1
setattr(REQUEST, SUBTEMPLATE, call_count)
if call_count != 0:
return
# cleanup
delattr(REQUEST, SUBTEMPLATE)
content = aq_parent(obj)
manager = getToolByName(obj, 'caching_policy_manager', None)
if manager is None:
return
view_name = obj.getId()
headers = manager.getHTTPCachingHeaders(
content, view_name, extra_context
)
RESPONSE = REQUEST['RESPONSE']
# PATCH BEGIN: do not override existing headers
ignore_list = [y[0].lower() for y in RESPONSE.headers.iteritems()]
headers = [x for x in headers if x[0].lower() not in ignore_list]
# PATCH END
for key, value in headers:
if key == 'ETag':
RESPONSE.setHeader(key, value, literal=1)
else:
RESPONSE.setHeader(key, value)
if headers:
RESPONSE.setHeader('X-Cache-Headers-Set-By',
'CachingPolicyManager: %s' %
'/'.join(manager.getPhysicalPath()))
import Products.CMFCore.utils
Products.CMFCore.utils._setCacheHeaders = _setCacheHeaders
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment