X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/0e53f1c16b9417eecb693fe398585c81f7b4e329..ab7c97818a088e7205d4d01db1e8a0c0709b9aa0:/sdk/python/arvados/util.py diff --git a/sdk/python/arvados/util.py b/sdk/python/arvados/util.py index 7148b9295b..ada1aec6ef 100644 --- a/sdk/python/arvados/util.py +++ b/sdk/python/arvados/util.py @@ -7,6 +7,15 @@ import errno import sys from arvados.collection import * +HEX_RE = re.compile(r'^[0-9a-fA-F]+$') + +portable_data_hash_pattern = re.compile(r'[0-9a-f]{32}\+\d+') +uuid_pattern = re.compile(r'[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}') +collection_uuid_pattern = re.compile(r'[a-z0-9]{5}-4zz18-[a-z0-9]{15}') +group_uuid_pattern = re.compile(r'[a-z0-9]{5}-j7d0g-[a-z0-9]{15}') +user_uuid_pattern = re.compile(r'[a-z0-9]{5}-tpzed-[a-z0-9]{15}') +link_uuid_pattern = re.compile(r'[a-z0-9]{5}-o0j2j-[a-z0-9]{15}') + def clear_tmpdir(path=None): """ Ensure the given directory (or TASK_TMPDIR if none given) @@ -160,7 +169,7 @@ def zipball_extract(zipball, path): break zip_file.write(buf) zip_file.close() - + p = subprocess.Popen(["unzip", "-q", "-o", "-d", path, @@ -306,3 +315,36 @@ def listdir_recursive(dirname, base=None): else: allfiles += [ent_base] return allfiles + +def is_hex(s, *length_args): + """is_hex(s[, length[, max_length]]) -> boolean + + Return True if s is a string of hexadecimal digits. + If one length argument is given, the string must contain exactly + that number of digits. + If two length arguments are given, the string must contain a number of + digits between those two lengths, inclusive. + Return False otherwise. + """ + num_length_args = len(length_args) + if num_length_args > 2: + raise ArgumentError("is_hex accepts up to 3 arguments ({} given)". + format(1 + num_length_args)) + elif num_length_args == 2: + good_len = (length_args[0] <= len(s) <= length_args[1]) + elif num_length_args == 1: + good_len = (len(s) == length_args[0]) + else: + good_len = True + return bool(good_len and HEX_RE.match(s)) + +def list_all(fn, **kwargs): + items = [] + offset = 0 + items_available = sys.maxint + while len(items) < items_available: + c = fn(offset=offset, **kwargs).execute() + items += c['items'] + items_available = c['items_available'] + offset = c['offset'] + len(c['items']) + return items