Run update-copyright.py.
[hooke.git] / hooke / util / pluggable.py
index ad2d85b89ed37f26a3a8629ee38e4c603f5bdab3..a3c2d5b8a16427b13d8491114c9829bd349d0c73 100644 (file)
@@ -1,20 +1,19 @@
-# Copyright (C) 2010 W. Trevor King <wking@drexel.edu>
+# Copyright (C) 2010-2012 W. Trevor King <wking@drexel.edu>
 #
 # This file is part of Hooke.
 #
-# Hooke is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
+# Hooke is free software: you can redistribute it and/or modify it under the
+# terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
 #
-# Hooke is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
+# Hooke is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+# details.
 #
-# You should have received a copy of the GNU Lesser General Public
-# License along with Hooke.  If not, see
-# <http://www.gnu.org/licenses/>.
+# You should have received a copy of the GNU Lesser General Public License
+# along with Hooke.  If not, see <http://www.gnu.org/licenses/>.
 
 """``pluggable`` provides utility functions for extensible plugin modules.
 """
@@ -97,7 +96,12 @@ def construct_odict(this_modname, submodnames, class_selector,
             obj = getattr(submod, objname)
             if class_selector(obj):
                 if instantiate == True:
-                    obj = obj()
+                    try:
+                        obj = obj()
+                    except Exception, e:
+                        logging.error('could not instantiate %s from %s: %s'
+                                      % (obj, submodname, e))
+                        raise
                 name = getattr(obj, 'name', submodname)
                 objs[name] = obj
     return objs
@@ -121,7 +125,12 @@ def construct_graph(this_modname, submodnames, class_selector,
         for objname in dir(submod):
             obj = getattr(submod, objname)
             if class_selector(obj):
-                instance = obj()
+                try:
+                    instance = obj()
+                except Exception, e:
+                    logging.error('could not instantiate %s from %s: %s'
+                                  % (obj, submodname, e))
+                    raise
                 if assert_name_match == True and instance.name != submodname:
                     raise Exception(
                         'Instance name %s does not match module name %s'