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