From 5851d82e08209a83bb6aa311cfbf4e3ab65c29fe Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Thu, 3 May 2012 11:24:44 -0400 Subject: reuse default logic between json and jsonp --- pyramid/renderers.py | 39 +++++++++++++++------------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/pyramid/renderers.py b/pyramid/renderers.py index 701878264..c9ae5b433 100644 --- a/pyramid/renderers.py +++ b/pyramid/renderers.py @@ -249,22 +249,24 @@ class JSON(object): ct = response.content_type if ct == response.default_content_type: response.content_type = 'application/json' - - def default(obj): - if hasattr(obj, '__json__'): - return obj.__json__(request) - obj_iface = providedBy(obj) - adapters = self.components.adapters - result = adapters.lookup((obj_iface,), IJSONAdapter, - default=_marker) - if result is _marker: - raise TypeError('%r is not JSON serializable' % (obj,)) - return result(obj, request) - + default = self._make_default(request) return self.serializer(value, default=default, **self.kw) return _render + def _make_default(self, request): + def default(obj): + if hasattr(obj, '__json__'): + return obj.__json__(request) + obj_iface = providedBy(obj) + adapters = self.components.adapters + result = adapters.lookup((obj_iface,), IJSONAdapter, + default=_marker) + if result is _marker: + raise TypeError('%r is not JSON serializable' % (obj,)) + return result(obj, request) + return default + json_renderer_factory = JSON() # bw compat class JSONP(JSON): @@ -339,18 +341,7 @@ class JSONP(JSON): plain-JSON encoded string with content-type ``application/json``""" def _render(value, system): request = system['request'] - - def default(obj): - if hasattr(obj, '__json__'): - return obj.__json__(request) - obj_iface = providedBy(obj) - adapters = self.components.adapters - result = adapters.lookup((obj_iface,), IJSONAdapter, - default=_marker) - if result is _marker: - raise TypeError('%r is not JSON serializable' % (obj,)) - return result(obj, request) - + default = self._make_default(request) val = self.serializer(value, default=default, **self.kw) callback = request.GET.get(self.param_name) if callback is None: -- cgit v1.2.3