Merge pull request #11108 from mvdbeek/filename_pattern

Allow setting filename_pattern by client
This commit is contained in:
Dannon
2021-01-12 09:23:28 -05:00
committed by GitHub
+8 -6
View File
@@ -319,7 +319,7 @@ class Data(metaclass=DataMeta):
def _serve_raw(self, trans, dataset, to_ext, **kwd):
trans.response.headers['Content-Length'] = str(os.stat(dataset.file_name).st_size)
trans.response.set_content_type("application/octet-stream") # force octet-stream so Safari doesn't append mime extensions to filename
filename = self._download_filename(dataset, to_ext, hdca=kwd.get("hdca"), element_identifier=kwd.get("element_identifier"))
filename = self._download_filename(dataset, to_ext, hdca=kwd.get("hdca"), element_identifier=kwd.get("element_identifier"), filename_pattern=kwd.get("filename_pattern"))
trans.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % filename
return open(dataset.file_name, mode='rb')
@@ -409,7 +409,7 @@ class Data(metaclass=DataMeta):
return self._archive_composite_dataset(trans, data, do_action=kwd.get('do_action', 'zip'))
else:
trans.response.headers['Content-Length'] = str(os.stat(data.file_name).st_size)
filename = self._download_filename(data, to_ext, hdca=kwd.get("hdca"), element_identifier=kwd.get("element_identifier"))
filename = self._download_filename(data, to_ext, hdca=kwd.get("hdca"), element_identifier=kwd.get("element_identifier"), filename_pattern=kwd.get("filename_pattern"))
trans.response.set_content_type("application/octet-stream") # force octet-stream so Safari doesn't append mime extensions to filename
trans.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % filename
return open(data.file_name, 'rb')
@@ -472,7 +472,7 @@ class Data(metaclass=DataMeta):
return open(filename, mode='rb')
def _download_filename(self, dataset, to_ext, hdca=None, element_identifier=None):
def _download_filename(self, dataset, to_ext, hdca=None, element_identifier=None, filename_pattern=None):
def escape(raw_identifier):
return ''.join(c in FILENAME_VALID_CHARS and c or '_' for c in raw_identifier)[0:150]
@@ -487,7 +487,11 @@ class Data(metaclass=DataMeta):
"hid": dataset.hid,
}
filename_pattern = DOWNLOAD_FILENAME_PATTERN_DATASET
if not filename_pattern:
if hdca is None:
filename_pattern = DOWNLOAD_FILENAME_PATTERN_DATASET
else:
filename_pattern = DOWNLOAD_FILENAME_PATTERN_COLLECTION_ELEMENT
if hdca is not None:
# Use collection context to build up filename.
@@ -495,8 +499,6 @@ class Data(metaclass=DataMeta):
template_values["hdca_name"] = escape(hdca.name)
template_values["hdca_hid"] = hdca.hid
filename_pattern = DOWNLOAD_FILENAME_PATTERN_COLLECTION_ELEMENT
return string.Template(filename_pattern).substitute(**template_values)
def display_name(self, dataset):