From 4dd0f573d6b194a085d8089fc86cdc27d976ef8d Mon Sep 17 00:00:00 2001 From: Mark <mark@openappstack.net> Date: Tue, 12 Nov 2019 16:42:23 +0100 Subject: [PATCH] Refactor Exception handling --- consent_provider/app.py | 7 +++---- consent_provider/db.py | 21 +++++++++++++++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/consent_provider/app.py b/consent_provider/app.py index 40d9de2..0e17b7b 100644 --- a/consent_provider/app.py +++ b/consent_provider/app.py @@ -2,8 +2,7 @@ from flask import abort, Flask, redirect, request from flask.views import View from os import urandom, environ from hydra_client import HydraAdmin -from db import User -import urllib +from db import User, BackendConnectionError HYDRA_ADMIN_URL = environ['HYDRA_ADMIN_URL'] @@ -20,10 +19,10 @@ def home(): username = consent_request.subject try: user = User(username) - except urllib.error.HTTPError as e: + except BackendConnectionError as error: # TODO: replace with propper logging via logger print("Retrieving user object from GraphQL server failed") - print(e) + print(error) return redirect(consent_request.reject( "Permission denied", error_description="Login request was denied due to an internal server error")) diff --git a/consent_provider/db.py b/consent_provider/db.py index 6e9f020..b0302f7 100644 --- a/consent_provider/db.py +++ b/consent_provider/db.py @@ -13,8 +13,11 @@ class User(): self.username = username try: self._load_remote_user_info() - except urllib.error.HTTPError as e: - raise e + except urllib.error.HTTPError as error: + raise BackendConnectionError( + error.code, + error.headers, + ("Error during retrieval of userdata - " + error.reason)) def _load_remote_user_info(self): querystring = '''{{ @@ -57,3 +60,17 @@ class User(): "email" : self.email, "picture": ""} } + + +class BackendConnectionError(Exception): + """Raised when requests to the backend server fail + + Attributes: + code -- http response code + headers -- http response headers + reason -- reson for the error + """ + def __init__(self, code, headers, reason): + self.code = code + self.headers = headers + self.reaseon = reason -- GitLab