def set_content_type(): extension = request.environ.get('extension') or \ request.environ.get('reddit-domain-extension') or \ 'html' c.render_style = 'html' if extension in ('rss', 'xml'): c.render_style = 'xml' c.response_content_type = 'text/xml; charset=UTF-8' elif extension == 'js': c.render_style = 'js' c.response_content_type = 'text/javascript; charset=UTF-8' elif extension.startswith('json') or extension == "api": c.response_content_type = 'application/json; charset=UTF-8' c.response_access_control = 'allow <*>' if extension == 'json-html': c.render_style = api_type('html') else: c.render_style = api_type() elif extension == 'wired': c.render_style = 'wired' c.response_content_type = 'text/javascript; charset=UTF-8' c.response_wrappers.append(utils.to_js) elif extension == 'embed': c.render_style = 'htmllite' c.response_content_type = 'text/javascript; charset=UTF-8' c.response_wrappers.append(utils.to_js) elif extension == 'mobile': c.render_style = 'mobile'
class ExtensionMiddleware(object): ext_pattern = re.compile(r'\.([^/]+)$') extensions = {'rss' : ('xml', 'text/xml; charset=UTF-8'), 'xml' : ('xml', 'text/xml; charset=UTF-8'), 'js' : ('js', 'text/javascript; charset=UTF-8'), #'png' : ('png', 'image/png'), #'css' : ('css', 'text/css'), 'api' : (api_type(), 'application/json; charset=UTF-8'), 'json' : (api_type(), 'application/json; charset=UTF-8'), 'json-html' : (api_type('html'), 'application/json; charset=UTF-8')} def __init__(self, app): self.app = app def __call__(self, environ, start_response): path = environ['PATH_INFO'] domain_ext = environ.get('reddit-domain-extension') for ext, val in self.extensions.iteritems(): if ext == domain_ext or path.endswith('.' + ext): environ['extension'] = ext environ['render_style'] = val[0] environ['content_type'] = val[1] #strip off the extension if path.endswith('.' + ext): environ['PATH_INFO'] = path[:-(len(ext) + 1)] break else: environ['render_style'] = 'html' environ['content_type'] = 'text/html; charset=UTF-8' return self.app(environ, start_response)
def run(self, limit): default = c.user.pref_numsites if c.render_style in ("compact", api_type("compact")): default = 25 # TODO: ini param? if limit is None: return default try: i = int(limit) except ValueError: return default return min(max(i, 1), 100)
def newfn(self, *a, **env): c.render_style = api_type('html') c.response_content_type = 'application/json; charset=UTF-8' # generate a response object if request.params.get('api_type') == "json": responder = JsonResponse() else: responder = JQueryResponse() try: kw = _make_validated_kw(fn, simple_vals, param_vals, env) return response_function(self, fn, responder, simple_vals, param_vals, *a, **kw) except UserRequiredException: responder.send_failure(errors.USER_REQUIRED) return self.response_func(responder.make_response())
def newfn(self, *a, **env): c.render_style = api_type('html') c.response_content_type = 'application/json; charset=UTF-8' # generate a response object if request.params.get('api_type') == "json": responder = JsonResponse() else: responder = JQueryResponse() try: kw = _make_validated_kw(fn, simple_vals, param_vals, env) return response_function(self, fn, responder, simple_vals, param_vals, *a, **kw) except UserRequiredException: responder.send_failure(errors.USER_REQUIRED) return self.api_wrapper(responder.make_response()) except VerifiedUserRequiredException: responder.send_failure(errors.VERIFIED_USER_REQUIRED) return self.api_wrapper(responder.make_response())
def newfn(self, *a, **env): c.render_style = api_type(request.params.get("renderstyle", response_type)) # generate a response object if response_type == "html" and not request.params.get('api_type') == "json": responder = JQueryResponse() else: responder = JsonResponse() c.response_content_type = responder.content_type try: kw = _make_validated_kw(fn, simple_vals, param_vals, env) return response_function(self, fn, responder, simple_vals, param_vals, *a, **kw) except UserRequiredException: responder.send_failure(errors.USER_REQUIRED) return self.api_wrapper(responder.make_response()) except VerifiedUserRequiredException: responder.send_failure(errors.VERIFIED_USER_REQUIRED) return self.api_wrapper(responder.make_response())
from r2.lib.jsontemplates import api_type extension_mapping = { "rss": ("xml", "text/xml; charset=UTF-8"), "xml": ("xml", "text/xml; charset=UTF-8"), "js": ("js", "text/javascript; charset=UTF-8"), "wired": ("wired", "text/javascript; charset=UTF-8"), "embed": ("htmllite", "text/javascript; charset=UTF-8"), "mobile": ("mobile", "text/html; charset=UTF-8"), "png": ("png", "image/png"), "css": ("css", "text/css"), "csv": ("csv", "text/csv; charset=UTF-8"), "api": (api_type(), "application/json; charset=UTF-8"), "json-html": (api_type("html"), "application/json; charset=UTF-8"), "json-compact": (api_type("compact"), "application/json; charset=UTF-8"), "compact": ("compact", "text/html; charset=UTF-8"), "json": (api_type(), "application/json; charset=UTF-8"), "i": ("compact", "text/html; charset=UTF-8"), } def set_extension(environ, ext): environ["extension"] = ext environ["render_style"], environ["content_type"] = extension_mapping[ext]