diff options
| author | Chris McDonough <chrism@plope.com> | 2012-05-03 11:24:44 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2012-05-03 11:24:44 -0400 |
| commit | 5851d82e08209a83bb6aa311cfbf4e3ab65c29fe (patch) | |
| tree | 8e393f47e7df9e5cd5935ab672114b5d12e821e9 | |
| parent | 0ce30393a763628379d40bcfa667b3e05a433ec4 (diff) | |
| download | pyramid-5851d82e08209a83bb6aa311cfbf4e3ab65c29fe.tar.gz pyramid-5851d82e08209a83bb6aa311cfbf4e3ab65c29fe.tar.bz2 pyramid-5851d82e08209a83bb6aa311cfbf4e3ab65c29fe.zip | |
reuse default logic between json and jsonp
| -rw-r--r-- | pyramid/renderers.py | 39 |
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: |
