|
@@ -398,6 +398,11 @@ class CASFinder(MetaPathFinder, Loader): |
|
|
else: |
|
|
else: |
|
|
raise ValueError('unable to find loader for url %s' % repr(urllib.parse.urlunparse(url))) |
|
|
raise ValueError('unable to find loader for url %s' % repr(urllib.parse.urlunparse(url))) |
|
|
|
|
|
|
|
|
|
|
|
hash = hashlib.sha256(data).hexdigest() |
|
|
|
|
|
wrtr = self._writer |
|
|
|
|
|
if wrtr is not None: |
|
|
|
|
|
wrtr.write_cache(hash, data) |
|
|
|
|
|
|
|
|
exec(data, module.__dict__) |
|
|
exec(data, module.__dict__) |
|
|
|
|
|
|
|
|
# we were successful, add the aliases |
|
|
# we were successful, add the aliases |
|
@@ -767,7 +772,7 @@ class Test(unittest.TestCase): |
|
|
sys.path.append(fixdir) |
|
|
sys.path.append(fixdir) |
|
|
|
|
|
|
|
|
# that a fake ipfsloader |
|
|
# that a fake ipfsloader |
|
|
with open(self.fixtures / 'hello.py') as fp: |
|
|
|
|
|
|
|
|
with open(self.fixtures / 'hello.py', 'rb') as fp: |
|
|
# that returns the correct data |
|
|
# that returns the correct data |
|
|
fakedata = fp.read() |
|
|
fakedata = fp.read() |
|
|
|
|
|
|
|
@@ -784,9 +789,20 @@ class Test(unittest.TestCase): |
|
|
with CASFinder() as f, \ |
|
|
with CASFinder() as f, \ |
|
|
tempattrset(sys.modules[__name__], |
|
|
tempattrset(sys.modules[__name__], |
|
|
'load_mod_aliases', f.load_mod_aliases): |
|
|
'load_mod_aliases', f.load_mod_aliases): |
|
|
|
|
|
# that a cache dir |
|
|
|
|
|
cachedir = self.tempdir / 'cache' |
|
|
|
|
|
fd = FileDirCAS(cachedir) |
|
|
|
|
|
|
|
|
|
|
|
# when registered |
|
|
|
|
|
f.register(fd) |
|
|
|
|
|
|
|
|
|
|
|
# as a writer |
|
|
|
|
|
f.register_write(fd) |
|
|
|
|
|
|
|
|
|
|
|
# and the fake ipfs module |
|
|
f.register(fakeipfsloader) |
|
|
f.register(fakeipfsloader) |
|
|
|
|
|
|
|
|
|
|
|
# and the pkg we are about to load, isn't |
|
|
self.assertNotIn('randpkg', sys.modules) |
|
|
self.assertNotIn('randpkg', sys.modules) |
|
|
|
|
|
|
|
|
# that the import is successful |
|
|
# that the import is successful |
|
@@ -795,6 +811,12 @@ class Test(unittest.TestCase): |
|
|
# and pulled in the method |
|
|
# and pulled in the method |
|
|
self.assertTrue(hasattr(randpkg, 'hello')) |
|
|
self.assertTrue(hasattr(randpkg, 'hello')) |
|
|
|
|
|
|
|
|
|
|
|
# that the cache was written to, and matches |
|
|
|
|
|
hash = hashlib.sha256(fakedata).hexdigest() |
|
|
|
|
|
filecmp.cmp(cachedir / '3' / (hash + '.py'), |
|
|
|
|
|
self.fixtures / 'hello.py') |
|
|
|
|
|
|
|
|
|
|
|
# clean up |
|
|
del sys.modules['randpkg'] |
|
|
del sys.modules['randpkg'] |
|
|
finally: |
|
|
finally: |
|
|
sys.path.remove(fixdir) |
|
|
sys.path.remove(fixdir) |
|
|