qmsk/web/json.py
author Tero Marttila <terom@paivola.fi>
Thu, 30 Jul 2015 02:45:08 +0300
changeset 116 8d42dba32bb7
parent 112 b5e0939124b1
permissions -rw-r--r--
fixup namespace package for python3.3 style implict namespace package directories
import json

class JSONMixin:
    MIMETYPE = 'application/json'

    CORS_ORIGIN = None
    CORS_METHODS = None
    CORS_HEADERS = None
    CORS_CREDENTIALS = None
    
    def request_post(self):
        if self.request.method != 'POST':
            return None
        elif self.request.mimetype == 'application/json':
            return json.loads(self.request.get_data(as_text=True))
        else:
            return self.request.form
    
    def headers (self):
        if self.CORS_ORIGIN:
            yield 'Access-Control-Allow-Origin', self.CORS_ORIGIN

        if self.CORS_METHODS:
            yield 'Access-Control-Allow-Methods', ', '.join(self.CORS_METHODS)

        if self.CORS_HEADERS:
            yield 'Access-Control-Allow-Headers', ', '.join(self.CORS_HEADERS)
        
        if self.CORS_CREDENTIALS:
            yield 'Access-Control-Allow-Credentials', 'true'

    def render_json(self, **parms):
        raise NotImplementedError()

    def render_response(self, **params):
        data = self.render_json(**params)

        return json.dumps(data)