Example #1
0
    def test_get_multi_summaries(self):
        topic_summaries = topic_fetchers.get_multi_topic_summaries(
            [self.TOPIC_ID, 'invalid_id'])

        self.assertEqual(len(topic_summaries), 2)
        self.assertEqual(topic_summaries[0].name, 'Name')
        self.assertEqual(topic_summaries[0].description, 'Description')
        self.assertEqual(topic_summaries[0].canonical_story_count, 0)
        self.assertEqual(topic_summaries[0].additional_story_count, 0)
        self.assertEqual(topic_summaries[0].total_skill_count, 2)
        self.assertEqual(topic_summaries[0].uncategorized_skill_count, 2)
        self.assertEqual(topic_summaries[0].subtopic_count, 1)
        self.assertIsNone(topic_summaries[1])
Example #2
0
    def _get_complete_translation_contribution_stats(
            self, translation_contribution_stats):
        """Returns translation contribution stats dicts with all the necessary
        information for the frontend.

        Args:
            translation_contribution_stats: list(TranslationContributionStats).
                TranslationContributionStats domain objects.

        Returns:
            list(dict(TranslationContributionStats)). Dict representations of
            TranslationContributionStats domain objects with additional keys:
                language: str. Language description.
                topic_name: str. Topic name.
                contribution_months: str. Unique translation contribution
                    months of format: "%b %Y", e.g. "Jan 2021".
            Unnecessary keys language_code, topic_id, contribution_dates,
            contributor_user_id are consequently deleted.
        """
        translation_contribution_stats_dicts = [
            stats.to_dict() for stats in translation_contribution_stats
        ]
        topic_ids = [
            stats_dict['topic_id']
            for stats_dict in translation_contribution_stats_dicts
        ]
        topic_summaries = topic_fetchers.get_multi_topic_summaries(topic_ids)
        topic_name_by_topic_id = {}
        for topic_summary in topic_summaries:
            if topic_summary is None:
                continue
            topic_name_by_topic_id[topic_summary.id] = topic_summary.name
        for stats_dict in translation_contribution_stats_dicts:
            stats_dict['topic_name'] = topic_name_by_topic_id.get(
                stats_dict['topic_id'], 'UNKNOWN')
            stats_dict['contribution_months'] = list({
                contribution_date.strftime('%b %Y')
                for contribution_date in stats_dict['contribution_dates']
            })
            stats_dict['language'] = (
                utils.get_supported_audio_language_description(
                    stats_dict['language_code'])
            )
            del stats_dict['topic_id']
            del stats_dict['language_code']
            del stats_dict['contribution_dates']
            del stats_dict['contributor_user_id']
        return translation_contribution_stats_dicts
Example #3
0
    def test_get_multi_summaries(self) -> None:
        topic_summaries: List[Optional[topic_domain.TopicSummary]] = (
            topic_fetchers.get_multi_topic_summaries(
                [self.TOPIC_ID, 'invalid_id']))

        # Ruling out the possibility of None for mypy type checking.
        assert topic_summaries[0] is not None
        self.assertEqual(len(topic_summaries), 2)
        self.assertEqual(topic_summaries[0].name, 'Name')
        self.assertEqual(topic_summaries[0].description, 'Description')
        self.assertEqual(topic_summaries[0].canonical_story_count, 0)
        self.assertEqual(topic_summaries[0].additional_story_count, 0)
        self.assertEqual(topic_summaries[0].total_skill_count, 2)
        self.assertEqual(topic_summaries[0].uncategorized_skill_count, 2)
        self.assertEqual(topic_summaries[0].subtopic_count, 1)
        self.assertIsNone(topic_summaries[1])
Example #4
0
    def get(self, classroom_url_fragment):
        """Handles GET requests."""

        classroom = classroom_services.get_classroom_by_url_fragment(
            classroom_url_fragment)

        topic_ids = classroom.topic_ids
        topic_summaries = topic_fetchers.get_multi_topic_summaries(topic_ids)
        topic_rights = topic_fetchers.get_multi_topic_rights(topic_ids)
        topic_summary_dicts = []
        for index, summary in enumerate(topic_summaries):
            if summary is not None:
                topic_summary_dict = summary.to_dict()
                topic_summary_dict['is_published'] = (
                    topic_rights[index].topic_is_published)
                topic_summary_dicts.append(topic_summary_dict)

        self.values.update({
            'topic_summary_dicts': topic_summary_dicts,
            'topic_list_intro': classroom.topic_list_intro,
            'course_details': classroom.course_details,
            'name': classroom.name
        })
        self.render_json(self.values)