def get(self, topic_id): """Returns the TopicRights object of a topic.""" topic_domain.Topic.require_valid_topic_id(topic_id) topic_rights = topic_services.get_topic_rights(topic_id, strict=False) if topic_rights is None: raise self.InvalidInputException( 'Expected a valid topic id to be provided.') user_actions_info = user_services.UserActionsInfo(self.user_id) can_edit_topic = topic_services.check_can_edit_topic( user_actions_info, topic_rights) can_publish_topic = (role_services.ACTION_CHANGE_TOPIC_STATUS in user_actions_info.actions) self.values.update({ 'can_edit_topic': can_edit_topic, 'published': topic_rights.topic_is_published, 'can_publish_topic': can_publish_topic }) 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)
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 test_admin_can_manage_topic(self): topic_rights = topic_services.get_topic_rights(self.TOPIC_ID) self.assertTrue(topic_services.check_can_edit_topic( self.user_admin, topic_rights))
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) ) all_classrooms_dict = config_domain.TOPIC_IDS_FOR_CLASSROOM_PAGES.value all_classroom_names = [ classroom['name'] for classroom in all_classrooms_dict] for topic_summary_dict in topic_summary_dicts: topic_summary_dict['classroom'] = None for classroom in all_classrooms_dict: if topic_summary_dict['id'] in classroom['topic_ids']: topic_summary_dict['classroom'] = classroom['name'] break untriaged_skill_summary_dicts = [] mergeable_skill_summary_dicts = [] categorized_skills_dict = {} topics = topic_fetchers.get_all_topics() for topic in topics: subtopics = topic.subtopics categorized_skills_dict[topic.name] = {} uncategorized_skills = ( skill_services.get_descriptions_of_skills( topic.uncategorized_skill_ids)[0]) skills_list = [] for skill_id in topic.uncategorized_skill_ids: skill_dict = { 'skill_id': skill_id, 'skill_description': uncategorized_skills[skill_id] } skills_list.append(skill_dict) categorized_skills_dict[topic.name]['uncategorized'] = ( skills_list) for subtopic in subtopics: skills = (skill_services.get_descriptions_of_skills( subtopic.skill_ids))[0] skills_list = [] for skill_id in subtopic.skill_ids: skill_dict = { 'skill_id': skill_id, 'skill_description': skills[skill_id] } skills_list.append(skill_dict) categorized_skills_dict[topic.name][ subtopic.title] = skills_list categorized_skills_dict['untriaged_skills'] = [] 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 merged_skill_ids): untriaged_skill_summary_dicts.append(skill_summary_dict) categorized_skills_dict['untriaged_skills'].append({ 'skill_id': skill_id, 'skill_description': skill_summary_dict['description'] }) 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': untriaged_skill_summary_dicts, 'mergeable_skill_summary_dicts': mergeable_skill_summary_dicts, 'topic_summary_dicts': topic_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_dict }) self.render_json(self.values)
def test_check_can_edit_topic_with_no_topic_rights(self): user_can_edit_topic = topic_services.check_can_edit_topic( self.user_a, None) self.assertFalse(user_can_edit_topic)
def test_cannot_edit_topic_with_no_topic_rights(self): self.assertFalse(topic_services.check_can_edit_topic(self.user_a, None))