diff --git a/sacredboard/app/data/pymongo/filesdao.py b/sacredboard/app/data/pymongo/filesdao.py index ec456ed..6ca844a 100644 --- a/sacredboard/app/data/pymongo/filesdao.py +++ b/sacredboard/app/data/pymongo/filesdao.py @@ -24,7 +24,7 @@ def __init__(self, generic_dao: GenericDAO): self._fs = gridfs.GridFS(self.generic_dao._database) - def get(self, file_id: Union[str, bson.ObjectId]): + def get(self, file_id: Union[str, bson.ObjectId]) -> gridfs.GridOut: """Return the file identified by a file_id string.""" if isinstance(file_id, str): file_id = bson.ObjectId(file_id) diff --git a/sacredboard/app/webapi/files.py b/sacredboard/app/webapi/files.py index 5955951..5ca5b0f 100644 --- a/sacredboard/app/webapi/files.py +++ b/sacredboard/app/webapi/files.py @@ -7,6 +7,8 @@ import mimetypes import zipfile +import gridfs + from flask import Blueprint, current_app, render_template, send_file, Response from sacredboard.app.data import NotFoundError @@ -83,8 +85,8 @@ def get_files_zip(run_id: int, filetype: _FileType): for f in target_files: # source and artifact files use a different data structure file_id = f['file_id'] if 'file_id' in f else f[1] - file = dao_files.get(file_id) - data = zipfile.ZipInfo(file.filename) + file: gridfs.GridOut = dao_files.get(file_id) + data = zipfile.ZipInfo(file.filename, date_time=file.upload_date.timetuple()) data.compress_type = zipfile.ZIP_DEFLATED zf.writestr(data, file.read()) memory_file.seek(0)