From fbc9d8142ca5bca2baa695ca34ce17eb492b8581 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Sun, 25 Dec 2016 21:48:50 -0500 Subject: [PATCH] Create special EVEAPIForbiddenError exception; catch in members module. --- calefaction/eve/esi.py | 6 ++++-- calefaction/exceptions.py | 17 +++++++++++++++-- calefaction/modules/members.py | 12 ++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/calefaction/eve/esi.py b/calefaction/eve/esi.py index 2e41e13..d6209fc 100644 --- a/calefaction/eve/esi.py +++ b/calefaction/eve/esi.py @@ -6,7 +6,7 @@ from threading import Lock import requests -from ..exceptions import EVEAPIError +from ..exceptions import EVEAPIError, EVEAPIForbiddenError __all__ = ["EVESwaggerInterface"] @@ -196,8 +196,10 @@ class EVESwaggerInterface: headers=headers, timeout=10) resp.raise_for_status() result = resp.json() if resp.content else None - except (requests.RequestException, ValueError): + except (requests.RequestException, ValueError) as exc: self._logger.exception("ESI request failed") + if hasattr(exc, "response") and exc.response.status_code == 403: + raise EVEAPIForbiddenError() raise EVEAPIError() if can_cache and result is not None: diff --git a/calefaction/exceptions.py b/calefaction/exceptions.py index 980cab2..22250b2 100644 --- a/calefaction/exceptions.py +++ b/calefaction/exceptions.py @@ -1,13 +1,26 @@ # -*- coding: utf-8 -*- +""" +This module contains exceptions for Calefaction. + ++-- CalefactionError + +-- AccessDeniedError + +-- EVEAPIError + +-- EVEAPIForbiddenError +""" + class CalefactionError(RuntimeError): """Base exception class for errors within Calefaction.""" pass +class AccessDeniedError(CalefactionError): + """The user tried to do something they don't have permission for.""" + pass + class EVEAPIError(CalefactionError): """Represents (generally external) errors while using the EVE APIs.""" pass -class AccessDeniedError(CalefactionError): - """The user tried to do something they don't have permission for.""" +class EVEAPIForbiddenError(EVEAPIError): + """We tried to make an API request that we don't have permission for.""" pass diff --git a/calefaction/modules/members.py b/calefaction/modules/members.py index 4fa9a6c..9c3de35 100644 --- a/calefaction/modules/members.py +++ b/calefaction/modules/members.py @@ -6,6 +6,7 @@ from flask import g from flask_mako import render_template from ._provided import blueprint +from ..exceptions import EVEAPIForbiddenError SCOPES = {"esi-corporations.read_corporation_membership.v1"} @@ -28,10 +29,13 @@ def get_members(): return [] corp_id = g.config.get("corp.id") - resp = g.eve.esi(token).v2.corporations(corp_id).members.get() - cids = ",".join(str(item["character_id"]) for item in resp) - ceo_id = g.eve.esi(token).v2.corporations(corp_id).get()["ceo_id"] - resp = g.eve.esi(token).v1.characters.names.get(character_ids=cids) + try: + ceo_id = g.eve.esi(token).v2.corporations(corp_id).get()["ceo_id"] + cids_r = g.eve.esi(token).v2.corporations(corp_id).members.get() + cids = ",".join(sorted(str(item["character_id"]) for item in cids_r)) + resp = g.eve.esi(token).v1.characters.names.get(character_ids=cids) + except EVEAPIForbiddenError: + return [] members = [_Member(item["character_id"], item["character_name"], "CEO" if item["character_id"] == ceo_id else None)