|
|
@@ -230,6 +230,7 @@ class CASFinder(MetaPathFinder, Loader): |
|
|
|
def __init__(self): |
|
|
|
self._loaders = [] |
|
|
|
self._aliases = {} |
|
|
|
self._writer = None |
|
|
|
|
|
|
|
if [ x for x in sys.meta_path if |
|
|
|
isinstance(x, self.__class__) ]: |
|
|
@@ -244,6 +245,9 @@ class CASFinder(MetaPathFinder, Loader): |
|
|
|
def __exit__(self, exc_type, exc_value, traceback): |
|
|
|
self.disconnect() |
|
|
|
|
|
|
|
def register_write(self, wr): |
|
|
|
self._writer = wr |
|
|
|
|
|
|
|
def load_aliases(self, data): |
|
|
|
self._aliases.update(self._parsealiases(data)) |
|
|
|
|
|
|
@@ -406,16 +410,17 @@ def defaultinit(casf): |
|
|
|
modorder = [ x.strip() for x in |
|
|
|
cp['casimport']['module_prio'].split(',') ] |
|
|
|
|
|
|
|
mods = {} |
|
|
|
for i in modorder: |
|
|
|
modfun = _supportedmodules[cp[i]['type']] |
|
|
|
casf.register(modfun(cp[i])) |
|
|
|
|
|
|
|
cachedir = basedir / 'cache' |
|
|
|
cachedir.mkdir(parents=True, exist_ok=True) |
|
|
|
mod = modfun(cp[i]) |
|
|
|
mods[i] = mod |
|
|
|
casf.register(mod) |
|
|
|
|
|
|
|
casf.register(FileDirCAS(cachedir)) |
|
|
|
casf.register(IPFSCAS()) |
|
|
|
casf.register(HTTPSCAS()) |
|
|
|
try: |
|
|
|
casf.register_write(mods[cp['casimport']['write_cache']]) |
|
|
|
except KeyError: |
|
|
|
pass |
|
|
|
|
|
|
|
def main(): |
|
|
|
# Thoughts on supported features: |
|
|
@@ -553,6 +558,21 @@ class Test(unittest.TestCase): |
|
|
|
# and that the second loader is the IPFSCAS |
|
|
|
self.assertIsInstance(f._loaders[1], IPFSCAS) |
|
|
|
|
|
|
|
def test_writecache(self): |
|
|
|
conf = self.fixtures / 'writecache.conf' |
|
|
|
|
|
|
|
# that w/ a custom config |
|
|
|
with tempset(os.environ, 'CASIMPORT_CONF', str(conf)), \ |
|
|
|
CASFinder() as f: |
|
|
|
# that is gets loaded |
|
|
|
defaultinit(f) |
|
|
|
|
|
|
|
# that the first loader is the cache |
|
|
|
self.assertIsInstance(f._loaders[0], FileDirCAS) |
|
|
|
|
|
|
|
# and that the stored writer matches |
|
|
|
self.assertIs(f._writer, f._loaders[0]) |
|
|
|
|
|
|
|
def test_ipfsgwfromconfig(self): |
|
|
|
gwurl = 'https://www.example.com/somepath/' |
|
|
|
ipfsconf = dict(gateway=gwurl) |
|
|
@@ -592,6 +612,9 @@ class Test(unittest.TestCase): |
|
|
|
# and that the third loader is the HTTPSCAS |
|
|
|
self.assertIsInstance(f._loaders[2], HTTPSCAS) |
|
|
|
|
|
|
|
# and that these are the only ones loaded |
|
|
|
self.assertEqual(len(f._loaders), 3) |
|
|
|
|
|
|
|
with CASFinder() as f: |
|
|
|
defaultinit(f) |
|
|
|
|
|
|
|