Exemple #1
0
    def test_cannot_get_topic_from_model_with_invalid_schema_version(self):
        topic_services.create_new_topic_rights('topic_id', self.user_id_a)
        commit_cmd = topic_domain.TopicChange({
            'cmd': topic_domain.CMD_CREATE_NEW,
            'name': 'name'
        })
        subtopic_dict = {
            'id': 1,
            'title': 'subtopic_title',
            'skill_ids': []
        }
        model = topic_models.TopicModel(
            id='topic_id',
            name='name',
            abbreviated_name='abbrev',
            url_fragment='name-two',
            canonical_name='canonical_name',
            description='description',
            next_subtopic_id=1,
            language_code='en',
            subtopics=[subtopic_dict],
            subtopic_schema_version=0,
            story_reference_schema_version=0
        )
        commit_cmd_dicts = [commit_cmd.to_dict()]
        model.commit(
            self.user_id_a, 'topic model created', commit_cmd_dicts)

        with self.assertRaisesRegexp(
            Exception,
            'Sorry, we can only process v1-v%d subtopic schemas at '
            'present.' % feconf.CURRENT_SUBTOPIC_SCHEMA_VERSION):
            topic_fetchers.get_topic_from_model(model)

        topic_services.create_new_topic_rights('topic_id_2', self.user_id_a)
        model = topic_models.TopicModel(
            id='topic_id_2',
            name='name 2',
            description='description 2',
            abbreviated_name='abbrev',
            url_fragment='name-three',
            canonical_name='canonical_name_2',
            next_subtopic_id=1,
            language_code='en',
            subtopics=[subtopic_dict],
            subtopic_schema_version=1,
            story_reference_schema_version=0
        )
        commit_cmd_dicts = [commit_cmd.to_dict()]
        model.commit(
            self.user_id_a, 'topic model created', commit_cmd_dicts)

        with self.assertRaisesRegexp(
            Exception,
            'Sorry, we can only process v1-v%d story reference schemas at '
            'present.' % feconf.CURRENT_STORY_REFERENCE_SCHEMA_VERSION):
            topic_fetchers.get_topic_from_model(model)
Exemple #2
0
 def test_topic_model_migration_to_higher_version(self) -> None:
     topic_services.create_new_topic_rights(
         'topic_id', self.user_id_a)  # type: ignore[no-untyped-call]
     commit_cmd = topic_domain.TopicChange({
         'cmd': topic_domain.CMD_CREATE_NEW,
         'name': 'name'
     })
     subtopic_v1_dict = {
         'id': 1,
         'title': 'subtopic_title',
         'skill_ids': []
     }
     model = topic_models.TopicModel(id='topic_id',
                                     name='name 2',
                                     description='description 2',
                                     abbreviated_name='abbrev',
                                     url_fragment='name-three',
                                     canonical_name='canonical_name_2',
                                     next_subtopic_id=1,
                                     language_code='en',
                                     subtopics=[subtopic_v1_dict],
                                     subtopic_schema_version=1,
                                     story_reference_schema_version=1,
                                     page_title_fragment_for_web='fragment')
     commit_cmd_dicts = [commit_cmd.to_dict()]
     model.commit(self.user_id_a, 'topic model created', commit_cmd_dicts)
     swap_topic_object = self.swap(topic_domain, 'Topic', MockTopicObject)
     current_story_refrence_schema_version_swap = self.swap(
         feconf, 'CURRENT_STORY_REFERENCE_SCHEMA_VERSION', 2)
     with swap_topic_object, current_story_refrence_schema_version_swap:
         topic: topic_domain.Topic = (
             topic_fetchers.get_topic_from_model(model))
         self.assertEqual(topic.story_reference_schema_version, 2)
    def map(item):
        if item.deleted:
            return

        topic = topic_fetchers.get_topic_from_model(item)
        for subtopic in topic.subtopics:
            thumbnail_filename_and_size_value = '%s %s' % (
                subtopic.thumbnail_filename, subtopic.thumbnail_size_in_bytes)
            yield (item.id, thumbnail_filename_and_size_value)
Exemple #4
0
 def test_get_topic_from_model(self) -> None:
     topic_model: Optional[topic_models.TopicModel] = (
         topic_models.TopicModel.get(self.TOPIC_ID))
     # Ruling out the possibility of None for mypy type checking.
     assert topic_model is not None
     topic: topic_domain.Topic = (
         topic_fetchers.get_topic_from_model(topic_model))
     # Ruling out the possibility of None for mypy type checking.
     assert self.topic is not None
     self.assertEqual(topic.to_dict(), self.topic.to_dict())
