diff --git a/lib/galaxy/util/__init__.py b/lib/galaxy/util/__init__.py index 1aa49ad3a31..21c305d6625 100644 --- a/lib/galaxy/util/__init__.py +++ b/lib/galaxy/util/__init__.py @@ -1067,14 +1067,19 @@ def unicodify(value, encoding=DEFAULT_ENCODING, error='replace', strip_null=Fals return value -def filesystem_safe_string(s, max_len, truncation_chars='..'): +def filesystem_safe_string(s, max_len, truncation_chars='..', strip_leading_dot=True, invalid_chars=('/',), replacement_char='_'): """ - Strip leading dots, unicode null chars, replace `/` with `_`, truncate at 255 characters. + Strip unicode null chars, truncate at 255 characters. + Optionally replace additional ``invalid_chars`` with `replacement_char` . - This is probably only safe on linux / osx. + Defaults are probably only safe on linux / osx. Needs further escaping if used in shell commands """ - sanitized_string = unicodify(s, strip_null=True).lstrip('.').replace('/', '_') + sanitized_string = unicodify(s, strip_null=True) + if strip_leading_dot: + sanitized_string = sanitized_string.lstrip('.') + for invalid_char in invalid_chars: + sanitized_string = sanitized_string.replace(invalid_char, replacement_char) if len(sanitized_string) > max_len: sanitized_string = sanitized_string[:max_len - len(truncation_chars)] sanitized_string = f"{sanitized_string}{truncation_chars}" diff --git a/tools/data_export/export_remote.xml b/tools/data_export/export_remote.xml index 4542c6f4544..c4db5529b45 100644 --- a/tools/data_export/export_remote.xml +++ b/tools/data_export/export_remote.xml @@ -19,7 +19,7 @@ python '$__tool_directory__/export_remote.py' #if $export_type.export_type_selector == "datasets_auto": #set $fileconfig = json.dumps([{"real_data_path": str(infile), "name": infile.name_and_ext_filesystem_safe} for infile in $infiles]) #else -#set $fileconfig = json.dumps([{"real_data_path": str(dataset["infile"]), "name": filesystem_safe_string(str(dataset["name"]), 255)} for dataset in $export_type.datasets]) +#set $fileconfig = json.dumps([{"real_data_path": str(dataset["infile"]), "name": filesystem_safe_string(str(dataset["name"]), 255, invalid_chars=())} for dataset in $export_type.datasets]) #end if $fileconfig @@ -28,16 +28,20 @@ $fileconfig + - + + + + - +