def _getFirstFileByHash(self, algo, hash, user=None): """ Return the first file that the user has access to given its hash and its associated hashsum algorithm name. :param algo: Algorithm the given hash is encoded with. :param hash: Hash of the file to find. :param user: User to test access against. Default (none) is the current user. :return: A file document. """ self._validateAlgo(algo) query = {algo: hash} fileModel = FileModel() cursor = fileModel.find(query) if not user: user = self.getCurrentUser() for file in cursor: if fileModel.hasAccess(file, user, AccessType.READ): return file return None
def remove(self, item, **kwargs): """ Delete an item, and all references to it in the database. :param item: The item document to delete. :type item: dict """ from girderformindlogger.models.file import File from girderformindlogger.models.upload import Upload # Delete all files in this item fileModel = File() files = fileModel.find({'itemId': item['_id']}) for file in files: fileKwargs = kwargs.copy() fileKwargs.pop('updateItemSize', None) fileModel.remove(file, updateItemSize=False, **fileKwargs) # Delete pending uploads into this item uploadModel = Upload() uploads = uploadModel.find({ 'parentId': item['_id'], 'parentType': 'item' }) for upload in uploads: uploadModel.remove(upload, **kwargs) # Delete the item itself Model.remove(self, item)
def getByHash(self, algo, hash): self._validateAlgo(algo) model = FileModel() user = self.getCurrentUser() cursor = model.find({algo: hash}) return [ file for file in cursor if model.hasAccess(file, user, AccessType.READ) ]