import logging import sys from app import app from data import model from data.database import Repository, User logger = logging.getLogger(__name__) def delete_summary(username): found = User.get(User.username == username) dependencies = found.dependencies(search_nullable=False) counts = {} for expression, field in dependencies: use_count = field.model_class.select().where(expression).count() if use_count > 0: counts[field.model_class.__name__] = use_count return counts def delete_username(username): # First delete the repositories owned by this user found = User.get(User.username == username) for repository in list(Repository.select().where(Repository.namespace_user == found)): print 'Deleting repository: {0}/{1}'.format(found.username, repository.name) model.repository.purge_repository(found.username, repository.name) # Now recursively delete user, which will clean up all non-nullable referencing fields print 'Deleting user: {0}'.format(username) found.delete_instance(recursive=True) if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG) summary = delete_summary(sys.argv[1]).items() if summary: print 'Will delete:' for model_name, count in summary: print '{0}: {1}'.format(model_name, count) else: print 'Nothing references user.' print 'Delete? [y/n]' delete_yn = raw_input().lower().strip() if delete_yn == 'y': delete_username(sys.argv[1]) else: print 'Aborted!'