kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
Now return proper error payload on subsonic API
rodzic
f5225d3285
commit
6f79dd475d
|
@ -15,6 +15,9 @@ class SubsonicJSONRenderer(renderers.JSONRenderer):
|
|||
}
|
||||
}
|
||||
final['subsonic-response'].update(data)
|
||||
if 'error' in final:
|
||||
# an error was returned
|
||||
final['subsonic-response']['status'] = 'failed'
|
||||
return super().render(final, accepted_media_type, renderer_context)
|
||||
|
||||
|
||||
|
@ -31,6 +34,9 @@ class SubsonicXMLRenderer(renderers.JSONRenderer):
|
|||
'version': '1.16.0',
|
||||
}
|
||||
final.update(data)
|
||||
if 'error' in final:
|
||||
# an error was returned
|
||||
final['status'] = 'failed'
|
||||
tree = dict_to_xml_tree('subsonic-response', final)
|
||||
return b'<?xml version="1.0" encoding="UTF-8"?>\n' + ET.tostring(tree, encoding='utf-8')
|
||||
|
||||
|
|
|
@ -31,15 +31,19 @@ def find_object(queryset, model_field='pk', field='id', cast=int):
|
|||
raw_value = data[field]
|
||||
except KeyError:
|
||||
return response.Response({
|
||||
'code': 10,
|
||||
'message': "required parameter '{}' not present".format(field)
|
||||
'error': {
|
||||
'code': 10,
|
||||
'message': "required parameter '{}' not present".format(field)
|
||||
}
|
||||
})
|
||||
try:
|
||||
value = cast(raw_value)
|
||||
except (TypeError, ValidationError):
|
||||
return response.Response({
|
||||
'code': 0,
|
||||
'message': 'For input string "{}"'.format(raw_value)
|
||||
'error': {
|
||||
'code': 0,
|
||||
'message': 'For input string "{}"'.format(raw_value)
|
||||
}
|
||||
})
|
||||
qs = queryset
|
||||
if hasattr(qs, '__call__'):
|
||||
|
@ -48,9 +52,11 @@ def find_object(queryset, model_field='pk', field='id', cast=int):
|
|||
obj = qs.get(**{model_field: value})
|
||||
except qs.model.DoesNotExist:
|
||||
return response.Response({
|
||||
'code': 70,
|
||||
'message': '{} not found'.format(
|
||||
qs.model.__class__.__name__)
|
||||
'error': {
|
||||
'code': 70,
|
||||
'message': '{} not found'.format(
|
||||
qs.model.__class__.__name__)
|
||||
}
|
||||
})
|
||||
kwargs['obj'] = obj
|
||||
return func(self, request, *args, **kwargs)
|
||||
|
@ -83,15 +89,14 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
|||
payload = {
|
||||
'status': 'failed'
|
||||
}
|
||||
try:
|
||||
if exc.__class__ in mapping:
|
||||
code, message = mapping[exc.__class__]
|
||||
except KeyError:
|
||||
return super().handle_exception(exc)
|
||||
else:
|
||||
payload['error'] = {
|
||||
'code': code,
|
||||
'message': message
|
||||
}
|
||||
return super().handle_exception(exc)
|
||||
payload['error'] = {
|
||||
'code': code,
|
||||
'message': message
|
||||
}
|
||||
|
||||
return response.Response(payload, status=200)
|
||||
|
||||
|
@ -450,8 +455,10 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
|||
name = data.get('name', '')
|
||||
if not name:
|
||||
return response.Response({
|
||||
'code': 10,
|
||||
'message': 'Playlist ID or name must be specified.'
|
||||
'error': {
|
||||
'code': 10,
|
||||
'message': 'Playlist ID or name must be specified.'
|
||||
}
|
||||
}, data)
|
||||
|
||||
playlist = request.user.playlists.create(
|
||||
|
|
Ładowanie…
Reference in New Issue