def reconstruct_files(): count = 0 for file in File.objects(fragments__is_clean=False): logger.debug('Reconstructing {}'.format(file)) file.reconstruct() count += 1 return count
def post_file(request): files = File.objects(Q(source=request.parameters['source']) & Q(collection=request.parameters['collection']) & Q(filename=request.parameters['name'])).all() if len(files) == 0: file = File() file.collection = request.parameters['collection'] file.filename = request.parameters['name'] file.encoding = Encoding(**DEFAULT_ENCODING) hubs = Hub.objects(cumulus_id=request.parameters['source']) if len(hubs) == 0: raise ObjectDoesNotExist('Source does not exist') elif len(hubs) == 1: hub = hubs[0] else: raise MultipleObjectsFound('Multiple files found for source') file.source = hub elif len(files) == 1: file = files[0] else: raise MultipleObjectsFound('Multiple objects found for the search query') with file as f: f.write(request.data) return FileSerializer(file).data
def get_file(request): files = File.objects(Q(source=request.parameters['source']) & Q(collection=request.parameters['collection']) & Q(filename=request.parameters['name'])).all() if len(files) == 0: raise ObjectDoesNotExist('File does not exist') elif len(files) == 1: file = files[0] else: raise MultipleObjectsFound('Multiple files found for the search query') return FileContentSerializer(file).data
def v_random(func): pipeline = [{ '$sample': { 'size': int(len(File.objects) * VERIFY_FRACTION) } }] files_to_reconstruct = list() for file_dict in File.objects.aggregate(*pipeline): file = one(File.objects(uuid=file_dict['uuid'])) if not getattr(file, func)(): files_to_reconstruct.append(file.uuid) logger.debug('{} check failed: {}: {}/{}/{}'.format( func, file.uid, file.source, file.collection, file.filename)) logger.info('Files to reconstruct: {}'.format(len(files_to_reconstruct)))