summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2012-05-03 11:24:44 -0400
committerChris McDonough <chrism@plope.com>2012-05-03 11:24:44 -0400
commit5851d82e08209a83bb6aa311cfbf4e3ab65c29fe (patch)
tree8e393f47e7df9e5cd5935ab672114b5d12e821e9
parent0ce30393a763628379d40bcfa667b3e05a433ec4 (diff)
downloadpyramid-5851d82e08209a83bb6aa311cfbf4e3ab65c29fe.tar.gz
pyramid-5851d82e08209a83bb6aa311cfbf4e3ab65c29fe.tar.bz2
pyramid-5851d82e08209a83bb6aa311cfbf4e3ab65c29fe.zip
reuse default logic between json and jsonp
-rw-r--r--pyramid/renderers.py39
1 files 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: