Break out hooke.util.pluggable.submods.
authorW. Trevor King <wking@drexel.edu>
Tue, 27 Jul 2010 16:14:14 +0000 (12:14 -0400)
committerW. Trevor King <wking@drexel.edu>
Tue, 27 Jul 2010 16:14:14 +0000 (12:14 -0400)
hooke/util/pluggable.py

index 14eaeb0209ed0f9bd4f6326dd19d85e355df3fe9..f13b9a5bd26cc588ee78b31d22d1d0d306ae1f03 100644 (file)
@@ -60,6 +60,19 @@ class IsSubclass (object):
         return subclass
 
 
+def submods(this_modname, submodnames):
+    """Iterate through (submodname, submod) pairs.
+    """
+    for submodname in submodnames:
+        count = len([s for s in submodnames if s == submodname])
+        assert count > 0, 'No %s entries: %s' % (submodname, submodnames)
+        assert count == 1, 'Multiple (%d) %s entries: %s' \
+            % (count, submodname, submodnames)
+        this_mod = __import__(this_modname, fromlist=[submodname])
+        submod = getattr(this_mod, submodname)
+        yield (submodname, submod)
+
+
 def construct_odict(this_modname, submodnames, class_selector,
                     instantiate=True):
     """Search the submodules `submodnames` of a module `this_modname`
@@ -70,13 +83,7 @@ def construct_odict(this_modname, submodnames, class_selector,
     itself is stored.
     """
     objs = odict()
-    for submodname in submodnames:
-        count = len([s for s in submodnames if s == submodname])
-        assert count > 0, 'No %s entries: %s' % (submodname, submodnames)
-        assert count == 1, 'Multiple (%d) %s entries: %s' \
-            % (count, submodname, submodnames)
-        this_mod = __import__(this_modname, fromlist=[submodname])
-        submod = getattr(this_mod, submodname)
+    for submodname,submod in submods(this_modname, submodnames):
         for objname in dir(submod):
             obj = getattr(submod, objname)
             if class_selector(obj):
@@ -101,13 +108,7 @@ def construct_graph(this_modname, submodnames, class_selector,
     is returned.
     """
     instances = {}
-    for submodname in submodnames:
-        count = len([s for s in submodnames if s == submodname])
-        assert count > 0, 'No %s entries: %s' % (submodname, submodnames)
-        assert count == 1, 'Multiple (%d) %s entries: %s' \
-            % (count, submodname, submodnames)
-        this_mod = __import__(this_modname, fromlist=[submodname])
-        submod = getattr(this_mod, submodname)
+    for submodname,submod in submods(this_modname, submodnames):
         for objname in dir(submod):
             obj = getattr(submod, objname)
             if class_selector(obj):