From 45132dea751c33cd2c3db32d43bf09b7cabfa1c5 Mon Sep 17 00:00:00 2001 From: Agate Date: Sun, 14 Jun 2020 15:09:14 +0200 Subject: [PATCH] Improved some error handling --- api/funkwhale_api/federation/tasks.py | 7 ++++++- api/funkwhale_api/music/views.py | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/api/funkwhale_api/federation/tasks.py b/api/funkwhale_api/federation/tasks.py index d9b0e6083..6cb91238d 100644 --- a/api/funkwhale_api/federation/tasks.py +++ b/api/funkwhale_api/federation/tasks.py @@ -23,6 +23,7 @@ from funkwhale_api.taskapp import celery from . import activity from . import actors +from . import exceptions from . import jsonld from . import keys from . import models, signing @@ -212,7 +213,11 @@ def update_domain_nodeinfo(domain): if service_actor_id else None ) - except (serializers.serializers.ValidationError, RequestException) as e: + except ( + serializers.serializers.ValidationError, + RequestException, + exceptions.BlockedActorOrDomain, + ) as e: logger.warning( "Cannot fetch system actor for domain %s: %s", domain.name, str(e) ) diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 6c9f7e41c..1cb6b1d8a 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -2,7 +2,6 @@ import base64 import datetime import logging import urllib.parse - from django.conf import settings from django.db import transaction from django.db.models import Count, Prefetch, Sum, F, Q @@ -15,6 +14,8 @@ from rest_framework import views, viewsets from rest_framework.decorators import action from rest_framework.response import Response +import requests.exceptions + from funkwhale_api.common import decorators as common_decorators from funkwhale_api.common import permissions as common_permissions from funkwhale_api.common import preferences @@ -532,7 +533,10 @@ def handle_serve( actor = user.actor else: actor = actors.get_service_actor() - f.download_audio_from_remote(actor=actor) + try: + f.download_audio_from_remote(actor=actor) + except requests.exceptions.RequestException: + return Response({"detail": "Remove track is unavailable"}, status=503) data = f.get_audio_data() if data: f.duration = data["duration"]