Source code for jobcontrol.utils.web

"""
Utilities for the RESTful API
"""

from functools import wraps
import json
import os
import binascii

from flask import request, make_response, session
from werkzeug.exceptions import BadRequest


[docs]def json_view(func): @wraps(func) def wrapper(*a, **kw): # todo: catch exceptions and rewrap + make sure they're all JSON rv = func(*a, **kw) if isinstance(rv, tuple): resp = make_response(json.dumps(rv[0]), *rv[1:]) else: resp = make_response(json.dumps(rv)) resp.headers['Content-type'] = 'application/json' return resp return wrapper
def _get_json_from_request(): if request.headers.get('Content-type') != 'application/json': raise BadRequest( "Unsupported Content-type (expected application/json)") try: return json.loads(request.data) except: raise BadRequest('Error decoding json')
[docs]def generate_csrf_token(): if '_csrf_token' not in session: session['_csrf_token'] = _generate_csrf_token() return session['_csrf_token']
def _generate_csrf_token(): return binascii.hexlify(os.urandom(32))