projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
19280: explicitly include/exclude primary
[arvados.git]
/
sdk
/
cwl
/
arvados_cwl
/
fsaccess.py
diff --git
a/sdk/cwl/arvados_cwl/fsaccess.py
b/sdk/cwl/arvados_cwl/fsaccess.py
index 252ca57d47bb30ad1834e7070b3cfdf1e0ffdbb1..4da8f855692aed44f212739d5e515af3fef2ceb0 100644
(file)
--- a/
sdk/cwl/arvados_cwl/fsaccess.py
+++ b/
sdk/cwl/arvados_cwl/fsaccess.py
@@
-100,7
+100,8
@@
class CollectionFsAccess(cwltool.stdfsaccess.StdFsAccess):
if p.startswith("keep:") and (arvados.util.keep_locator_pattern.match(p[5:]) or
arvados.util.collection_uuid_pattern.match(p[5:])):
locator = p[5:]
if p.startswith("keep:") and (arvados.util.keep_locator_pattern.match(p[5:]) or
arvados.util.collection_uuid_pattern.match(p[5:])):
locator = p[5:]
- return (self.collection_cache.get(locator), urllib.parse.unquote(sp[1]) if len(sp) == 2 else None)
+ rest = os.path.normpath(urllib.parse.unquote(sp[1])) if len(sp) == 2 else None
+ return (self.collection_cache.get(locator), rest)
else:
return (None, path)
else:
return (None, path)
@@
-128,15
+129,15
@@
class CollectionFsAccess(cwltool.stdfsaccess.StdFsAccess):
def glob(self, pattern):
collection, rest = self.get_collection(pattern)
def glob(self, pattern):
collection, rest = self.get_collection(pattern)
- if collection is not None and
not rest
:
+ if collection is not None and
rest in (None, "", ".")
:
return [pattern]
patternsegments = rest.split("/")
return sorted(self._match(collection, patternsegments, "keep:" + collection.manifest_locator()))
return [pattern]
patternsegments = rest.split("/")
return sorted(self._match(collection, patternsegments, "keep:" + collection.manifest_locator()))
- def open(self, fn, mode):
+ def open(self, fn, mode
, encoding=None
):
collection, rest = self.get_collection(fn)
if collection is not None:
collection, rest = self.get_collection(fn)
if collection is not None:
- return collection.open(rest, mode)
+ return collection.open(rest, mode
, encoding=encoding
)
else:
return super(CollectionFsAccess, self).open(self._abs(fn), mode)
else:
return super(CollectionFsAccess, self).open(self._abs(fn), mode)
@@
-148,6
+149,11
@@
class CollectionFsAccess(cwltool.stdfsaccess.StdFsAccess):
return False
else:
raise
return False
else:
raise
+ except IOError as err:
+ if err.errno == errno.ENOENT:
+ return False
+ else:
+ raise
if collection is not None:
if rest:
return collection.exists(rest)
if collection is not None:
if rest:
return collection.exists(rest)
@@
-223,14
+229,15
@@
class CollectionFetcher(DefaultFetcher):
self.fsaccess = fs_access
self.num_retries = num_retries
self.fsaccess = fs_access
self.num_retries = num_retries
- def fetch_text(self, url):
+ def fetch_text(self, url
, content_types=None
):
if url.startswith("keep:"):
if url.startswith("keep:"):
- with self.fsaccess.open(url, "r") as f:
+ with self.fsaccess.open(url, "r"
, encoding="utf-8"
) as f:
return f.read()
if url.startswith("arvwf:"):
record = self.api_client.workflows().get(uuid=url[6:]).execute(num_retries=self.num_retries)
return f.read()
if url.startswith("arvwf:"):
record = self.api_client.workflows().get(uuid=url[6:]).execute(num_retries=self.num_retries)
- definition = record["definition"] + ('\nlabel: "%s"\n' % record["name"].replace('"', '\\"'))
- return definition
+ definition = yaml.round_trip_load(record["definition"])
+ definition["label"] = record["name"]
+ return yaml.round_trip_dump(definition)
return super(CollectionFetcher, self).fetch_text(url)
def check_exists(self, url):
return super(CollectionFetcher, self).fetch_text(url)
def check_exists(self, url):