@@ -1,6 +1,7 @@ import json import logging +from django.http import QueryDict from django.utils.translation import gettext_lazy as _ from drf_spectacular.utils import extend_schema from rest_framework import status @@ -83,18 +84,21 @@ class VoiceView(BaseGenerationView): info = request.data.get('info', {}) if isinstance(info, str): try: - info = json.loads(info) + info = json.loads(info) if info else {} except json.JSONDecodeError: return Response({'detail': _('Invalid info payload')}, status=HTTP_400_BAD_REQUEST) + if not isinstance(info, dict): + info = {} if voice_id.isdigit(): - info.update({'voice_id': int(voice_id)}) + info['voice_id'] = int(voice_id) else: - info.update({'preset_id': voice_id}) - ct = getattr(request, 'content_type', '') - if 'multipart/form-data' in ct: + info['preset_id'] = voice_id + if isinstance(request.data, QueryDict): + request.data._mutable = True request.data['info'] = json.dumps(info, ensure_ascii=False) + request.data._mutable = False else: - request.data["info"] = info + request.data['info'] = info return super().post(request, model_slug, *args, **kwargs)