Пример #1
0
def get_exploration_opportunity_summary_from_model(model):
    """Returns the ExplorationOpportunitySummary object out of the model.

    Args:
        model: ExplorationOpportunitySummaryModel. The exploration opportunity
            summary model.

    Returns:
        ExplorationOpportunitySummary. The corresponding
        ExplorationOpportunitySummary object.
    """
    # We're making sure that the audio language codes in any exploration
    # opportunity domain object match the ones in
    # constants.SUPPORTED_AUDIO_LANGUAGES.
    set_of_all_languages = set(model.incomplete_translation_language_codes +
                               model.need_voice_artist_in_language_codes +
                               model.assigned_voice_artist_in_language_codes)
    supported_language_codes = set(
        [language['id'] for language in (constants.SUPPORTED_AUDIO_LANGUAGES)])
    missing_language_codes = list(supported_language_codes -
                                  set_of_all_languages)
    if missing_language_codes:
        logging.info(
            'Missing language codes %s in exploration opportunity model with '
            'id %s' % (missing_language_codes, model.id))

    new_incomplete_translation_language_codes = (
        model.incomplete_translation_language_codes + missing_language_codes)

    return opportunity_domain.ExplorationOpportunitySummary(
        model.id, model.topic_id, model.topic_name, model.story_id,
        model.story_title, model.chapter_title, model.content_count,
        new_incomplete_translation_language_codes, model.translation_counts,
        model.need_voice_artist_in_language_codes,
        model.assigned_voice_artist_in_language_codes)
Пример #2
0
def add_new_exploration_opportunities(story_id, exp_ids):
    """Adds new exploration opportunity into the model.

    Args:
        story_id: str. ID of the story.
        exp_ids: list(str). A list of exploration ids for which new
            opportunities are to be created. All exp_ids must be part of the
            given story.
    """
    story = story_fetchers.get_story_by_id(story_id)
    topic = topic_fetchers.get_topic_by_id(story.corresponding_topic_id)
    explorations = exp_fetchers.get_multiple_explorations_by_id(exp_ids)

    exploration_opportunity_summary_list = []
    for exp_id, exploration in explorations.items():
        node = story.story_contents.get_node_with_corresponding_exp_id(exp_id)

        audio_language_codes = set([
            language['id'] for language in constants.SUPPORTED_AUDIO_LANGUAGES
        ])

        complete_translation_languages = set(
            exploration.get_languages_with_complete_translation())

        incomplete_translation_language_codes = (
            audio_language_codes - complete_translation_languages)
        need_voice_artist_in_language_codes = complete_translation_languages

        if exploration.language_code in incomplete_translation_language_codes:
            # Removing exploration language from incomplete translation
            # languages list as exploration does not need any translation in
            # its own language.
            incomplete_translation_language_codes.discard(
                exploration.language_code)
            # Adding exploration language to voiceover required languages
            # list as exploration can be voiceovered in it's own language.
            need_voice_artist_in_language_codes.add(exploration.language_code)

        content_count = exploration.get_content_count()
        translation_counts = exploration.get_translation_counts()

        # TODO(#7376): Once the voiceover application functionality is
        # implemented change this method such that it also populates the
        # assigned_voice_artist_in_language_codes with the required data.

        exploration_opportunity_summary = (
            opportunity_domain.ExplorationOpportunitySummary(
                exp_id, topic.id, topic.name, story.id, story.title,
                node.title, content_count,
                list(incomplete_translation_language_codes),
                translation_counts, list(need_voice_artist_in_language_codes),
                []))

        exploration_opportunity_summary_list.append(
            exploration_opportunity_summary)

    _save_multi_exploration_opportunity_summary(
        exploration_opportunity_summary_list)
