|
@@ -64,8 +64,17 @@ class CASFinder(MetaPathFinder, Loader): |
|
|
def __init__(self): |
|
|
def __init__(self): |
|
|
self._loaders = [] |
|
|
self._loaders = [] |
|
|
|
|
|
|
|
|
|
|
|
if [ x for x in sys.meta_path if isinstance(x, self.__class__) ]: |
|
|
|
|
|
raise RuntimeError('cannot register more than on CASFinder') |
|
|
|
|
|
|
|
|
sys.meta_path.append(self) |
|
|
sys.meta_path.append(self) |
|
|
|
|
|
|
|
|
|
|
|
def __enter__(self): |
|
|
|
|
|
return self |
|
|
|
|
|
|
|
|
|
|
|
def __exit__(self, exc_type, exc_value, traceback): |
|
|
|
|
|
self.disconnect() |
|
|
|
|
|
|
|
|
def disconnect(self): |
|
|
def disconnect(self): |
|
|
try: |
|
|
try: |
|
|
sys.meta_path.remove(self) |
|
|
sys.meta_path.remove(self) |
|
@@ -100,9 +109,19 @@ class CASFinder(MetaPathFinder, Loader): |
|
|
hash, load = module.__spec__.loader_state |
|
|
hash, load = module.__spec__.loader_state |
|
|
load.exec_module(hash, module) |
|
|
load.exec_module(hash, module) |
|
|
|
|
|
|
|
|
|
|
|
# The global version |
|
|
|
|
|
_casfinder = CASFinder() |
|
|
|
|
|
|
|
|
import unittest |
|
|
import unittest |
|
|
|
|
|
|
|
|
class Test(unittest.TestCase): |
|
|
class Test(unittest.TestCase): |
|
|
|
|
|
def setUp(self): |
|
|
|
|
|
self.old_meta_path = sys.meta_path |
|
|
|
|
|
sys.meta_path = [ x for x in sys.meta_path if not isinstance(x, CASFinder) ] |
|
|
|
|
|
|
|
|
|
|
|
def tearDown(self): |
|
|
|
|
|
sys.meta_path = self.old_meta_path |
|
|
|
|
|
|
|
|
def test_casimport(self): |
|
|
def test_casimport(self): |
|
|
# That a CASFinder |
|
|
# That a CASFinder |
|
|
f = CASFinder() |
|
|
f = CASFinder() |
|
@@ -125,3 +144,9 @@ class Test(unittest.TestCase): |
|
|
|
|
|
|
|
|
# and when disconnected as second time, nothing happens |
|
|
# and when disconnected as second time, nothing happens |
|
|
f.disconnect() |
|
|
f.disconnect() |
|
|
|
|
|
|
|
|
|
|
|
def test_multiplecas(self): |
|
|
|
|
|
# that once we have one |
|
|
|
|
|
with CASFinder() as f: |
|
|
|
|
|
# if we try to create a second, it fails |
|
|
|
|
|
self.assertRaises(RuntimeError, CASFinder) |