Beispiel #1
0
 def test_get_transcript_content_store_exceptions(self, exception_to_raise,
                                                  mock_Transcript):
     """
     Verify that `get_transcript_from_contentstore` function raises `NotFoundError` when specified exceptions raised.
     """
     mock_Transcript.asset.side_effect = exception_to_raise
     transcripts_info = self.video.get_transcripts_info()
     lang = self.video.get_default_transcript_language(transcripts_info)
     with self.assertRaises(NotFoundError):
         transcripts_utils.get_transcript_from_contentstore(
             self.video,
             language=lang,
             output_format=transcripts_utils.Transcript.SRT,
             transcripts_info=transcripts_info)
 def test_get_transcript_content_store_exceptions(self, exception_to_raise, mock_Transcript):
     """
     Verify that `get_transcript_from_contentstore` function raises `NotFoundError` when specified exceptions raised.
     """
     mock_Transcript.asset.side_effect = exception_to_raise
     transcripts_info = self.video.get_transcripts_info()
     lang = self.video.get_default_transcript_language(transcripts_info)
     with self.assertRaises(NotFoundError):
         transcripts_utils.get_transcript_from_contentstore(
             self.video,
             language=lang,
             output_format=transcripts_utils.Transcript.SRT,
             transcripts_info=transcripts_info
         )
Beispiel #3
0
def async_migrate_transcript_subtask(self, *args, **kwargs):
    #pylint: disable=unused-argument
    """
    Migrates a transcript of a given video in a course as a new celery task.
    """
    video, language_code, force_update = args
    commit = kwargs['commit']
    result = None
    if commit is not True:
        return 'Language {0} transcript of video {1} will be migrated'.format(
            language_code,
            video.edx_video_id
        )
    LOGGER.info("[Transcript migration] process for %s transcript started", language_code)
    try:
        transcript_info = video.get_transcripts_info()
        transcript_content, _, _ = get_transcript_from_contentstore(
            video, language_code, Transcript.SJSON, transcript_info)
        edx_video_id = clean_video_id(video.edx_video_id)

        if not edx_video_id:
            video.edx_video_id = create_external_video('external-video')
            video.save_with_metadata(user=User.objects.get(username='******'))
        if edx_video_id:
            result = save_transcript_to_storage(
                edx_video_id,
                language_code,
                transcript_content,
                Transcript.SJSON,
                force_update
            )
    except (NotFoundError, TranscriptsGenerationException, ValCannotCreateError) as exc:
        LOGGER.exception('[Transcript migration] Exception: %r', text_type(exc))
        return 'Failed: language {language} of video {video} with exception {exception}'.format(
            language=language_code,
            video=video.edx_video_id,
            exception=text_type(exc)
        )
    LOGGER.info("[Transcript migration] process for %s transcript ended", language_code)
    if result is not None:
        return 'Success: language {0} of video {1}'.format(language_code, video.edx_video_id)
    else:
        return 'Failed: language {0} of video {1}'.format(language_code, video.edx_video_id)
Beispiel #4
0
def async_migrate_transcript_subtask(self, *args, **kwargs):
    #pylint: disable=unused-argument
    """
    Migrates a transcript of a given video in a course as a new celery task.
    """
    video, language_code, force_update = args
    commit = kwargs['commit']
    result = None
    if commit is not True:
        return 'Language {0} transcript of video {1} will be migrated'.format(
            language_code, video.edx_video_id)
    LOGGER.info("[Transcript migration] process for %s transcript started",
                language_code)
    try:
        transcript_info = video.get_transcripts_info()
        transcript_content, _, _ = get_transcript_from_contentstore(
            video, language_code, Transcript.SJSON, transcript_info)
        edx_video_id = clean_video_id(video.edx_video_id)

        if not edx_video_id:
            video.edx_video_id = create_external_video('external-video')
            video.save_with_metadata(user=User.objects.get(username='******'))
        if edx_video_id:
            result = save_transcript_to_storage(edx_video_id, language_code,
                                                transcript_content,
                                                Transcript.SJSON, force_update)
    except (NotFoundError, TranscriptsGenerationException,
            ValCannotCreateError) as exc:
        LOGGER.exception('[Transcript migration] Exception: %r',
                         text_type(exc))
        return 'Failed: language {language} of video {video} with exception {exception}'.format(
            language=language_code,
            video=video.edx_video_id,
            exception=text_type(exc))
    LOGGER.info("[Transcript migration] process for %s transcript ended",
                language_code)
    if result is not None:
        return 'Success: language {0} of video {1}'.format(
            language_code, video.edx_video_id)
    else:
        return 'Failed: language {0} of video {1}'.format(
            language_code, video.edx_video_id)
