def get(self): """Handles GET requests.""" demo_exploration_ids = list(feconf.DEMO_EXPLORATIONS.keys()) topic_summaries = topic_fetchers.get_all_topic_summaries() topic_summary_dicts = [ summary.to_dict() for summary in topic_summaries] feature_flag_dicts = feature_services.get_all_feature_flag_dicts() config_properties = config_domain.Registry.get_config_property_schemas() # Removes promo-bar related configs as promo-bar is handlded by # release coordinators in /release-coordinator page. del config_properties['promo_bar_enabled'] del config_properties['promo_bar_message'] # Remove blog related configs as they will be handled by 'blog admins' # on blog admin page. del config_properties['max_number_of_tags_assigned_to_blog_post'] del config_properties['list_of_default_tags_for_blog_post'] self.render_json({ 'config_properties': config_properties, 'demo_collections': sorted(feconf.DEMO_COLLECTIONS.items()), 'demo_explorations': sorted(feconf.DEMO_EXPLORATIONS.items()), 'demo_exploration_ids': demo_exploration_ids, 'updatable_roles': role_services.UPDATABLE_ROLES, 'viewable_roles': role_services.VIEWABLE_ROLES, 'human_readable_roles': role_services.HUMAN_READABLE_ROLES, 'role_to_actions': role_services.get_role_actions(), 'topic_summaries': topic_summary_dicts, 'feature_flags': feature_flag_dicts, })
def get(self): """Handles GET requests.""" demo_exploration_ids = list(feconf.DEMO_EXPLORATIONS.keys()) topic_summaries = topic_fetchers.get_all_topic_summaries() topic_summary_dicts = [ summary.to_dict() for summary in topic_summaries] feature_flag_dicts = feature_services.get_all_feature_flag_dicts() config_properties = config_domain.Registry.get_config_property_schemas() # Removes promo-bar related configs as promo-bar is handlded by # release coordinators in /release-coordinator page. del config_properties['promo_bar_enabled'] del config_properties['promo_bar_message'] self.render_json({ 'config_properties': config_properties, 'demo_collections': sorted(feconf.DEMO_COLLECTIONS.items()), 'demo_explorations': sorted(feconf.DEMO_EXPLORATIONS.items()), 'demo_exploration_ids': demo_exploration_ids, 'updatable_roles': { role: role_services.HUMAN_READABLE_ROLES[role] for role in role_services.UPDATABLE_ROLES }, 'viewable_roles': { role: role_services.HUMAN_READABLE_ROLES[role] for role in role_services.VIEWABLE_ROLES }, 'topic_summaries': topic_summary_dicts, 'role_to_actions': role_services.get_role_actions(), 'feature_flags': feature_flag_dicts, })
def test_get_all_summaries(self): topic_summaries = topic_fetchers.get_all_topic_summaries() self.assertEqual(len(topic_summaries), 1) self.assertEqual(topic_summaries[0].name, 'Name') 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)
def get(self): """Handles GET requests.""" topic_summaries = topic_fetchers.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_fetchers.get_all_skill_ids_assigned_to_some_topic()) merged_skill_ids = (skill_services.get_merged_skill_ids()) topic_rights_dict = topic_fetchers.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)) all_classrooms_dict = config_domain.CLASSROOM_PAGES_DATA.value all_classroom_names = [ classroom['name'] for classroom in all_classrooms_dict ] topic_classroom_dict = {} for classroom in all_classrooms_dict: for topic_id in classroom['topic_ids']: topic_classroom_dict[topic_id] = classroom['name'] for topic_summary_dict in topic_summary_dicts: topic_summary_dict['classroom'] = topic_classroom_dict.get( topic_summary_dict['id'], None) mergeable_skill_summary_dicts = [] untriaged_skill_summaries = ( skill_services.get_untriaged_skill_summaries( skill_summaries, skill_ids_assigned_to_some_topic, merged_skill_ids)) categorized_skills = ( skill_services.get_categorized_skill_ids_and_descriptions()) for skill_summary_dict in skill_summary_dicts: skill_id = skill_summary_dict['id'] if (skill_id in skill_ids_assigned_to_some_topic) and ( skill_id not in merged_skill_ids): mergeable_skill_summary_dicts.append(skill_summary_dict) 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': [ skill_summary.to_dict() for skill_summary in untriaged_skill_summaries ], 'mergeable_skill_summary_dicts': mergeable_skill_summary_dicts, 'topic_summary_dicts': topic_summary_dicts, 'total_skill_count': len(skill_summary_dicts), 'all_classroom_names': all_classroom_names, 'can_delete_topic': can_delete_topic, 'can_create_topic': can_create_topic, 'can_delete_skill': can_delete_skill, 'can_create_skill': can_create_skill, 'categorized_skills_dict': categorized_skills.to_dict() }) self.render_json(self.values)
def get(self): """Handles GET requests.""" def _round_average_ratings(rating): """Returns the rounded average rating to display on the creator dashboard. Args: rating: float. The rating of the lesson. Returns: float. The rounded average value of rating. """ return python_utils.ROUND( rating, feconf.AVERAGE_RATINGS_DASHBOARD_PRECISION) subscribed_exploration_summaries = ( exp_fetchers.get_exploration_summaries_subscribed_to(self.user_id)) subscribed_collection_summaries = ( collection_services.get_collection_summaries_subscribed_to( self.user_id)) exploration_ids_subscribed_to = [ summary.id for summary in subscribed_exploration_summaries ] exp_summary_dicts = summary_services.get_displayable_exp_summary_dicts( subscribed_exploration_summaries) collection_summary_dicts = [] feedback_thread_analytics = ( feedback_services.get_thread_analytics_multi( exploration_ids_subscribed_to)) # TODO(bhenning): Update this to use unresolved answers from # stats_services once the training interface is enabled and it's cheaper # to retrieve top answers from stats_services. for ind, exploration in enumerate(exp_summary_dicts): exploration.update(feedback_thread_analytics[ind].to_dict()) exp_summary_dicts = sorted( exp_summary_dicts, key=lambda x: (x['num_open_threads'], x['last_updated_msec']), reverse=True) topic_summaries = topic_fetchers.get_all_topic_summaries() topic_summary_dicts = [ summary.to_dict() for summary in topic_summaries ] if role_services.ACTION_CREATE_COLLECTION in self.user.actions: for collection_summary in subscribed_collection_summaries: # TODO(sll): Reuse _get_displayable_collection_summary_dicts() # in summary_services, instead of replicating it like this. collection_summary_dicts.append({ 'id': collection_summary.id, 'title': collection_summary.title, 'category': collection_summary.category, 'objective': collection_summary.objective, 'language_code': collection_summary.language_code, 'last_updated_msec': utils.get_time_in_millisecs( collection_summary.collection_model_last_updated), 'created_on': utils.get_time_in_millisecs( collection_summary.collection_model_created_on), 'status': collection_summary.status, 'node_count': collection_summary.node_count, 'community_owned': collection_summary.community_owned, 'thumbnail_icon_url': (utils.get_thumbnail_icon_url_for_category( collection_summary.category)), 'thumbnail_bg_color': utils.get_hex_color_for_category( collection_summary.category), }) dashboard_stats = ( user_jobs_continuous.UserStatsAggregator.get_dashboard_stats( self.user_id)) dashboard_stats.update({ 'total_open_feedback': feedback_services.get_total_open_threads(feedback_thread_analytics) }) if dashboard_stats and dashboard_stats.get('average_ratings'): dashboard_stats['average_ratings'] = (_round_average_ratings( dashboard_stats['average_ratings'])) last_week_stats = (user_services.get_last_week_dashboard_stats( self.user_id)) if last_week_stats and len(list(last_week_stats.keys())) != 1: logging.error( '\'last_week_stats\' should contain only one key-value pair' ' denoting last week dashboard stats of the user keyed by a' ' datetime string.') last_week_stats = None if last_week_stats: # 'last_week_stats' is a dict with only one key-value pair denoting # last week dashboard stats of the user keyed by a datetime string. datetime_of_stats = list(last_week_stats.keys())[0] last_week_stats_average_ratings = (list( last_week_stats.values())[0].get('average_ratings')) if last_week_stats_average_ratings: last_week_stats[datetime_of_stats]['average_ratings'] = ( _round_average_ratings(last_week_stats_average_ratings)) subscriber_ids = subscription_services.get_all_subscribers_of_creator( self.user_id) subscribers_settings = user_services.get_users_settings(subscriber_ids) subscribers_list = [] for index, subscriber_settings in enumerate(subscribers_settings): subscriber_summary = { 'subscriber_picture_data_url': (subscriber_settings.profile_picture_data_url), 'subscriber_username': subscriber_settings.username, 'subscriber_impact': (user_services.get_user_impact_score(subscriber_ids[index])) } subscribers_list.append(subscriber_summary) user_settings = user_services.get_user_settings(self.user_id, strict=False) creator_dashboard_display_pref = ( user_settings.creator_dashboard_display_pref) suggestions_created_by_user = suggestion_services.query_suggestions([ ('author_id', self.user_id), ('suggestion_type', feconf.SUGGESTION_TYPE_EDIT_STATE_CONTENT) ]) suggestions_which_can_be_reviewed = ( suggestion_services. get_all_suggestions_that_can_be_reviewed_by_user(self.user_id)) for s in suggestions_created_by_user: s.populate_old_value_of_change() for s in suggestions_which_can_be_reviewed: s.populate_old_value_of_change() suggestion_dicts_created_by_user = ([ s.to_dict() for s in suggestions_created_by_user ]) suggestion_dicts_which_can_be_reviewed = ([ s.to_dict() for s in suggestions_which_can_be_reviewed ]) ids_of_suggestions_created_by_user = ([ s['suggestion_id'] for s in suggestion_dicts_created_by_user ]) ids_of_suggestions_which_can_be_reviewed = ([ s['suggestion_id'] for s in suggestion_dicts_which_can_be_reviewed ]) threads_linked_to_suggestions_by_user = ([ t.to_dict() for t in feedback_services.get_multiple_threads( ids_of_suggestions_created_by_user) ]) threads_linked_to_suggestions_which_can_be_reviewed = ([ t.to_dict() for t in feedback_services.get_multiple_threads( ids_of_suggestions_which_can_be_reviewed) ]) self.values.update({ 'explorations_list': exp_summary_dicts, 'collections_list': collection_summary_dicts, 'dashboard_stats': dashboard_stats, 'last_week_stats': last_week_stats, 'subscribers_list': subscribers_list, 'display_preference': creator_dashboard_display_pref, 'threads_for_created_suggestions_list': (threads_linked_to_suggestions_by_user), 'threads_for_suggestions_to_review_list': (threads_linked_to_suggestions_which_can_be_reviewed), 'created_suggestions_list': suggestion_dicts_created_by_user, 'suggestions_to_review_list': (suggestion_dicts_which_can_be_reviewed), 'topic_summary_dicts': topic_summary_dicts }) self.render_json(self.values)
def get(self): topic_summaries = topic_fetchers.get_all_topic_summaries() topic_names = [summary.name for summary in topic_summaries] self.values = {'topic_names': topic_names} self.render_json(self.values)
def get(self): """Handles GET requests.""" demo_exploration_ids = list(feconf.DEMO_EXPLORATIONS.keys()) recent_job_data = jobs.get_data_for_recent_jobs() unfinished_job_data = jobs.get_data_for_unfinished_jobs() topic_summaries = topic_fetchers.get_all_topic_summaries() topic_summary_dicts = [ summary.to_dict() for summary in topic_summaries] for job in unfinished_job_data: job['can_be_canceled'] = job['is_cancelable'] and any([ klass.__name__ == job['job_type'] for klass in ( jobs_registry.ONE_OFF_JOB_MANAGERS + ( jobs_registry.AUDIT_JOB_MANAGERS))]) queued_or_running_job_types = set([ job['job_type'] for job in unfinished_job_data]) one_off_job_status_summaries = [{ 'job_type': klass.__name__, 'is_queued_or_running': ( klass.__name__ in queued_or_running_job_types) } for klass in jobs_registry.ONE_OFF_JOB_MANAGERS] audit_job_status_summaries = [{ 'job_type': klass.__name__, 'is_queued_or_running': ( klass.__name__ in queued_or_running_job_types) } for klass in jobs_registry.AUDIT_JOB_MANAGERS] continuous_computations_data = jobs.get_continuous_computations_info( jobs_registry.ALL_CONTINUOUS_COMPUTATION_MANAGERS) for computation in continuous_computations_data: if computation['last_started_msec']: computation['human_readable_last_started'] = ( utils.get_human_readable_time_string( computation['last_started_msec'])) if computation['last_stopped_msec']: computation['human_readable_last_stopped'] = ( utils.get_human_readable_time_string( computation['last_stopped_msec'])) if computation['last_finished_msec']: computation['human_readable_last_finished'] = ( utils.get_human_readable_time_string( computation['last_finished_msec'])) feature_flag_dicts = feature_services.get_all_feature_flag_dicts() self.render_json({ 'config_properties': ( config_domain.Registry.get_config_property_schemas()), 'continuous_computations_data': continuous_computations_data, 'demo_collections': sorted(feconf.DEMO_COLLECTIONS.items()), 'demo_explorations': sorted(feconf.DEMO_EXPLORATIONS.items()), 'demo_exploration_ids': demo_exploration_ids, 'human_readable_current_time': ( utils.get_human_readable_time_string( utils.get_current_time_in_millisecs())), 'one_off_job_status_summaries': one_off_job_status_summaries, 'audit_job_status_summaries': audit_job_status_summaries, 'recent_job_data': recent_job_data, 'unfinished_job_data': unfinished_job_data, 'updatable_roles': { role: role_services.HUMAN_READABLE_ROLES[role] for role in role_services.UPDATABLE_ROLES }, 'viewable_roles': { role: role_services.HUMAN_READABLE_ROLES[role] for role in role_services.VIEWABLE_ROLES }, 'topic_summaries': topic_summary_dicts, 'role_graph_data': role_services.get_role_graph_data(), 'feature_flags': feature_flag_dicts, })