class CollectionReader(object):
- def __init__(self, manifest_locator_or_text, api_client=None):
+ def __init__(self, manifest_locator_or_text, api_client=None, keep_client=None):
self._api_client = api_client
- self._keep_client = None
+ self._keep_client = keep_client
if re.match(r'[a-f0-9]{32}(\+\d+)?(\+\S+)*$', manifest_locator_or_text):
self._manifest_locator = manifest_locator_or_text
self._manifest_text = None
elif re.match(r'[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}$', manifest_locator_or_text):
self._manifest_locator = manifest_locator_or_text
self._manifest_text = None
- elif re.match(r'(\S+)( [a-f0-9]{32}(\+\d+)(\+\S+)*)+( \d+:\d+:\S+)+\n', manifest_locator_or_text):
+ elif re.match(r'((\S+)( +[a-f0-9]{32}(\+\d+)(\+\S+)*)+( +\d+:\d+:\S+)+$)+', manifest_locator_or_text, re.MULTILINE):
self._manifest_text = manifest_locator_or_text
self._manifest_locator = None
else:
uuid=self._manifest_locator).execute()
self._manifest_text = c['manifest_text']
except Exception as e:
+ if not util.portable_data_hash_pattern.match(
+ self._manifest_locator):
+ raise
_logger.warning("API lookup failed for collection %s (%s: %s)",
self._manifest_locator, type(e), str(e))
if self._keep_client is None:
# now regenerate the manifest text based on the normalized stream
#print "normalizing", self._manifest_text
- self._manifest_text = ''.join([StreamReader(stream).manifest_text() for stream in self._streams])
+ self._manifest_text = ''.join([StreamReader(stream, keep=self._keep_client).manifest_text() for stream in self._streams])
#print "result", self._manifest_text
self._populate()
resp = []
for s in self._streams:
- resp.append(StreamReader(s))
+ resp.append(StreamReader(s, keep=self._keep_client))
return resp
def all_files(self):
def manifest_text(self, strip=False):
self._populate()
if strip:
- m = ''.join([StreamReader(stream).manifest_text(strip=True) for stream in self._streams])
+ m = ''.join([StreamReader(stream, keep=self._keep_client).manifest_text(strip=True) for stream in self._streams])
return m
else:
return self._manifest_text