2022-01-20 15:22:47 -05:00
|
|
|
from crc.api.common import ApiError
|
2022-04-12 13:28:49 -04:00
|
|
|
from crc.models.file import FileSchema, CONTENT_TYPES
|
2022-01-20 15:22:47 -05:00
|
|
|
from crc.services.reference_file_service import ReferenceFileService
|
|
|
|
|
|
|
|
from flask import send_file
|
|
|
|
|
|
|
|
import io
|
|
|
|
import connexion
|
|
|
|
|
|
|
|
|
|
|
|
def get_reference_files():
|
|
|
|
"""Gets a list of all reference files"""
|
2022-02-02 12:59:56 -05:00
|
|
|
files = ReferenceFileService.get_reference_files()
|
2022-01-20 15:22:47 -05:00
|
|
|
return FileSchema(many=True).dump(files)
|
|
|
|
|
|
|
|
|
|
|
|
def get_reference_file_data(name):
|
2022-02-02 12:59:56 -05:00
|
|
|
file_extension = ReferenceFileService.get_extension(name)
|
2022-01-20 15:22:47 -05:00
|
|
|
content_type = CONTENT_TYPES[file_extension]
|
2022-02-02 12:59:56 -05:00
|
|
|
file_data = ReferenceFileService().get_data(name)
|
2022-01-20 15:22:47 -05:00
|
|
|
return send_file(
|
2022-02-02 12:59:56 -05:00
|
|
|
io.BytesIO(file_data),
|
2022-01-20 15:22:47 -05:00
|
|
|
attachment_filename=name,
|
|
|
|
mimetype=content_type,
|
|
|
|
cache_timeout=-1 # Don't cache these files on the browser.
|
|
|
|
)
|
|
|
|
|
2022-04-12 13:28:49 -04:00
|
|
|
|
2022-01-20 15:22:47 -05:00
|
|
|
def get_reference_file_info(name):
|
|
|
|
"""Return metadata for a reference file"""
|
2022-02-02 12:59:56 -05:00
|
|
|
return FileSchema().dump(ReferenceFileService.get_reference_file(name))
|
2022-01-20 15:22:47 -05:00
|
|
|
|
|
|
|
|
|
|
|
def update_reference_file_data(name):
|
|
|
|
"""Uses the file service to manage reference-files. They will be used in script tasks to compute values."""
|
|
|
|
if 'file' not in connexion.request.files:
|
|
|
|
raise ApiError('invalid_file',
|
|
|
|
'Expected a file named "file" in the multipart form request', status_code=400)
|
|
|
|
|
|
|
|
file = connexion.request.files['file']
|
2022-02-02 12:59:56 -05:00
|
|
|
name_extension = ReferenceFileService.get_extension(name)
|
|
|
|
file_extension = ReferenceFileService.get_extension(file.filename)
|
2022-01-20 15:22:47 -05:00
|
|
|
if name_extension != file_extension:
|
|
|
|
raise ApiError('invalid_file_type',
|
|
|
|
"The file you uploaded has an extension '%s', but it should have an extension of '%s' " %
|
|
|
|
(file_extension, name_extension))
|
|
|
|
|
2022-02-02 12:59:56 -05:00
|
|
|
return_file = ReferenceFileService.update_reference_file(file_name=name, binary_data=file.stream.read())
|
|
|
|
return FileSchema().dump(return_file)
|
2022-01-20 15:22:47 -05:00
|
|
|
|
2022-04-12 13:28:49 -04:00
|
|
|
|
2022-01-20 15:22:47 -05:00
|
|
|
def add_reference_file():
|
|
|
|
file = connexion.request.files['file']
|
2022-02-02 12:59:56 -05:00
|
|
|
file_model = ReferenceFileService.add_reference_file(file.filename, file.stream.read())
|
|
|
|
return FileSchema().dump(file_model)
|
2022-01-20 15:22:47 -05:00
|
|
|
|
|
|
|
|
|
|
|
def delete_reference_file(name):
|
2022-02-02 12:59:56 -05:00
|
|
|
ReferenceFileService().delete(name)
|
2022-01-20 15:22:47 -05:00
|
|
|
|
|
|
|
|