Exemple #5
0
def get_all_skill_ids_assigned_to_some_topic():
    """Returns the ids of all the skills that are linked to some topics.

    Returns:
        set([str]). The ids of all the skills linked to some topic.
    """
    skill_ids = set([])
    all_topic_models = topic_models.TopicModel.get_all()
    all_topics = [
        topic_fetchers.get_topic_from_model(topic)
        for topic in all_topic_models]
    for topic in all_topics:
        skill_ids.update(topic.get_all_skill_ids())
    return skill_ids
Exemple #6
0
    def map(item):
        if not item.deleted:
            topic = topic_fetchers.get_topic_from_model(item)
            story_references = topic.get_all_story_references()
            interaction_ids = set()

            for story_reference in story_references:
                story = story_fetchers.get_story_by_id(
                    story_reference.story_id)
                exp_ids = story.story_contents.get_all_linked_exp_ids()
                explorations = exp_fetchers.get_multiple_explorations_by_id(
                    exp_ids)
                for exploration in explorations.values():
                    for state in exploration.states.values():
                        interaction_ids.add(state.interaction.id)
            yield ('%s (%s)' % (topic.name, topic.id), list(interaction_ids))
Exemple #7
0
def _get_augmented_skill_summaries_in_batches(
        num_skills_to_fetch, urlsafe_start_cursor, sort_by):
    """Returns all the Augmented skill summaries after attaching
    topic and classroom.

    Returns:
        3-tuple(augmented_skill_summaries, urlsafe_start_cursor, more). Where:
            augmented_skill_summaries: list(AugmentedSkillSummary). The list of
                skill summaries.
            urlsafe_start_cursor: str or None. A query cursor pointing to the
                next batch of results. If there are no more results, this might
                be None.
            more: bool. If True, there are (probably) more results after this
                batch. If False, there are no further results after this batch.
    """
    skill_summaries, new_urlsafe_start_cursor, more = (
        _get_skill_summaries_in_batches(
            num_skills_to_fetch, urlsafe_start_cursor, sort_by))

    assigned_skill_ids = collections.defaultdict(lambda: {
        'topic_names': [],
        'classroom_names': []
    })

    all_topic_models = topic_models.TopicModel.get_all()
    all_topics = [topic_fetchers.get_topic_from_model(topic_model)
                  if topic_model is not None else None
                  for topic_model in all_topic_models]

    topic_classroom_dict = {}
    all_classrooms_dict = config_domain.CLASSROOM_PAGES_DATA.value

    for classroom in all_classrooms_dict:
        for topic_id in classroom['topic_ids']:
            topic_classroom_dict[topic_id] = classroom['name']

    for topic in all_topics:
        for skill_id in topic.get_all_skill_ids():
            assigned_skill_ids[skill_id]['topic_names'].append(topic.name)
            assigned_skill_ids[skill_id]['classroom_names'].append(
                topic_classroom_dict.get(topic.id, None))

    augmented_skill_summaries = []
    for skill_summary in skill_summaries:
        topic_names = []
        classroom_names = []
        if skill_summary.id in assigned_skill_ids:
            topic_names = assigned_skill_ids[skill_summary.id]['topic_names']
            classroom_names = (
                assigned_skill_ids[skill_summary.id]['classroom_names'])

        augmented_skill_summary = skill_domain.AugmentedSkillSummary(
            skill_summary.id,
            skill_summary.description,
            skill_summary.language_code,
            skill_summary.version,
            skill_summary.misconception_count,
            skill_summary.worked_examples_count,
            topic_names,
            classroom_names,
            skill_summary.skill_model_created_on,
            skill_summary.skill_model_last_updated)
        augmented_skill_summaries.append(augmented_skill_summary)

    return augmented_skill_summaries, new_urlsafe_start_cursor, more
 def test_get_topic_from_model(self):
     topic_model = topic_models.TopicModel.get(self.TOPIC_ID)
     topic = topic_fetchers.get_topic_from_model(topic_model)
     self.assertEqual(topic.to_dict(), self.topic.to_dict())
Exemple #9
0
 def _get_model_domain_object_instance(cls, item):
     return topic_fetchers.get_topic_from_model(item)