def parentsToRoot(self, item, user=None, force=False): """ Get the path to traverse to a root of the hierarchy. :param item: The item whose root to find :type item: dict :param user: The user making the request (not required if force=True). :type user: dict or None :param force: Set to True to skip permission checking. If False, the returned models will be filtered. :type force: bool :returns: an ordered list of dictionaries from root to the current item """ from girderformindlogger.models.folder import Folder folderModel = Folder() curFolder = folderModel.load(item['profileId'], user=user, level=AccessType.READ, force=force) profileIdsToRoot = folderModel.parentsToRoot(curFolder, user=user, level=AccessType.READ, force=force) if force: profileIdsToRoot.append({'type': 'folder', 'object': curFolder}) else: filteredFolder = folderModel.filter(curFolder, user) profileIdsToRoot.append({ 'type': 'folder', 'object': filteredFolder }) return profileIdsToRoot
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