Files
stacks-puppet-node/api/api/parameters.py
2016-08-15 12:11:31 -04:00

43 lines
1.1 KiB
Python

import json
import requests
from flask import request
from functools import update_wrapper
from werkzeug.datastructures import MultiDict, CombinedMultiDict
from .errors import APIError
def get_request_data():
args = []
request_data = {}
if request.data:
try:
request_data = json.loads(request.data)
except ValueError:
pass
for d in request.args, request.form, request_data:
if not isinstance(d, MultiDict):
d = MultiDict(d)
args.append(d)
return CombinedMultiDict(args)
def parameters_required(parameters):
def decorator(f):
def decorated_function(*args, **kwargs):
data = get_request_data()
parameters_missing = []
for parameter in parameters:
if parameter not in data:
parameters_missing.append(parameter)
if len(parameters_missing) > 0:
raise APIError(
'Parameters missing: ' + ', '.join(parameters_missing), 400
)
return f(*args, **kwargs)
return update_wrapper(decorated_function, f)
return decorator