def get(self, skill_id): """Populates the data on the individual skill page.""" skill_domain.Skill.require_valid_skill_id(skill_id) skill = skill_services.get_skill_by_id(skill_id, strict=False) if skill is None: raise self.PageNotFoundException( Exception('The skill with the given id doesn\'t exist.')) topics = topic_fetchers.get_all_topics() grouped_skill_summary_dicts = {} for topic in topics: skill_summaries = skill_services.get_multi_skill_summaries( topic.get_all_skill_ids()) skill_summary_dicts = [ summary.to_dict() for summary in skill_summaries ] grouped_skill_summary_dicts[topic.name] = skill_summary_dicts self.values.update({ 'skill': skill.to_dict(), 'grouped_skill_summaries': grouped_skill_summary_dicts }) self.render_json(self.values)
def get(self, story_id): """Populates the data on the individual story page.""" story = story_fetchers.get_story_by_id(story_id, strict=False) topic_id = story.corresponding_topic_id topic = topic_fetchers.get_topic_by_id(topic_id, strict=False) skill_ids = topic.get_all_skill_ids() skill_summaries = skill_services.get_multi_skill_summaries(skill_ids) skill_summary_dicts = [summary.to_dict() for summary in skill_summaries] classroom_url_fragment = ( classroom_services.get_classroom_url_fragment_for_topic_id( topic.id)) for story_reference in topic.canonical_story_references: if story_reference.story_id == story_id: story_is_published = story_reference.story_is_published self.values.update({ 'story': story.to_dict(), 'topic_name': topic.name, 'story_is_published': story_is_published, 'skill_summaries': skill_summary_dicts, 'topic_url_fragment': topic.url_fragment, 'classroom_url_fragment': classroom_url_fragment }) self.render_json(self.values)
def get(self, topic_id): """Populates the data on the individual topic page.""" topic = topic_fetchers.get_topic_by_id(topic_id, strict=False) if topic is None: raise self.PageNotFoundException( Exception('The topic with the given id doesn\'t exist.')) skill_id_to_description_dict, deleted_skill_ids = ( skill_services.get_descriptions_of_skills( topic.get_all_skill_ids())) topics = topic_fetchers.get_all_topics() grouped_skill_summary_dicts = {} skill_id_to_rubrics_dict = {} for topic_object in topics: skill_id_to_rubrics_dict_local, deleted_skill_ids = ( skill_services.get_rubrics_of_skills( topic_object.get_all_skill_ids())) skill_id_to_rubrics_dict.update(skill_id_to_rubrics_dict_local) if deleted_skill_ids: deleted_skills_string = ', '.join(deleted_skill_ids) logging.error( 'The deleted skills: %s are still present in topic with ' 'id %s' % (deleted_skills_string, topic_id)) if feconf.CAN_SEND_EMAILS: email_manager.send_mail_to_admin( 'Deleted skills present in topic', 'The deleted skills: %s are still present in ' 'topic with id %s' % (deleted_skills_string, topic_id)) skill_summaries = skill_services.get_multi_skill_summaries( topic_object.get_all_skill_ids()) skill_summary_dicts = [ summary.to_dict() for summary in skill_summaries ] grouped_skill_summary_dicts[ topic_object.name] = skill_summary_dicts classroom_url_fragment = ( classroom_services.get_classroom_url_fragment_for_topic_id( topic_id)) skill_question_count_dict = {} for skill_id in topic.get_all_skill_ids(): skill_question_count_dict[skill_id] = ( question_services.get_total_question_count_for_skill_ids( [skill_id])) self.values.update({ 'classroom_url_fragment': classroom_url_fragment, 'topic_dict': topic.to_dict(), 'grouped_skill_summary_dicts': grouped_skill_summary_dicts, 'skill_question_count_dict': skill_question_count_dict, 'skill_id_to_description_dict': skill_id_to_description_dict, 'skill_id_to_rubrics_dict': skill_id_to_rubrics_dict }) self.render_json(self.values)
def get(self, skill_id): """Populates the data on the individual skill page.""" try: skill_domain.Skill.require_valid_skill_id(skill_id) except utils.ValidationError: raise self.PageNotFoundException('Invalid skill id.') skill = skill_fetchers.get_skill_by_id(skill_id, strict=False) if skill is None: raise self.PageNotFoundException( Exception('The skill with the given id doesn\'t exist.')) topics = topic_fetchers.get_all_topics() grouped_skill_summary_dicts = {} # It might be the case that the requested skill is not assigned to any # topic, or it might be assigned to a topic and not a subtopic, or # it can be assigned to multiple topics, so this dict represents # a key value pair where key is topic's name and value is subtopic # name which might be None indicating that the skill is assigned # to that topic but not to a subtopic. assigned_skill_topic_data_dict = {} for topic in topics: skill_ids_in_topic = topic.get_all_skill_ids() if skill_id in skill_ids_in_topic: subtopic_name = None for subtopic in topic.subtopics: if skill_id in subtopic.skill_ids: subtopic_name = subtopic.title break assigned_skill_topic_data_dict[topic.name] = subtopic_name skill_summaries = skill_services.get_multi_skill_summaries( skill_ids_in_topic) skill_summary_dicts = [ summary.to_dict() for summary in skill_summaries ] grouped_skill_summary_dicts[topic.name] = skill_summary_dicts self.values.update({ 'skill': skill.to_dict(), 'assigned_skill_topic_data_dict': assigned_skill_topic_data_dict, 'grouped_skill_summaries': grouped_skill_summary_dicts }) self.render_json(self.values)
def get(self): """Handles GET requests.""" topic_summaries = topic_services.get_all_topic_summaries() topic_summary_dicts = [ summary.to_dict() for summary in topic_summaries ] skill_summaries = skill_services.get_all_skill_summaries() skill_summary_dicts = [ summary.to_dict() for summary in skill_summaries ] skill_ids_assigned_to_some_topic = ( topic_services.get_all_skill_ids_assigned_to_some_topic()) merged_skill_ids = (skill_services.get_merged_skill_ids()) topic_rights_dict = topic_services.get_all_topic_rights() for topic_summary in topic_summary_dicts: if topic_rights_dict[topic_summary['id']]: topic_rights = topic_rights_dict[topic_summary['id']] if topic_rights: topic_summary['is_published'] = ( topic_rights.topic_is_published) topic_summary['can_edit_topic'] = ( topic_services.check_can_edit_topic( self.user, topic_rights)) skill_ids_for_private_skills_by_user = [ skill_rights.id for skill_rights in ( skill_services.get_unpublished_skill_rights_by_creator( self.user_id)) ] skill_ids_for_unpublished_skills = [ skill_rights.id for skill_rights in ( skill_services.get_all_unpublished_skill_rights()) ] untriaged_skill_summary_dicts = [] mergeable_skill_summary_dicts = [] for skill_summary_dict in skill_summary_dicts: skill_id = skill_summary_dict['id'] if (skill_id not in skill_ids_assigned_to_some_topic) and ( skill_id not in skill_ids_for_unpublished_skills) and ( skill_id not in merged_skill_ids): untriaged_skill_summary_dicts.append(skill_summary_dict) if (skill_id in skill_ids_assigned_to_some_topic) and ( skill_id not in skill_ids_for_unpublished_skills) and ( skill_id not in merged_skill_ids): mergeable_skill_summary_dicts.append(skill_summary_dict) unpublished_skill_summary_dicts = [ summary.to_dict() for summary in (skill_services.get_multi_skill_summaries( skill_ids_for_private_skills_by_user)) ] can_delete_topic = (role_services.ACTION_DELETE_TOPIC in self.user.actions) can_create_topic = (role_services.ACTION_CREATE_NEW_TOPIC in self.user.actions) can_delete_skill = (role_services.ACTION_DELETE_ANY_SKILL in self.user.actions) can_create_skill = (role_services.ACTION_CREATE_NEW_SKILL in self.user.actions) self.values.update({ 'untriaged_skill_summary_dicts': untriaged_skill_summary_dicts, 'mergeable_skill_summary_dicts': mergeable_skill_summary_dicts, 'unpublished_skill_summary_dicts': unpublished_skill_summary_dicts, 'topic_summary_dicts': topic_summary_dicts, 'can_delete_topic': can_delete_topic, 'can_create_topic': can_create_topic, 'can_delete_skill': can_delete_skill, 'can_create_skill': can_create_skill }) self.render_json(self.values)