diff --git a/pywb/cdx/test/test_zipnum.py b/pywb/cdx/test/test_zipnum.py index 5c671c83..4b0336ae 100644 --- a/pywb/cdx/test/test_zipnum.py +++ b/pywb/cdx/test/test_zipnum.py @@ -142,6 +142,22 @@ org,iana)/time-zones 20140126200737 zipnum 9631 166 38 Traceback (most recent call last): NotFoundException: No Captures found for: http://aaa.zz/ (domain query) +# Invalid .idx filesor or missing loc + +>>> zip_test_err(url='http://example.com/', matchType='exact') +Traceback (most recent call last): +Exception: No Locations Found for: foo + + +>>> zip_test_err(url='http://iana.org/x', matchType='exact') +Traceback (most recent call last): +IOError: [Errno 2] No such file or directory: './sample_archive/invalid' + + +>>> zip_test_err(url='http://example.zz/x', matchType='exact') +Traceback (most recent call last): +Exception: No Locations Found for: foo2 + """ from test_cdxops import cdx_ops_test @@ -161,6 +177,10 @@ def zip_ops_test(url, **kwargs): sources = test_zipnum cdx_ops_test(url, sources, **kwargs) +def zip_test_err(url, **kwargs): + sources = get_test_dir() + 'zipcdx/zipnum-bad.idx' + cdx_ops_test(url, sources, **kwargs) + def test_zip_prefix_load(): diff --git a/pywb/cdx/zipnum.py b/pywb/cdx/zipnum.py index 06efe6a2..fc07d3b5 100644 --- a/pywb/cdx/zipnum.py +++ b/pywb/cdx/zipnum.py @@ -290,6 +290,11 @@ class ZipNumCluster(CDXSource): last_exc = None last_traceback = None + try: + locations = self.loc_resolver(blocks.part, query) + except: + raise Exception('No Locations Found for: ' + blocks.part) + for location in self.loc_resolver(blocks.part, query): try: return self.load_blocks(location, blocks, ranges, query) @@ -299,9 +304,9 @@ class ZipNumCluster(CDXSource): last_traceback = sys.exc_info()[2] if last_exc: - raise exc, None, last_traceback + raise last_exc, None, last_traceback else: - raise Exception('No Locations Found for: ' + block.part) + raise Exception('No Locations Found for: ' + blocks.part) def load_blocks(self, location, blocks, ranges, query): """ Load one or more blocks of compressed cdx lines, return diff --git a/sample_archive/zipcdx/zipnum-bad.idx b/sample_archive/zipcdx/zipnum-bad.idx new file mode 100644 index 00000000..a763d506 --- /dev/null +++ b/sample_archive/zipcdx/zipnum-bad.idx @@ -0,0 +1,3 @@ +com,example)/ 20140127171200 foo 0 275 1 +org,iana)/ 20140127171238 bar 275 328 2 +zz,example)/ 20140127171238 foo2 275 328 2 diff --git a/sample_archive/zipcdx/zipnum-bad.loc b/sample_archive/zipcdx/zipnum-bad.loc new file mode 100644 index 00000000..d113a330 --- /dev/null +++ b/sample_archive/zipcdx/zipnum-bad.loc @@ -0,0 +1,3 @@ +bar ./sample_archive/invalid +foo2 +zipnum ./sample_archive/x-bad-path-to-ignore-x ./sample_archive/zipcdx/zipnum-sample.cdx.gz