def delete_unused_projects(): for class_ in locked_classes(): for project in class_.projects: submitted = set() for group in project.groups: submitted |= set(list(group.users)) - set(class_.admins) if len(submitted) < 10 and prompt( 'Do you want to delete project {}:{} with {} students?' .format(class_.name, project.name, len(submitted))): Session.delete(project) transaction.commit()
def delete_inactive_classes(): for class_ in locked_classes(): msg = None if len(class_.users) < 10: msg = ('Delete class {} with only {} users?' .format(class_.name, len(class_.users))) elif len(class_.admins) < 1: msg = 'Delete class {} with no admins?'.format(class_.name) elif len(class_.projects) < 1: msg = 'Delete class {} with no projects?'.format(class_.name) if msg and prompt(msg): Session.delete(class_) transaction.commit()
def delete_inactive_users(): # Delete inactive users for user in User.query_by().order_by(User.created_at).all(): msg = None if user.is_admin or len(user.admin_for) > 0: continue # Admin for a class if not user.classes: msg = 'Delete user {} with no classes ({} files)'.format( user.name, len(user.files)) elif not user.groups_assocs: msg = 'Delete user {} with no groups?'.format(user.name) elif not user.files: msg = 'Delete user {} with no files?'.format(user.name) if msg and prompt(msg): Session.delete(user) transaction.commit()
def merge_users(merge_to, merge_from): """Merge a non-umail account with a umail account.""" # Determine most active user based on most recently created group assert(merge_to.username.endswith('umail.ucsb.edu')) # Merge groups for u2g in merge_from.groups_assocs[:]: merge_to.group_with(merge_from, u2g.project, bypass_limit=True) # merge classes and files merge_to.classes.extend(merge_from.classes) merge_to.files.extend(merge_from.files) # update file ownership for sub in Submission.query_by(created_by=merge_from).all(): sub.created_by = merge_to # Delete the secondary user Session.delete(merge_from)
def merge_users(merge_to, merge_from): """Merge a non-umail account with a umail account.""" # Determine most active user based on most recently created group assert merge_to.username.endswith("umail.ucsb.edu") # Merge groups for u2g in merge_from.groups_assocs[:]: merge_to.group_with(merge_from, u2g.project, bypass_limit=True) # merge classes and files merge_to.classes.extend(merge_from.classes) merge_to.files.extend(merge_from.files) # update file ownership for sub in Submission.query_by(created_by=merge_from).all(): sub.created_by = merge_to # Delete the secondary user Session.delete(merge_from)