Пример #3
0
def _create_exploration_opportunity_summary(topic, story, exploration):
    """Create an ExplorationOpportunitySummary object with the given topic,
    story and exploration object.

    Args:
        topic: Topic. The topic object to which the opportunity belongs.
        story: Story. The story object to which the opportunity belongs.
        exploration: Exploration. The exploration object to which the
            opportunity belongs.

    Returns:
        ExplorationOpportunitySummary. The exploration opportunity summary
        object.
    """

    audio_language_codes = set(
        [language['id'] for language in constants.SUPPORTED_AUDIO_LANGUAGES])

    complete_translation_languages = set(
        exploration.get_languages_with_complete_translation())

    incomplete_translation_language_codes = (audio_language_codes -
                                             complete_translation_languages)
    language_codes_needing_voice_artists = complete_translation_languages

    if exploration.language_code in incomplete_translation_language_codes:
        # Removing exploration language from incomplete translation
        # languages list as exploration does not need any translation in
        # its own language.
        incomplete_translation_language_codes.discard(
            exploration.language_code)
        # Adding exploration language to voiceover required languages
        # list as exploration can be voiceovered in it's own language.
        language_codes_needing_voice_artists.add(exploration.language_code)

    content_count = exploration.get_content_count()
    translation_counts = exploration.get_translation_counts()

    story_node = story.story_contents.get_node_with_corresponding_exp_id(
        exploration.id)

    # TODO(#7376): Once the voiceover application functionality is
    # implemented change this method such that it also populates the
    # language_codes_with_assigned_voice_artists with the required data.

    exploration_opportunity_summary = (
        opportunity_domain.ExplorationOpportunitySummary(
            exploration.id, topic.id, topic.name, story.id, story.title,
            story_node.title, content_count,
            list(incomplete_translation_language_codes), translation_counts,
            list(language_codes_needing_voice_artists), []))

    return exploration_opportunity_summary
Пример #4
0
def _create_exploration_opportunity_summary(topic, story, exploration):
    """Create an ExplorationOpportunitySummary object with the given topic,
    story and exploration object.

    Args:
        topic: Topic. The topic object to which the opportunity belongs.
        story: Story. The story object to which the opportunity belongs.
        exploration: Exploration. The exploration object to which the
            opportunity belongs.

    Returns:
        ExplorationOpportunitySummary. The exploration opportunity summary
        object.
    """
    # TODO(#13903): Find a way to reduce runtime of computing the complete
    # languages.
    complete_translation_language_list = (
        exploration.get_languages_with_complete_translation())
    # TODO(#13912): Revisit voiceover language logic.
    language_codes_needing_voice_artists = set(
        complete_translation_language_list)
    incomplete_translation_language_codes = (
        _compute_exploration_incomplete_translation_languages(
            complete_translation_language_list))
    if exploration.language_code in incomplete_translation_language_codes:
        # Remove exploration language from incomplete translation languages list
        # as an exploration does not need a translation in its own language.
        incomplete_translation_language_codes.remove(exploration.language_code)
        # Add exploration language to voiceover required languages list as an
        # exploration can be voiceovered in its own language.
        language_codes_needing_voice_artists.add(exploration.language_code)

    content_count = exploration.get_content_count()
    translation_counts = exploration.get_translation_counts()

    story_node = story.story_contents.get_node_with_corresponding_exp_id(
        exploration.id)

    # TODO(#7376): Once the voiceover application functionality is
    # implemented change this method such that it also populates the
    # language_codes_with_assigned_voice_artists with the required data.

    exploration_opportunity_summary = (
        opportunity_domain.ExplorationOpportunitySummary(
            exploration.id, topic.id, topic.name, story.id, story.title,
            story_node.title, content_count,
            incomplete_translation_language_codes,
            translation_counts, list(language_codes_needing_voice_artists), [],
            {}))

    return exploration_opportunity_summary
Пример #5
0
def get_exploration_opportunity_summary_from_model(model):
    """Returns the ExplorationOpportunitySummary object out of the model.

    Args:
        model: ExplorationOpportunitySummaryModel. The exploration opportunity
            summary model.

    Returns:
        ExplorationOpportunitySummary. The corresponding
        ExplorationOpportunitySummary object.
    """

    return opportunity_domain.ExplorationOpportunitySummary(
        model.id, model.topic_id, model.topic_name, model.story_id,
        model.story_title, model.chapter_title, model.content_count,
        model.incomplete_translation_language_codes, model.translation_counts,
        model.need_voice_artist_in_language_codes,
        model.assigned_voice_artist_in_language_codes)