def updateSize(self, doc): """ Recursively recomputes the size of this collection and its underlying folders and fixes the sizes as needed. :param doc: The collection. :type doc: dict """ from girderformindlogger.models.folder import Folder size = 0 fixes = 0 folderModel = Folder() folders = folderModel.find({ 'parentId': doc['_id'], 'parentCollection': 'collection' }) for folder in folders: # fix folder size if needed _, f = folderModel.updateSize(folder) fixes += f # get total recursive folder size folder = folderModel.load(folder['_id'], force=True) size += folderModel.getSizeRecursive(folder) # fix value if incorrect if size != doc.get('size'): self.update({'_id': doc['_id']}, update={'$set': {'size': size}}) fixes += 1 return size, fixes
def remove(self, collection, progress=None, **kwargs): """ Delete a collection recursively. :param collection: The collection document to delete. :type collection: dict :param progress: A progress context to record progress on. :type progress: girderformindlogger.utility.progress.ProgressContext or None. """ from girderformindlogger.models.folder import Folder folderModel = Folder() folders = folderModel.find({ 'parentId': collection['_id'], 'parentCollection': 'collection' }) for folder in folders: folderModel.remove(folder, progress=progress, **kwargs) # Delete this collection AccessControlledModel.remove(self, collection) if progress: progress.update(increment=1, message='Deleted collection ' + collection['name'])
def remove(self, user, progress=None, **kwargs): """ Delete a user, and all references to it in the database. :param user: The user document to delete. :type user: dict :param progress: A progress context to record progress on. :type progress: girderformindlogger.utility.progress.ProgressContext or None. """ from girderformindlogger.models.folder import Folder from girderformindlogger.models.group import Group from girderformindlogger.models.token import Token # Delete all authentication tokens owned by this user Token().removeWithQuery({'userId': user['_id']}) # Delete all pending group invites for this user Group().update({'requests': user['_id']}, {'$pull': { 'requests': user['_id'] }}) # Delete all of the folders under this user folderModel = Folder() folders = folderModel.find({ 'parentId': user['_id'], 'parentCollection': 'user' }) for folder in folders: folderModel.remove(folder, progress=progress, **kwargs) # Finally, delete the user document itself AccessControlledModel.remove(self, user) if progress: progress.update(increment=1, message='Deleted user ' + user['login'])