From 78efce8e383ab07042c00e254eebed5b2545fba4 Mon Sep 17 00:00:00 2001
From: Kazuhiko SHIOZAKI <kazuhiko@nexedi.com>
Date: Fri, 26 Mar 2021 16:04:36 +0000
Subject: [PATCH] Base, WebSection, OOoDocumentExtensibleTraversableMixin: do
 not compute the response body in 304 Not Modified response case.

---
 .../mixin.erp5.OOoDocumentExtensibleTraversableMixin.py         | 2 +-
 .../portal_components/document.erp5.WebSection.py               | 2 +-
 product/ERP5Type/Base.py                                        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/bt5/erp5_base/MixinTemplateItem/portal_components/mixin.erp5.OOoDocumentExtensibleTraversableMixin.py b/bt5/erp5_base/MixinTemplateItem/portal_components/mixin.erp5.OOoDocumentExtensibleTraversableMixin.py
index 47fe8952c8..3409427774 100644
--- a/bt5/erp5_base/MixinTemplateItem/portal_components/mixin.erp5.OOoDocumentExtensibleTraversableMixin.py
+++ b/bt5/erp5_base/MixinTemplateItem/portal_components/mixin.erp5.OOoDocumentExtensibleTraversableMixin.py
@@ -49,7 +49,6 @@ class OOoDocumentExtensibleTraversableMixin(BaseExtensibleTraversableMixin):
     web_cache_kw = {'name': name,
                     'format': EMBEDDED_FORMAT}
     try:
-      self._convert(format='html')
       view = _ViewEmulator().__of__(self)
       # call caching policy manager.
       _setCacheHeaders(view, web_cache_kw)
@@ -57,6 +56,7 @@ class OOoDocumentExtensibleTraversableMixin(BaseExtensibleTraversableMixin):
       # no content
       if _checkConditionalGET(view, web_cache_kw):
         return ''
+      self._convert(format='html')
       mime, data = self.getConversion(format=EMBEDDED_FORMAT, filename=name)
       document = OFSFile(name, name, data, content_type=mime).__of__(self.aq_parent)
     except (NotConvertedError, ConversionError, KeyError):
diff --git a/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py b/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py
index 26176c1d5d..ff5ff9c0a3 100644
--- a/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py
+++ b/bt5/erp5_web/DocumentTemplateItem/portal_components/document.erp5.WebSection.py
@@ -252,7 +252,6 @@ class WebSection(Domain, DocumentExtensibleTraversableMixin):
       if custom_render_method_id is not None:
         if document is None:
           document = self
-        result = getattr(document, custom_render_method_id)()
         view = _ViewEmulator().__of__(self)
         # call caching policy manager.
         _setCacheHeaders(view, {})
@@ -260,6 +259,7 @@ class WebSection(Domain, DocumentExtensibleTraversableMixin):
         # no content
         if _checkConditionalGET(view, extra_context={}):
           return ''
+        result = getattr(document, custom_render_method_id)()
         return result
       elif document is not None:
         return document()
diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py
index a71a5634da..9f7802b52f 100644
--- a/product/ERP5Type/Base.py
+++ b/product/ERP5Type/Base.py
@@ -2516,7 +2516,6 @@ class Base(
   security.declareProtected(Permissions.View, 'view')
   def view(self):
     """Returns the default view even if index_html is overridden"""
-    result = self._renderDefaultView('view')
     view = _ViewEmulator().__of__(self)
     # call caching policy manager.
     _setCacheHeaders(view, {})
@@ -2524,6 +2523,7 @@ class Base(
     # no content
     if _checkConditionalGET(view, extra_context={}):
       return ''
+    result = self._renderDefaultView('view')
     return result
 
   # Default views - the default security in CMFCore
-- 
2.30.9