diff options
author | fmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68> | 2011-02-12 09:19:33 +0000 |
---|---|---|
committer | fmoga <fmoga@13f79535-47bb-0310-9956-ffa450edef68> | 2011-02-12 09:19:33 +0000 |
commit | f0527e13c01fe1fecbd195a70192b6caa9e5f7d0 (patch) | |
tree | 6a5859781e4f7ab190ce781d60744df738b37349 /sca-java-2.x/tags/2.0-Beta2-RC3/modules/implementation-python-runtime/src/main/resources/django/utils/simplejson/jsonfilter.py | |
parent | 4f62b1f3e877a6ca26cfdd1670a550bc6a77477f (diff) |
Create the 2.0-Beta2-RC3 tag.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1070049 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/tags/2.0-Beta2-RC3/modules/implementation-python-runtime/src/main/resources/django/utils/simplejson/jsonfilter.py')
-rw-r--r-- | sca-java-2.x/tags/2.0-Beta2-RC3/modules/implementation-python-runtime/src/main/resources/django/utils/simplejson/jsonfilter.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/sca-java-2.x/tags/2.0-Beta2-RC3/modules/implementation-python-runtime/src/main/resources/django/utils/simplejson/jsonfilter.py b/sca-java-2.x/tags/2.0-Beta2-RC3/modules/implementation-python-runtime/src/main/resources/django/utils/simplejson/jsonfilter.py new file mode 100644 index 0000000000..d02ae2033a --- /dev/null +++ b/sca-java-2.x/tags/2.0-Beta2-RC3/modules/implementation-python-runtime/src/main/resources/django/utils/simplejson/jsonfilter.py @@ -0,0 +1,40 @@ +from django.utils import simplejson +import cgi + +class JSONFilter(object): + def __init__(self, app, mime_type='text/x-json'): + self.app = app + self.mime_type = mime_type + + def __call__(self, environ, start_response): + # Read JSON POST input to jsonfilter.json if matching mime type + response = {'status': '200 OK', 'headers': []} + def json_start_response(status, headers): + response['status'] = status + response['headers'].extend(headers) + environ['jsonfilter.mime_type'] = self.mime_type + if environ.get('REQUEST_METHOD', '') == 'POST': + if environ.get('CONTENT_TYPE', '') == self.mime_type: + args = [_ for _ in [environ.get('CONTENT_LENGTH')] if _] + data = environ['wsgi.input'].read(*map(int, args)) + environ['jsonfilter.json'] = simplejson.loads(data) + res = simplejson.dumps(self.app(environ, json_start_response)) + jsonp = cgi.parse_qs(environ.get('QUERY_STRING', '')).get('jsonp') + if jsonp: + content_type = 'text/javascript' + res = ''.join(jsonp + ['(', res, ')']) + elif 'Opera' in environ.get('HTTP_USER_AGENT', ''): + # Opera has bunk XMLHttpRequest support for most mime types + content_type = 'text/plain' + else: + content_type = self.mime_type + headers = [ + ('Content-type', content_type), + ('Content-length', len(res)), + ] + headers.extend(response['headers']) + start_response(response['status'], headers) + return [res] + +def factory(app, global_conf, **kw): + return JSONFilter(app, **kw) |