From 5d039c344850dfc5fedd03c1050fa51eec404d72 Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Fri, 15 Apr 2022 14:49:12 -0400 Subject: [PATCH] 18994: Fix needs_new_collection errors found by tests Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- sdk/cwl/arvados_cwl/pathmapper.py | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/sdk/cwl/arvados_cwl/pathmapper.py b/sdk/cwl/arvados_cwl/pathmapper.py index d7b535eebd..64fdfa0d04 100644 --- a/sdk/cwl/arvados_cwl/pathmapper.py +++ b/sdk/cwl/arvados_cwl/pathmapper.py @@ -156,17 +156,23 @@ class ArvPathMapper(PathMapper): if loc.startswith("_:"): return True - if not prefix: - i = loc.rfind("/") - if i > -1: - prefix = loc[:i+1] - suffix = urllib.parse.quote(urllib.parse.unquote(loc[i+1:]), "/+@") - else: - prefix = loc+"/" + i = loc.rfind("/") + if i > -1: + loc_prefix = loc[:i+1] + if not prefix: + prefix = loc_prefix + # quote/unquote to ensure consistent quoting + suffix = urllib.parse.quote(urllib.parse.unquote(loc[i+1:]), "/+@") else: - suffix = loc[len(prefix):] + # no '/' found + loc_prefix = loc+"/" + prefix = loc+"/" + suffix = "" + + if prefix != loc_prefix: + return True - if "basename" in srcobj and prefix+suffix != prefix+urllib.parse.quote(srcobj["basename"], "/+@"): + if "basename" in srcobj and suffix != urllib.parse.quote(srcobj["basename"], "/+@"): return True if srcobj["class"] == "File" and loc not in self._pathmap: @@ -175,7 +181,7 @@ class ArvPathMapper(PathMapper): if self.needs_new_collection(s, prefix): return True if srcobj.get("listing"): - prefix = "%s%s/" % (prefix, srcobj["basename"]) + prefix = "%s%s/" % (prefix, urllib.parse.quote(srcobj.get("basename", suffix), "/+@")) for l in srcobj["listing"]: if self.needs_new_collection(l, prefix): return True -- 2.30.2