From fd5fd152f3c4904c3e91f370091f83434d78c465 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 12 Mar 2024 18:24:24 +0100 Subject: [PATCH 1/2] Assert that at least one file in npz zipfile ends with .npy from https://pydoc.dev/numpy/latest/numpy.lib.npyio.NpzFile.html: > NpzFile is used to load files in the NumPy .npz data archive format. It assumes that files in the archive have a .npy extension, other files are ignored. --- lib/galaxy/datatypes/binary.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py index 0f53030b3d02..1598da174672 100644 --- a/lib/galaxy/datatypes/binary.py +++ b/lib/galaxy/datatypes/binary.py @@ -4297,9 +4297,9 @@ def __init__(self, **kwd): def sniff(self, filename: str) -> bool: try: - npz = np.load(filename) - if isinstance(npz, np.lib.npyio.NpzFile): - return True + with np.load(filename) as npz: + if isinstance(npz, np.lib.npyio.NpzFile) and any(f.filename.endswith(".npy") for f in npz.zip.filelist): + return True except Exception: return False return False From 13a691c71441bdae409034fbc5f66fbe1c87d644 Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Tue, 12 Mar 2024 19:13:31 +0100 Subject: [PATCH 2/2] Explicitly exclude ConnectedValue from runtime input check --- lib/galaxy/managers/workflows.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/galaxy/managers/workflows.py b/lib/galaxy/managers/workflows.py index 2e33b001e2c0..d4c46b8b7752 100644 --- a/lib/galaxy/managers/workflows.py +++ b/lib/galaxy/managers/workflows.py @@ -81,6 +81,7 @@ visit_input_values, ) from galaxy.tools.parameters.basic import ( + ConnectedValue, DataCollectionToolParameter, DataToolParameter, RuntimeValue, @@ -1494,12 +1495,12 @@ def _workflow_to_dict_export(self, trans, stored=None, workflow=None, internal=F if name: input_dicts.append({"name": name, "description": annotation_str}) for name, val in step_state.items(): - if isinstance(val, RuntimeValue): + if isinstance(val, RuntimeValue) and not isinstance(val, ConnectedValue): input_dicts.append({"name": name, "description": f"runtime parameter for tool {module.get_name()}"}) elif isinstance(val, dict): # Input type is described by a dict, e.g. indexed parameters. for partval in val.values(): - if isinstance(partval, RuntimeValue): + if isinstance(partval, RuntimeValue) and not isinstance(val, ConnectedValue): input_dicts.append( {"name": name, "description": f"runtime parameter for tool {module.get_name()}"} )