qmsk/web/json.py
author Tero Marttila <terom@paivola.fi>
Fri, 30 Jan 2015 16:06:55 +0200
changeset 112 b5e0939124b1
parent 111 530d215d5df1
permissions -rw-r--r--
qmsk.web: JSONMixin.request_post() to support JSON decoding
108
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
import json
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
class JSONMixin:
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
    MIMETYPE = 'application/json'
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
110
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
     6
    CORS_ORIGIN = None
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
     7
    CORS_METHODS = None
111
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
     8
    CORS_HEADERS = None
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
     9
    CORS_CREDENTIALS = None
110
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    10
    
112
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    11
    def request_post(self):
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    12
        if self.request.method != 'POST':
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    13
            return None
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    14
        elif self.request.mimetype == 'application/json':
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    15
            return json.loads(self.request.get_data(as_text=True))
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    16
        else:
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    17
            return self.request.form
b5e0939124b1 qmsk.web: JSONMixin.request_post() to support JSON decoding
Tero Marttila <terom@paivola.fi>
parents: 111
diff changeset
    18
    
110
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    19
    def headers (self):
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    20
        if self.CORS_ORIGIN:
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    21
            yield 'Access-Control-Allow-Origin', self.CORS_ORIGIN
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    22
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    23
        if self.CORS_METHODS:
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    24
            yield 'Access-Control-Allow-Methods', ', '.join(self.CORS_METHODS)
7af0b8ce698f qmsk.web.json: CORS_ORIGIN/CORS_METHODS
Tero Marttila <terom@paivola.fi>
parents: 108
diff changeset
    25
111
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
    26
        if self.CORS_HEADERS:
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
    27
            yield 'Access-Control-Allow-Headers', ', '.join(self.CORS_HEADERS)
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
    28
        
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
    29
        if self.CORS_CREDENTIALS:
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
    30
            yield 'Access-Control-Allow-Credentials', 'true'
530d215d5df1 qmsk.web.json: CORS_HEADERS CORS_CREDENTIALS
Tero Marttila <terom@paivola.fi>
parents: 110
diff changeset
    31
108
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
    def render_json(self, **parms):
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
        raise NotImplementedError()
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    def render_response(self, **params):
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
        data = self.render_json(**params)
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
        return json.dumps(data)
e77b7c324a32 qmsk.web.json
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39