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)
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)
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())
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
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))
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())
def _get_model_domain_object_instance(cls, item): return topic_fetchers.get_topic_from_model(item)