def test_get_exploration_summaries_where_user_has_role(self) -> None: exp_ids = [self.EXP_1_ID, self.EXP_2_ID, self.EXP_3_ID] exp_summaries = ( exp_fetchers.get_exploration_summaries_where_user_has_role( self.owner_id)) self.assertEqual(len(exp_summaries), 3) for exp_summary in exp_summaries: self.assertIn(exp_summary.id, exp_ids)
def _remove_user_from_activities_with_associated_rights_models( user_id, use_user_subscriptions_ids): """Remove the user from exploration, collection, and topic models. Args: user_id: str. The ID of the user for which to remove the user from explorations, collections, and topics. use_user_subscriptions_ids: bool. Whether to use the IDs from user's UserSubscriptionsModel. When False the IDs are gathered via datastore queries. """ if use_user_subscriptions_ids: subscribed_exploration_summaries = ( exp_fetchers.get_exploration_summaries_subscribed_to(user_id)) else: subscribed_exploration_summaries = ( exp_fetchers.get_exploration_summaries_where_user_has_role(user_id) ) explorations_to_be_deleted_ids = [ exp_summary.id for exp_summary in subscribed_exploration_summaries if exp_summary.is_private() and exp_summary.is_solely_owned_by_user(user_id) ] exp_services.delete_explorations(user_id, explorations_to_be_deleted_ids, force_deletion=True) # Release ownership of explorations that are public and are solely owned # by the to-be-deleted user. explorations_to_release_ownership_ids = [ exp_summary.id for exp_summary in subscribed_exploration_summaries if not exp_summary.is_private() and exp_summary. is_solely_owned_by_user(user_id) and not exp_summary.community_owned ] for exp_id in explorations_to_release_ownership_ids: rights_manager.release_ownership_of_exploration( user_services.get_system_user(), exp_id) explorations_to_remove_user_from_ids = [ exp_summary.id for exp_summary in subscribed_exploration_summaries if not exp_summary.is_solely_owned_by_user(user_id) and exp_summary.does_user_have_any_role(user_id) ] for exp_id in explorations_to_remove_user_from_ids: rights_manager.deassign_role_for_exploration( user_services.get_system_user(), exp_id, user_id) if use_user_subscriptions_ids: subscribed_collection_summaries = ( collection_services.get_collection_summaries_subscribed_to(user_id) ) else: subscribed_collection_summaries = ( collection_services.get_collection_summaries_where_user_has_role( user_id)) collections_to_be_deleted_ids = [ col_summary.id for col_summary in subscribed_collection_summaries if col_summary.is_private() and col_summary.is_solely_owned_by_user(user_id) ] collection_services.delete_collections(user_id, collections_to_be_deleted_ids, force_deletion=True) # Release ownership of collections that are public and are solely owned # by the to-be-deleted user. collections_to_release_ownership_ids = [ col_summary.id for col_summary in subscribed_collection_summaries if not col_summary.is_private() and col_summary. is_solely_owned_by_user(user_id) and not col_summary.community_owned ] for col_id in collections_to_release_ownership_ids: rights_manager.release_ownership_of_collection( user_services.get_system_user(), col_id) collections_to_remove_user_from_ids = [ col_summary.id for col_summary in subscribed_collection_summaries if not col_summary.is_solely_owned_by_user(user_id) and col_summary.does_user_have_any_role(user_id) ] for col_id in collections_to_remove_user_from_ids: rights_manager.deassign_role_for_collection( user_services.get_system_user(), col_id, user_id) topic_services.deassign_user_from_all_topics( user_services.get_system_user(), user_id)
def remove_user_from_activities_with_associated_rights_models(user_id): """Remove the user from exploration, collection, and topic models. Args: user_id: str. The ID of the user for which to remove the user from explorations, collections, and topics. """ subscribed_exploration_summaries = ( exp_fetchers.get_exploration_summaries_where_user_has_role(user_id)) explorations_to_be_deleted_ids = [ exp_summary.id for exp_summary in subscribed_exploration_summaries if exp_summary.is_private() and exp_summary.is_solely_owned_by_user(user_id) ] exp_services.delete_explorations( user_id, explorations_to_be_deleted_ids, force_deletion=True) # Release ownership of explorations that are public and are solely owned # by the to-be-deleted user. explorations_to_release_ownership_ids = [ exp_summary.id for exp_summary in subscribed_exploration_summaries if not exp_summary.is_private() and exp_summary.is_solely_owned_by_user(user_id) and not exp_summary.community_owned ] for exp_id in explorations_to_release_ownership_ids: rights_manager.release_ownership_of_exploration( user_services.get_system_user(), exp_id) explorations_to_remove_user_from_ids = [ exp_summary.id for exp_summary in subscribed_exploration_summaries if not exp_summary.is_solely_owned_by_user(user_id) and exp_summary.does_user_have_any_role(user_id) ] for exp_id in explorations_to_remove_user_from_ids: rights_manager.deassign_role_for_exploration( user_services.get_system_user(), exp_id, user_id) # To hard-delete explorations marked as deleted we are using the rights # model to retrieve the exploration as the summary model gets hard-deleted # while marking the exploration as deleted. explorations_rights = ( rights_manager.get_exploration_rights_where_user_is_owner(user_id)) explorations_to_be_deleted_ids = [ exploration_rights.id for exploration_rights in explorations_rights if exploration_rights.is_private() and exploration_rights.is_solely_owned_by_user(user_id) ] exp_services.delete_explorations( user_id, explorations_to_be_deleted_ids, force_deletion=True) subscribed_collection_summaries = ( collection_services.get_collection_summaries_where_user_has_role( user_id)) collections_to_be_deleted_ids = [ col_summary.id for col_summary in subscribed_collection_summaries if col_summary.is_private() and col_summary.is_solely_owned_by_user(user_id) ] collection_services.delete_collections( user_id, collections_to_be_deleted_ids, force_deletion=True) # Release ownership of collections that are public and are solely owned # by the to-be-deleted user. collections_to_release_ownership_ids = [ col_summary.id for col_summary in subscribed_collection_summaries if not col_summary.is_private() and col_summary.is_solely_owned_by_user(user_id) and not col_summary.community_owned ] for col_id in collections_to_release_ownership_ids: rights_manager.release_ownership_of_collection( user_services.get_system_user(), col_id) collections_to_remove_user_from_ids = [ col_summary.id for col_summary in subscribed_collection_summaries if not col_summary.is_solely_owned_by_user(user_id) and col_summary.does_user_have_any_role(user_id) ] for col_id in collections_to_remove_user_from_ids: rights_manager.deassign_role_for_collection( user_services.get_system_user(), col_id, user_id) # To hard-delete collections marked as deleted we are using the rights # model to retrieve the collection as the summary model gets hard-deleted # while marking the collection as deleted. collection_rights = ( rights_manager.get_collection_rights_where_user_is_owner(user_id)) collections_to_be_deleted_ids = [ collection_rights.id for collection_rights in collection_rights if collection_rights.is_private() and collection_rights.is_solely_owned_by_user(user_id) ] collection_services.delete_collections( user_id, collections_to_be_deleted_ids, force_deletion=True) topic_services.deassign_user_from_all_topics( user_services.get_system_user(), user_id)