From 34f00aede8634810164baaac0fd9214b683ff181 Mon Sep 17 00:00:00 2001 From: "Lorenzo M. Catucci" Date: Fri, 8 Jun 2012 12:31:50 +0200 Subject: RFC 2616 sec. 3.7 case insensitive match test Since "... The type, subtype, and parameter attribute names are case- insensitive..." the type and subtype in the accept parameter in add_view should be treated in a case insensitive way. --- pyramid/tests/test_config/test_views.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pyramid/tests/test_config/test_views.py b/pyramid/tests/test_config/test_views.py index 9b46f83c9..4e1be2190 100644 --- a/pyramid/tests/test_config/test_views.py +++ b/pyramid/tests/test_config/test_views.py @@ -645,6 +645,26 @@ class TestViewsConfigurationMixin(unittest.TestCase): request.accept = DummyAccept('text/html', 'text/html') self.assertEqual(wrapper(None, request), 'OK2') + def test_add_view_mixed_case_replaces_existing_view(self): + from pyramid.renderers import null_renderer + def view(context, request): return 'OK' + def view2(context, request): return 'OK2' + def view3(context, request): return 'OK3' + def get_val(obj, key): + return obj.get(key) + config = self._makeOne(autocommit=True) + config.add_view(view=view, renderer=null_renderer) + config.add_view(view=view2, accept='text/html', renderer=null_renderer) + config.add_view(view=view3, accept='text/HTML', renderer=null_renderer) + wrapper = self._getViewCallable(config) + self.assertTrue(IMultiView.providedBy(wrapper)) + self.assertEqual(len(wrapper.media_views.items()),1) + self.assertFalse(wrapper.media_views.has_key('text/HTML')) + self.assertEqual(wrapper(None, None), 'OK') + request = DummyRequest() + request.accept = DummyAccept('text/html', 'text/html') + self.assertEqual(wrapper(None, request), 'OK3') + def test_add_views_with_accept_multiview_replaces_existing(self): from pyramid.renderers import null_renderer def view(context, request): return 'OK' -- cgit v1.2.3 From ed9663c861b5da5a684a3ebd26700e52e49ce39f Mon Sep 17 00:00:00 2001 From: "Lorenzo M. Catucci" Date: Fri, 8 Jun 2012 13:32:55 +0200 Subject: Lowercase the accept parameter in add_view Fix the RFC 2616 sec. 3.7 compliance by storing a canonical cased version of the parameter. --- pyramid/config/views.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyramid/config/views.py b/pyramid/config/views.py index 9e9b5321b..d54976988 100644 --- a/pyramid/config/views.py +++ b/pyramid/config/views.py @@ -1001,6 +1001,9 @@ class ViewsConfiguratorMixin(object): # GET implies HEAD too request_method = as_sorted_tuple(request_method + ('HEAD',)) + if accept is not None: + accept = accept.lower() + order, predicates, phash = make_predicates(xhr=xhr, request_method=request_method, path_info=path_info, request_param=request_param, header=header, accept=accept, -- cgit v1.2.3 From ce5b5e4b842fe0e88d9ba5055b419b756723e8ec Mon Sep 17 00:00:00 2001 From: "Lorenzo M. Catucci" Date: Wed, 13 Jun 2012 16:25:14 +0200 Subject: Accept the Contributor Agreement. as suggested by "Contributing Source Code and Documentation" document. --- CONTRIBUTORS.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 98f73d5f9..dacc48765 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -172,3 +172,5 @@ Contributors - Wayne Witzel III, 2012/03/27 - Marin Rukavina, 2012/05/03 + +- Lorenzo M. Catucci, 2012/06/08 -- cgit v1.2.3