From 75c1b456bf678a4abeff10199f8041ae6b44680e Mon Sep 17 00:00:00 2001 From: vipul Date: Wed, 2 Aug 2023 10:14:25 +0530 Subject: [PATCH 1/6] can add multiple speaker info while update video --- backend/video/views.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/backend/video/views.py b/backend/video/views.py index 53838384..1deb4de5 100644 --- a/backend/video/views.py +++ b/backend/video/views.py @@ -506,6 +506,14 @@ def download_all(request): type=openapi.TYPE_STRING, description="Gender of video's voice", ), + "multiple_speaker": openapi.Schema( + type=openapi.TYPE_BOOLEAN, + description="Multiple speaker true or false", + ), + "speaker_info": openapi.Schema( + type=openapi.TYPE_OBJECT, + description="Speaker info of video", + ), }, required=["video_id"], ), @@ -521,6 +529,8 @@ def update_video(request): video_id = request.data.get("video_id") description = request.data.get("description") gender = request.data.get("gender") + multiple_speaker = request.data.get("multiple_speaker", "false") + speaker_info = request.data.get("speaker_info") try: video = Video.objects.get(id=video_id) @@ -533,6 +543,12 @@ def update_video(request): if gender.upper() in gender_list: video.gender = gender.upper() + if multiple_speaker is not None: + video.multiple_speaker = multiple_speaker + + if speaker_info is not None: + video.speaker_info = speaker_info + video.save() return Response( From 2365450679326cd6d23993b1960f930080e12f8d Mon Sep 17 00:00:00 2001 From: vipul Date: Wed, 2 Aug 2023 10:34:33 +0530 Subject: [PATCH 2/6] converted boolean to lower case --- backend/video/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/video/views.py b/backend/video/views.py index 1deb4de5..eae54241 100644 --- a/backend/video/views.py +++ b/backend/video/views.py @@ -257,7 +257,6 @@ def list_recent(request): # In the future, if that constraint is removed then we might need to alter the logic. try: - # Get the relevant videos, based on the audio only param video_list = Video.objects.filter(audio_only=is_audio_only) @@ -544,6 +543,8 @@ def update_video(request): video.gender = gender.upper() if multiple_speaker is not None: + multiple_speaker = multiple_speaker.lower() + video.multiple_speaker = multiple_speaker if speaker_info is not None: From e107931d59bea956ff4e800d572d1c00affeea98 Mon Sep 17 00:00:00 2001 From: vipul Date: Wed, 2 Aug 2023 11:46:03 +0530 Subject: [PATCH 3/6] validation for speaker info object --- backend/video/models.py | 1 + backend/video/views.py | 58 +++++++++++++++++++++++++++++++++-------- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/backend/video/models.py b/backend/video/models.py index 5c4f735e..78ed887d 100644 --- a/backend/video/models.py +++ b/backend/video/models.py @@ -8,6 +8,7 @@ FEMALE = "FEMALE" GENDER = ((MALE, "Male"), (FEMALE, "Female")) +MULTISPEAKER_AGE_GROUP = ("1-10", "11-20", "21-60", "61-100") VIDEO_STATUS = ( ("NEW", "NEW"), diff --git a/backend/video/views.py b/backend/video/views.py index eae54241..25f92128 100644 --- a/backend/video/views.py +++ b/backend/video/views.py @@ -13,7 +13,7 @@ from transcript.models import ORIGINAL_SOURCE, Transcript from translation.models import Translation from project.decorators import is_project_owner -from .models import Video, GENDER +from .models import Video, GENDER, MULTISPEAKER_AGE_GROUP from .serializers import VideoSerializer from .utils import * from django.utils import timezone @@ -533,6 +533,7 @@ def update_video(request): try: video = Video.objects.get(id=video_id) + errors = [] if description is not None: video.description = description @@ -543,21 +544,56 @@ def update_video(request): video.gender = gender.upper() if multiple_speaker is not None: - multiple_speaker = multiple_speaker.lower() - video.multiple_speaker = multiple_speaker if speaker_info is not None: - video.speaker_info = speaker_info + speaker_info_for_update = [] + gender_list = [gender[0] for gender in GENDER] + for i in speaker_info: + speaker_info_obj = {} - video.save() + if i["name"] is not None: + speaker_info_obj["name"] = i["name"] - return Response( - { - "message": "Video updated successfully.", - }, - status=status.HTTP_200_OK, - ) + if i["gender"].upper() in gender_list: + speaker_info_obj["gender"] = i["gender"].upper() + else: + errors.append( + { + "message": f"Invalid Gender in : {i}", + } + ) + + if i["age"] in MULTISPEAKER_AGE_GROUP: + speaker_info_obj["age"] = i["age"] + else: + errors.append( + { + "message": f"Invalid Age in : {i}", + } + ) + + if i["id"] is not None: + speaker_info_obj["id"] = i["id"] + + speaker_info_for_update.append(speaker_info_obj) + + video.speaker_info = speaker_info_for_update + + if len(errors) > 0: + return Response( + {"message": "Invalid Data", "response": errors}, + status=status.HTTP_400_BAD_REQUEST, + ) + else: + video.save() + + return Response( + { + "message": "Video updated successfully.", + }, + status=status.HTTP_200_OK, + ) except Video.DoesNotExist: return Response( {"message": "Video not found"}, status=status.HTTP_404_NOT_FOUND From 7c20aa43f0926670c1c5ae407441dddb588414a3 Mon Sep 17 00:00:00 2001 From: vipul Date: Mon, 7 Aug 2023 12:27:42 +0530 Subject: [PATCH 4/6] speaker_id updated for transcript --- backend/video/views.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/video/views.py b/backend/video/views.py index 25f92128..2bcfbf2d 100644 --- a/backend/video/views.py +++ b/backend/video/views.py @@ -588,6 +588,28 @@ def update_video(request): else: video.save() + # Get the tasks for the video + transcripts = Transcript.objects.filter(video_id=video_id) + for transcript_task in transcripts: + payload_with_speaker = transcript_task.payload["payload"] + + # Updating each dictionary in the list with the new key-value pairs + if len(speaker_info_for_update) == 1: + payload_with_speaker = [ + dict(d, **{"speaker_id": speaker_info_for_update[0]["id"]}) + for d in payload_with_speaker + ] + else: + payload_with_speaker = [ + dict(d, **{"speaker_id": ""}) for d in payload_with_speaker + ] + + transcript_task_to_be_update = Transcript.objects.get( + id=transcript_task.id + ) + transcript_task_to_be_update.payload["payload"] = payload_with_speaker + transcript_task_to_be_update.save() + return Response( { "message": "Video updated successfully.", From a0b8e41bce7dc92ee3f0f7851c95a1bfeb5f7c15 Mon Sep 17 00:00:00 2001 From: vipul Date: Mon, 7 Aug 2023 17:26:27 +0530 Subject: [PATCH 5/6] added condition for video update api --- backend/video/utils.py | 13 ++++++++++++ backend/video/views.py | 45 +++++++++++++++++++++--------------------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/backend/video/utils.py b/backend/video/utils.py index 73ca81b2..beac1031 100644 --- a/backend/video/utils.py +++ b/backend/video/utils.py @@ -708,3 +708,16 @@ def create_video( new_request.GET["task_type"] = task_type new_request.GET["target_language"] = target_language return get_video_func(new_request) + + +def find_duplicates(data, key): + temp = [] + duplicates = [] + + for dictionary in data: + if dictionary[key] not in temp: + temp.append(dictionary[key]) + else: + duplicates.append(dictionary[key]) + + return duplicates diff --git a/backend/video/views.py b/backend/video/views.py index 2bcfbf2d..269a2bf3 100644 --- a/backend/video/views.py +++ b/backend/video/views.py @@ -547,8 +547,31 @@ def update_video(request): video.multiple_speaker = multiple_speaker if speaker_info is not None: + # Get the task transcript status for the video, if none or selected source + task = ( + Task.objects.filter(video_id=video_id) + .filter(task_type="TRANSCRIPTION_EDIT") + .filter(status__in=["SELECTED_SOURCE"]) + ) + if not task: + errors.append( + { + "message": f"Video's transcript status must be selected source or none", + } + ) + speaker_info_for_update = [] gender_list = [gender[0] for gender in GENDER] + + # Find dictionary matching value in list + dubplicte_ids = find_duplicates(speaker_info, "id") + if dubplicte_ids: + errors.append( + { + "message": f"Ids must be unique Age in : {i}", + } + ) + for i in speaker_info: speaker_info_obj = {} @@ -588,28 +611,6 @@ def update_video(request): else: video.save() - # Get the tasks for the video - transcripts = Transcript.objects.filter(video_id=video_id) - for transcript_task in transcripts: - payload_with_speaker = transcript_task.payload["payload"] - - # Updating each dictionary in the list with the new key-value pairs - if len(speaker_info_for_update) == 1: - payload_with_speaker = [ - dict(d, **{"speaker_id": speaker_info_for_update[0]["id"]}) - for d in payload_with_speaker - ] - else: - payload_with_speaker = [ - dict(d, **{"speaker_id": ""}) for d in payload_with_speaker - ] - - transcript_task_to_be_update = Transcript.objects.get( - id=transcript_task.id - ) - transcript_task_to_be_update.payload["payload"] = payload_with_speaker - transcript_task_to_be_update.save() - return Response( { "message": "Video updated successfully.", From 6c8b1958e8c5a436a2f19318e219965b95a88999 Mon Sep 17 00:00:00 2001 From: Shruti1229 Date: Wed, 22 Nov 2023 05:01:18 +0530 Subject: [PATCH 6/6] Bug fix in multiple speaker --- backend/video/views.py | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/video/views.py b/backend/video/views.py index 269a2bf3..adc06054 100644 --- a/backend/video/views.py +++ b/backend/video/views.py @@ -531,6 +531,7 @@ def update_video(request): multiple_speaker = request.data.get("multiple_speaker", "false") speaker_info = request.data.get("speaker_info") + multiple_speaker = multiple_speaker.lower() == "true" try: video = Video.objects.get(id=video_id) errors = []