def wrapper(request, *args, **kw): status = 200 try: result = decorated(request, *args, **kw) except UserException as user_exception: log("User exception in mock: %s" % user_exception.message, request=request, exc_info=True) status = 500 result = { 'success': False, 'result': { 'message': user_exception.message } } except json.JSONDecodeError: log(ERROR_INVALID_JSON, request=request, exc_info=True) status = 500 result = { 'success': False, 'result': { 'message': ERROR_INVALID_JSON } } except Exception: log("Exception in mock", request=request, exc_info=True) status = 500 result = {'success': False, 'result': {'message': ERROR_TEXT}} if 'success' not in result: result = {'success': True, 'result': result} return jsonify(result, status=status, headers=generate_cors_headers(request))
async def _before_request(request): """Respond to preflight CORS requests and load parameters.""" if request.method == "OPTIONS": return textify("ok", headers=generate_cors_headers(request)) request['args'] = {} if request.form: for key in request.form: key_lower = key.lower() if key_lower in _MUST_BE_GET_PARAM and not request.path.startswith(URL_BASE + '/email/'): raise UserException(CANNOT_BE_POST_PARAM % key) request['args'][key_lower] = request.form[key][0] elif request.json: slack_message = ('type' in request.json and request.json['type'] in _SLACK_TYPES) for key in request.json: key_lower = key.lower() if slack_message: request['args'][key_lower] = request.json[key] else: if key_lower in _MUST_BE_GET_PARAM and not request.path.startswith('/hangouts/'): raise UserException(CANNOT_BE_POST_PARAM % key) # Make all url parameters strings if isinstance(request.json[key], dict): request['args'][key_lower] = json.dumps(request.json[key]) elif isinstance(request.json[key], list): request['args'][key_lower] = json.dumps(request.json[key]) else: request['args'][key_lower] = str(request.json[key]) # Take all Get parameters for key, value in list(request.raw_args.items()): key_lower = key.lower() if key_lower in _MUST_BE_POST_PARAM: raise UserException(CANNOT_BE_GET_PARAM % key) request['args'][key_lower] = value
async def _preflight_cors(request): """Respond to preflight CORS requests and load parameters.""" if request.method == "OPTIONS": return textify("ok", headers=generate_cors_headers(request)) request['args'] = {} if request.form: for key in request.form: key_lower = key.lower() if key_lower in _MUST_BE_GET_PARAM: raise UserException(CANNOT_BE_POST_PARAM % key) request['args'][key_lower] = request.form[key][0] elif request.json: for key in request.json: key_lower = key.lower() if key_lower in _MUST_BE_GET_PARAM: raise UserException(CANNOT_BE_POST_PARAM % key) # Make all url parameters strings if isinstance(request.json[key], list): request['args'][key_lower] = json.dumps(request.json[key]) else: request['args'][key_lower] = str(request.json[key]) # Take all Get parameters for key, value in list(request.raw_args.items()): key_lower = key.lower() if key_lower in _MUST_BE_POST_PARAM: raise UserException(CANNOT_BE_GET_PARAM % key) request['args'][key_lower] = value
async def _version(request): return jsonify( { 'version': version.VERSION, 'name': version.NAME, 'hostname': cape_frontend_settings.HOSTNAME, 'port': cape_frontend_settings.CONFIG_SERVER['port'], }, headers=generate_cors_headers(request))
def _timeout(request, exception): return jsonify({ 'success': False, 'result': { 'message': TIMEOUT_TEXT } }, status=500, headers=generate_cors_headers(request))
def _404(request, exception): return jsonify({ 'success': False, 'result': { 'message': NOT_FOUND_TEXT } }, status=500, headers=generate_cors_headers(request))
def _500(request, exception): log('500', request=request, exc_info=True) if exception.__class__ is UserException: log("User exception: %s" % exception.message, request=request, exc_info=True) message = exception.message return jsonify({ 'success': False, 'result': { 'message': message } }, status=500, headers=generate_cors_headers(request)) return redirect('/500.html')
def _500(request, exception): error_id = secrets.token_urlsafe(32) if exception.__class__ is UserException: debug("User exception: %s" % exception.message, exc_info=True) message = exception.message elif exception.__class__ is json.JSONDecodeError: debug(ERROR_INVALID_JSON, exc_info=True, error_id=error_id) message = ERROR_INVALID_JSON elif exception.__class__ is InvalidUsage: debug(ERROR_INVALID_USAGE, exc_info=True) message = ERROR_INVALID_USAGE else: warning("Exception in API", exc_info=True) message = ERROR_TEXT return jsonify( { 'success': False, 'result': { 'message': message, 'errorId': error_id } }, status=500, headers=generate_cors_headers(request))
async def _version(request): return jsonify(status(request), headers=generate_cors_headers(request))
def wrapper(request, *args, **kw): status = 200 result = decorated(request, *args, **kw) return textify(result, status=status, headers=generate_cors_headers(request))
def wrapper(request, *args, **kw): status = 200 result = decorated(request, *args, **kw) if 'success' not in result: result = {'success': True, 'result': result} return jsonify(result, status=status, headers=generate_cors_headers(request))