feat(Global): Implemented validation on requests and error handling

This commit is contained in:
Luka 2021-11-02 07:54:07 +00:00
parent 38d94cd041
commit 927ef220cd
8 changed files with 136 additions and 34 deletions

2
helpers/__init__.py Normal file
View file

@ -0,0 +1,2 @@
from .kratos_api import *
from .error_handler import *

34
helpers/error_handler.py Normal file
View file

@ -0,0 +1,34 @@
from flask import jsonify
from jsonschema import ValidationError
class KratosError(Exception):
pass
class BadRequest(Exception):
pass
def bad_request_error(e):
message = e.args[0] if e.args else "Bad request to the server."
return jsonify({"errorMessage": message})
def validation_error(e):
original_error = e.description
return (
jsonify({"errorMessage": "{} is not valid.".format(original_error.path[0])}),
400,
)
def kratos_error(e):
message = e.args[0] if e.args else "Failed to contant Kratos."
status_code = e.args[1] if e.args else 500
return jsonify({"errorMessage": message}), status_code
def global_error(e):
message = e.args[0] if e.args else "Something went wrong."
return jsonify({"errorMessage": message})

View file

@ -1,32 +1,55 @@
from logging import error
import requests
from config import *
from .error_handler import KratosError
class KratosApi:
@staticmethod
def __handleError(res):
if res.status_code >= 400:
message = res.json()["error"]["message"]
raise KratosError(message, res.status_code)
class KratosApi():
@staticmethod
def get(url):
try:
return requests.get('{}{}'.format(KRATOS_URL, url))
res = requests.get("{}{}".format(KRATOS_URL, url))
KratosApi.__handleError(res)
return res
except:
return "Failed to contact Kratos"
raise KratosError()
@staticmethod
def post(url, data):
try:
return requests.post('{}{}'.format(KRATOS_URL, url), json=data)
res = requests.post("{}{}".format(KRATOS_URL, url), json=data)
KratosApi.__handleError(res)
return res
except KratosError as err:
raise err
except:
return "Failed to contact Kratos"
raise KratosError()
@staticmethod
def put(url, data):
try:
return requests.put('{}{}'.format(KRATOS_URL, url), json=data)
res = requests.put("{}{}".format(KRATOS_URL, url), json=data)
KratosApi.__handleError(res)
return res
except KratosError as err:
raise err
except:
return "Failed to contact Kratos"
raise KratosError()
@staticmethod
def delete(url):
try:
return requests.delete('{}{}'.format(KRATOS_URL, url))
res = requests.delete("{}{}".format(KRATOS_URL, url))
KratosApi.__handleError(res)
return res
except KratosError as err:
raise err
except:
return "Failed to contact Kratos"
raise KratosError()