19699: Ensure collection name doesn't go over the limit
authorPeter Amstutz <peter.amstutz@curii.com>
Fri, 4 Nov 2022 01:14:00 +0000 (21:14 -0400)
committerPeter Amstutz <peter.amstutz@curii.com>
Mon, 14 Nov 2022 16:27:45 +0000 (11:27 -0500)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <peter.amstutz@curii.com>

sdk/cwl/arvados_cwl/http.py

index dcc2a51192dfc4d4b573da302b3373fd08d67fff..b061f44f9655819f2dce972304a9de44419cd3b1 100644 (file)
@@ -151,6 +151,15 @@ def http_to_keep(api, project_uuid, url, utcnow=datetime.datetime.utcnow):
 
 
     collectionname = "Downloaded from %s" % urllib.parse.quote(url, safe='')
+
+    # max length - space to add a timestamp used by ensure_unique_name
+    max_name_len = 254 - 28
+
+    if len(collectionname) > max_name_len:
+        over = len(collectionname) - max_name_len
+        split = int(max_name_len/2)
+        collectionname = collectionname[0:split] + "…" + collectionname[split+over:]
+
     c.save_new(name=collectionname, owner_uuid=project_uuid, ensure_unique_name=True)
 
     api.collections().update(uuid=c.manifest_locator(), body={"collection":{"properties": properties}}).execute()