efbfbf: upgrade to Bugs Everywhere Directory v1.5
[sawsim.git] / pysawsim / manager / __init__.py
index acf2af6509078750286fd86b426c28a7bd9f8b58..30f6e874604f8224f35c41256a49574e2753e453 100644 (file)
@@ -256,7 +256,7 @@ class IsSubclass (object):
         return subclass
 
 
-def get_manager(submod):
+def get_manager(submod=None, defaults=['subproc', 'thread']):
     """
     >>> get_manager('thread')
     <class 'pysawsim.manager.thread.ThreadManager'>
@@ -264,12 +264,28 @@ def get_manager(submod):
     Traceback (most recent call last):
       ...
     AttributeError: 'module' object has no attribute 'wookie'
+    >>> m = get_manager()
+    >>> issubclass(m, JobManager)
+    True
     """
+    if submod == None:
+        for submod in defaults:
+            try:
+                m = get_manager(submod)
+            except ImportError:
+                continue
+            if len(m._bugs) > 0:
+                continue
+            return m
+        raise Exception('none of the managers in %s were enabled' % defaults)
     this_mod = __import__(__name__, fromlist=[submod])
     sub_mod = getattr(this_mod, submod)
+    if sub_mod._ENABLED == False:
+        raise sub_mod._DISABLING_ERROR
     class_selector = IsSubclass(base_class=JobManager, blacklist=[JobManager])
     for x_name in dir(sub_mod):
         x = getattr(sub_mod, x_name)
         if class_selector(x) == True:
+            x._bugs = [a for a in dir(sub_mod) if a.startswith('_HAS_BUG_')]
             return x
     raise ValueError('no JobManager found in %s' % sub_mod.__name__)