示例#1
0
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'
示例#2
0
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)
示例#3
0
文件: validator.py 项目: pvh/reddit
    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)
示例#4
0
 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())
示例#5
0
 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())
示例#6
0
                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())
示例#7
0
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]