Beispiel #5
0
def async_migrate_transcript_subtask(self, *args, **kwargs):  # pylint: disable=unused-argument
    """
    Migrates a transcript of a given video in a course as a new celery task.
    """
    success, failure = 'Success', 'Failure'
    video_location, revision, language_code, force_update = args
    command_run = kwargs['command_run']
    store = modulestore()
    video = store.get_item(
        usage_key=BlockUsageLocator.from_string(video_location),
        revision=revision)
    edx_video_id = clean_video_id(video.edx_video_id)

    if not kwargs['commit']:
        LOGGER.info(
            ('[%s] [run=%s] [video-transcript-will-be-migrated] '
             '[revision=%s] [video=%s] [edx_video_id=%s] [language_code=%s]'),
            MIGRATION_LOGS_PREFIX, command_run, revision, video_location,
            edx_video_id, language_code)
        return success

    LOGGER.info((
        '[%s] [run=%s] [transcripts-migration-process-started-for-video-transcript] [revision=%s] '
        '[video=%s] [edx_video_id=%s] [language_code=%s]'),
                MIGRATION_LOGS_PREFIX, command_run, revision, video_location,
                edx_video_id, language_code)

    try:
        transcripts_info = video.get_transcripts_info()
        transcript_content, _, _ = get_transcript_from_contentstore(
            video=video,
            language=language_code,
            output_format=Transcript.SJSON,
            transcripts_info=transcripts_info,
        )

        is_video_valid = edx_video_id and is_video_available(edx_video_id)
        if not is_video_valid:
            edx_video_id = create_external_video('external-video')
            video.edx_video_id = edx_video_id

            # determine branch published/draft
            branch_setting = (ModuleStoreEnum.Branch.published_only if revision
                              == ModuleStoreEnum.RevisionOption.published_only
                              else ModuleStoreEnum.Branch.draft_preferred)
            with store.branch_setting(branch_setting):
                store.update_item(video, ModuleStoreEnum.UserID.mgmt_command)

            LOGGER.info(
                '[%s] [run=%s] [generated-edx-video-id] [revision=%s] [video=%s] [edx_video_id=%s] [language_code=%s]',
                MIGRATION_LOGS_PREFIX, command_run, revision, video_location,
                edx_video_id, language_code)

        save_transcript_to_storage(
            command_run=command_run,
            edx_video_id=edx_video_id,
            language_code=language_code,
            transcript_content=transcript_content,
            file_format=Transcript.SJSON,
            force_update=force_update,
        )
    except (NotFoundError, TranscriptsGenerationException,
            ValCannotCreateError):
        LOGGER.exception((
            '[%s] [run=%s] [video-transcript-migration-failed-with-known-exc] [revision=%s] [video=%s] '
            '[edx_video_id=%s] [language_code=%s]'), MIGRATION_LOGS_PREFIX,
                         command_run, revision, video_location, edx_video_id,
                         language_code)
        return failure
    except Exception:
        LOGGER.exception((
            '[%s] [run=%s] [video-transcript-migration-failed-with-unknown-exc] [revision=%s] '
            '[video=%s] [edx_video_id=%s] [language_code=%s]'),
                         MIGRATION_LOGS_PREFIX, command_run, revision,
                         video_location, edx_video_id, language_code)
        raise

    LOGGER.info((
        '[%s] [run=%s] [video-transcript-migration-succeeded-for-a-video] [revision=%s] '
        '[video=%s] [edx_video_id=%s] [language_code=%s]'),
                MIGRATION_LOGS_PREFIX, command_run, revision, video_location,
                edx_video_id, language_code)
    return success
