Pyramid views returning Pyramid Response objects are not rendered
authorKarl O. Pinc <kop@karlpinc.com>
Fri, 20 Sep 2024 22:10:04 +0000 (17:10 -0500)
committerKarl O. Pinc <kop@karlpinc.com>
Fri, 20 Sep 2024 22:10:04 +0000 (17:10 -0500)
src/pgwui_common/view.py
tests/test_view.py

index fda475587170c786f2f8a844484eaa06f35c07ca..75a729c6590643a322ce28fedde1efd7674afc5c 100644 (file)
@@ -22,6 +22,7 @@
 
 '''View decorators to expose useful response "variables" to templates
 '''
+import pyramid.response
 
 
 def merge_urls(request, pgwui):
@@ -41,6 +42,8 @@ def base_view(wrapped):
         '''Add variables missing but needed by base.mk to the response.
         '''
         response = wrapped(request)
+        if isinstance(response, pyramid.response.Response):
+            return response   # Pyramid views returning Response don't render
         pgwui = response.get('pgwui', {})
         merge_urls(request, pgwui)
         response['pgwui'] = pgwui
index 99367853c11f145e1c821ec0ec36f96653486be7..b931130732a3a0edb09823fd459a6979ca466976 100644 (file)
@@ -21,6 +21,7 @@
 # Karl O. Pinc <kop@karlpinc.com>
 
 import pytest
+import pyramid.response
 from pyramid.threadlocal import get_current_request
 
 import pgwui_common.view as view
@@ -108,6 +109,16 @@ def test_base_view_default(mock_merge_urls):
     check_base_view_results(request, pgwui)
 
 
+def test_base_view_response(mock_merge_urls):
+    '''Pyramid requests are immediately returned'''
+    wrapper = view.base_view(lambda request: pyramid.response.Response())
+    request = get_current_request()
+    response = wrapper(request)
+
+    assert isinstance(response, pyramid.response.Response)
+    assert mock_merge_urls.call_count == 0
+
+
 mock_base_view = testing.make_mock_fixture(view, 'base_view')