Example #1
0
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
Example #2
0
    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
Example #3
0
    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