Beispiel #6
0
def async_migrate_transcript_subtask(self, *args, **kwargs):  # pylint: disable=unused-argument
    """
    Migrates a transcript of a given video in a course as a new celery task.
    """
    success, failure = 'Success', 'Failure'
    video_location, revision, language_code, force_update = args
    command_run = kwargs['command_run']
    store = modulestore()
    video = store.get_item(usage_key=BlockUsageLocator.from_string(video_location), revision=revision)
    edx_video_id = clean_video_id(video.edx_video_id)

    if not kwargs['commit']:
        LOGGER.info(
            ('[%s] [run=%s] [video-transcript-will-be-migrated] '
             '[revision=%s] [video=%s] [edx_video_id=%s] [language_code=%s]'),
            MIGRATION_LOGS_PREFIX, command_run, revision, video_location, edx_video_id, language_code
        )
        return success

    LOGGER.info(
        ('[%s] [run=%s] [transcripts-migration-process-started-for-video-transcript] [revision=%s] '
         '[video=%s] [edx_video_id=%s] [language_code=%s]'),
        MIGRATION_LOGS_PREFIX, command_run, revision, video_location, edx_video_id, language_code
    )

    try:
        transcripts_info = video.get_transcripts_info()
        transcript_content, _, _ = get_transcript_from_contentstore(
            video=video,
            language=language_code,
            output_format=Transcript.SJSON,
            transcripts_info=transcripts_info,
        )

        is_video_valid = edx_video_id and is_video_available(edx_video_id)
        if not is_video_valid:
            edx_video_id = create_external_video('external-video')
            video.edx_video_id = edx_video_id

            # determine branch published/draft
            branch_setting = (
                ModuleStoreEnum.Branch.published_only
                if revision == ModuleStoreEnum.RevisionOption.published_only else
                ModuleStoreEnum.Branch.draft_preferred
            )
            with store.branch_setting(branch_setting):
                store.update_item(video, ModuleStoreEnum.UserID.mgmt_command)

            LOGGER.info(
                '[%s] [run=%s] [generated-edx-video-id] [revision=%s] [video=%s] [edx_video_id=%s] [language_code=%s]',
                MIGRATION_LOGS_PREFIX, command_run, revision, video_location, edx_video_id, language_code
            )

        save_transcript_to_storage(
            command_run=command_run,
            edx_video_id=edx_video_id,
            language_code=language_code,
            transcript_content=transcript_content,
            file_format=Transcript.SJSON,
            force_update=force_update,
        )
    except (NotFoundError, TranscriptsGenerationException, ValCannotCreateError):
        LOGGER.exception(
            ('[%s] [run=%s] [video-transcript-migration-failed-with-known-exc] [revision=%s] [video=%s] '
             '[edx_video_id=%s] [language_code=%s]'),
            MIGRATION_LOGS_PREFIX, command_run, revision, video_location, edx_video_id, language_code
        )
        return failure
    except Exception:
        LOGGER.exception(
            ('[%s] [run=%s] [video-transcript-migration-failed-with-unknown-exc] [revision=%s] '
             '[video=%s] [edx_video_id=%s] [language_code=%s]'),
            MIGRATION_LOGS_PREFIX, command_run, revision, video_location, edx_video_id, language_code
        )
        raise

    LOGGER.info(
        ('[%s] [run=%s] [video-transcript-migration-succeeded-for-a-video] [revision=%s] '
         '[video=%s] [edx_video_id=%s] [language_code=%s]'),
        MIGRATION_LOGS_PREFIX, command_run, revision, video_location, edx_video_id, language_code
    )
    return success
Beispiel #7
0
def async_migrate_transcript_subtask(self, *args, **kwargs):  # pylint: disable=unused-argument
    """
    Migrates a transcript of a given video in a course as a new celery task.
    """
    video_location, language_code, force_update = args
    store = modulestore()
    video = store.get_item(usage_key=BlockUsageLocator.from_string(video_location))
    commit = kwargs['commit']

    if not commit:
        return 'Language {language_code} transcript of video {edx_video_id} will be migrated'.format(
            language_code=language_code,
            edx_video_id=video.edx_video_id
        )

    # Start transcript's migration
    edx_video_id = clean_video_id(video.edx_video_id)

    LOGGER.info(
        "[Transcript migration] migration process is started for video [%s] language [%s].",
        edx_video_id, language_code
    )

    try:
        transcripts_info = video.get_transcripts_info()
        transcript_content, _, _ = get_transcript_from_contentstore(
            video=video,
            language=language_code,
            output_format=Transcript.SJSON,
            transcripts_info=transcripts_info,
        )

        if not edx_video_id:
            edx_video_id = create_external_video('external-video')
            video.edx_video_id = edx_video_id
            store.update_item(video, ModuleStoreEnum.UserID.mgmt_command)

        save_transcript_to_storage(
            edx_video_id=edx_video_id,
            language_code=language_code,
            transcript_content=transcript_content,
            file_format=Transcript.SJSON,
            force_update=force_update,
        )
    except (NotFoundError, TranscriptsGenerationException, ValCannotCreateError) as exc:
        LOGGER.exception(
            '[Transcript migration] transcript migration failed for video [%s] and language [%s].',
            edx_video_id, language_code
        )
        message = 'Failed: language {language} of video {video} with exception {exception}'.format(
            language=language_code,
            video=video.edx_video_id,
            exception=text_type(exc)
        )
    except Exception:
        LOGGER.exception(
            '[Transcript migration] transcript migration failed for video [%s] and language [%s].',
            edx_video_id, language_code
        )
        raise
    else:
        message = (
            'Success: transcript (language: {language_code}, edx_video_id: {edx_video_id}) has been migrated '
            'for video [{location}].'
        ).format(edx_video_id=edx_video_id, language_code=language_code, location=unicode(video.location))

    return message