mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-04-06 08:51:03 +08:00
43 lines
1.1 KiB
Python
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
|