def add_coverage_data(coverage_id, coverage, environment_type): if coverage is None: raise ObjectNotFound("Coverage {} not found.".format(coverage_id)) if environment_type not in coverage.environments: raise ObjectNotFound("Environment{}' not found.".format(environment_type)) if not request.files: raise InvalidArguments('No file provided.') if request.files and 'file' not in request.files: raise InvalidArguments('File provided with bad param ("file" param expected).') content = request.files['file'] logger = logging.getLogger(__name__) logger.info('content received: %s', content) with tempfile.TemporaryDirectory() as tmpdirname: tmp_file = os.path.join(tmpdirname, content.filename) content.save(tmp_file) #TODO: improve this function so we don't have to write the file localy first file_type, file_name = data_handler.type_of_data(tmp_file) if file_type in [None, "tmp"]: logger.warning('invalid file provided: %s', content.filename) raise InvalidArguments('Invalid file provided: {}.'.format(content.filename)) with open(tmp_file, 'rb') as file: if file_type == 'fusio': #ntfs is called fusio in type_of_data coverage.save_ntfs(environment_type, file) tasks.send_ntfs_to_tyr.delay(coverage_id, environment_type) else: #we need to temporary save the file before sending it file_id = models.save_file_in_gridfs(file, filename=content.filename) tasks.send_file_to_tyr_and_discard.delay(coverage_id, environment_type, file_id) return {'message': 'Valid {} file provided : {}'.format(file_type, file_name)}, 200
def post(self, data_source_id): datasource = models.DataSource.get(data_source_id) if datasource is None: return {'message': 'bad data_source {}'.format(data_source_id)}, 404 if not request.files : return {'message': 'no file provided'}, 400 if request.files and 'file' not in request.files: return {'message': 'file provided with bad param ("file" param expected)'}, 400 content = request.files['file'] logger = logging.getLogger(__name__) logger.info('content received: %s', content) with tempfile.TemporaryDirectory() as tmpdirname: tmp_file = os.path.join(tmpdirname, content.filename) content.save(tmp_file) file_type, file_name = data_handler.type_of_data(tmp_file) if file_type in [None, "tmp"] : logger.warning('invalid file provided: %s', content.filename) return {'message': 'invalid file provided: {}'.format(content.filename)}, 400 # backup content input_dir = coverage.technical_conf.input_dir if not os.path.exists(input_dir): os.makedirs(input_dir) full_file_name = os.path.join(os.path.realpath(input_dir), content.filename) shutil.move(tmp_file, full_file_name + ".tmp") shutil.move(full_file_name + ".tmp", full_file_name) return {'message': 'Valid {} file provided : {}'.format(file_type, file_name)}, 200
def post(self, data_source_id): datasource = models.DataSource.get(data_source_id=data_source_id) if datasource is None: raise ObjectNotFound( "Data source '{}' not found.".format(data_source_id)) if not request.files: raise InvalidArguments('No file provided.') if request.files and 'file' not in request.files: raise InvalidArguments( 'File provided with bad param ("file" param expected).') content = request.files['file'] logger = logging.getLogger(__name__) logger.info('content received: %s', content) with tempfile.TemporaryDirectory() as tmpdirname: tmp_file = os.path.join(tmpdirname, content.filename) content.save(tmp_file) file_type, file_name = data_handler.type_of_data(tmp_file) if file_type in [None, "tmp"]: logger.warning('invalid file provided: %s', content.filename) raise InvalidArguments('Invalid file provided: {}.'.format( content.filename)) # backup content input_dir = coverage.technical_conf.input_dir if not os.path.exists(input_dir): os.makedirs(input_dir) full_file_name = os.path.join(os.path.realpath(input_dir), content.filename) shutil.move(tmp_file, full_file_name + ".tmp") shutil.move(full_file_name + ".tmp", full_file_name) return { 'message': 'Valid {} file provided : {}'.format(file_type, file_name) }, 200