From 60add2525c032ec2e7608d9d43ec8bc0923b5ee7 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Sun, 22 Mar 2020 12:07:14 +0100 Subject: [PATCH] fargo: hide user-not-found API errors and only that (#35352) --- combo/apps/fargo/models.py | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/combo/apps/fargo/models.py b/combo/apps/fargo/models.py index c2c167f5..734f407c 100644 --- a/combo/apps/fargo/models.py +++ b/combo/apps/fargo/models.py @@ -14,16 +14,22 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import logging + from django.conf import settings from django.db import models from django.forms import models as model_forms from django.forms import Select from django.utils.translation import ugettext_lazy as _ +from requests import RequestException, HTTPError + from combo.data.models import CellBase from combo.data.library import register_cell_class from combo.utils import requests +logger = logging.getLogger(__name__) + @register_cell_class class RecentDocumentsCell(CellBase): @@ -63,14 +69,31 @@ class RecentDocumentsCell(CellBase): return hasattr(settings, 'KNOWN_SERVICES') and settings.KNOWN_SERVICES.get('fargo') def get_json(self, path, context): - remote_service = get_fargo_site(self.fargo_site) - response = requests.get(path, - remote_service=get_fargo_site(self.fargo_site), - user=self.get_concerned_user(context), - raise_if_not_cached=not(context.get('synchronous')), - headers={'accept': 'application/json'}) - if response.status_code == 200: + user = self.get_concerned_user(context) + try: + response = requests.get(path, + remote_service=get_fargo_site(self.fargo_site), + user=user, + raise_if_not_cached=not(context.get('synchronous')), + headers={'accept': 'application/json'}, + log_errors=True) + response.raise_for_status() return response.json() + except HTTPError as e: + status_code = e.response.status_code + try: + content = e.response.json() + except Exception: + err = None + else: + err = content.get('err') if isinstance(content, dict) else None + if status_code == 401 and err == 'user-not-found': + log = logger.info + else: + log = logger.error + log('could not retrieve recent documents for user %s: status-code=%s err=%s', user, status_code, err) + except RequestException as e: + logger.error('could not retrieve recent documents for user %s: %s', user, e) return {} def render(self, context): -- 2.24.0