Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)