X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/bffd1e4ee8532992b3790e4f232804a6731a9685..2126d3a9115620040260847a9e29fd5c73b466ab:/sdk/python/arvados/util.py?ds=sidebyside diff --git a/sdk/python/arvados/util.py b/sdk/python/arvados/util.py index 1ab999653b..66da2d12af 100644 --- a/sdk/python/arvados/util.py +++ b/sdk/python/arvados/util.py @@ -2,10 +2,14 @@ # # SPDX-License-Identifier: Apache-2.0 +from __future__ import division +from builtins import range + import fcntl import hashlib import httplib2 import os +import random import re import subprocess import errno @@ -24,6 +28,8 @@ 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}') +job_uuid_pattern = re.compile(r'[a-z0-9]{5}-8i9sb-[a-z0-9]{15}') +container_uuid_pattern = re.compile(r'[a-z0-9]{5}-dz642-[a-z0-9]{15}') manifest_pattern = re.compile(r'((\S+)( +[a-f0-9]{32}(\+\d+)(\+\S+)*)+( +\d+:\d+:\S+)+$)+', flags=re.MULTILINE) def clear_tmpdir(path=None): @@ -369,17 +375,14 @@ def is_hex(s, *length_args): def list_all(fn, num_retries=0, **kwargs): # Default limit to (effectively) api server's MAX_LIMIT kwargs.setdefault('limit', sys.maxsize) - kwargs.setdefault('order', 'uuid asc') - kwargs.setdefault('count', 'none') - addfilters = kwargs.get("filters", []) items = [] - while True: - c = fn(**kwargs).execute(num_retries=num_retries) - items.extend(c['items']) - if len(c['items']) < c['limit']: - # Didn't return a full page, so we're done. - break - kwargs["filters"] = addfilters + [["uuid", ">", c['items'][-1]['uuid']]] + offset = 0 + items_available = sys.maxsize + while len(items) < items_available: + c = fn(offset=offset, **kwargs).execute(num_retries=num_retries) + items += c['items'] + items_available = c['items_available'] + offset = c['offset'] + len(c['items']) return items def ca_certs_path(fallback=httplib2.CA_CERTS): @@ -400,3 +403,16 @@ def ca_certs_path(fallback=httplib2.CA_CERTS): if os.path.exists(ca_certs_path): return ca_certs_path return fallback + +def new_request_id(): + rid = "req-" + # 2**104 > 36**20 > 2**103 + n = random.getrandbits(104) + for _ in range(20): + c = n % 36 + if c < 10: + rid += chr(c+ord('0')) + else: + rid += chr(c+ord('a')-10) + n = n // 36 + return rid