diff --git a/api/funkwhale_api/federation/tasks.py b/api/funkwhale_api/federation/tasks.py index d9b0e60833134ce940a12d56a40bef21b7d3a57f..6cb91238d2739a0b881101981c502b61fb646926 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 6c9f7e41c4754b8c2a40819ab02529965e6583bb..1cb6b1d8afc3ecfd1806eadc47302ee383863a10 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"]