Author: johannes Date: 2007-11-15 02:40:12 -0600 (Thu, 15 Nov 2007) New Revision: 9809
Modified: trunk/gnue-common/src/apps/plugin.py Log: PEP8-ification Modified: trunk/gnue-common/src/apps/plugin.py =================================================================== --- trunk/gnue-common/src/apps/plugin.py 2007-11-15 08:28:26 UTC (rev 9808) +++ trunk/gnue-common/src/apps/plugin.py 2007-11-15 08:40:12 UTC (rev 9809) @@ -64,6 +64,7 @@ from gnue.common.apps import errors, i18n +__all__ = ['LoadError', 'list', 'find'] # ============================================================================= # Exceptions @@ -73,102 +74,104 @@ # Module loading error # ----------------------------------------------------------------------------- -class LoadError (errors.AdminError): - """ - Indicates a failure to load a given module. Raised by L{find}. +class LoadError(errors.AdminError): + """ + Indicates a failure to load a given module. Raised by L{find}. - If e is an Exception of this class, e.exceptions gives a dictionary with - the keys being the modules that were trying to be imported and the values - being the exception info tuples for the exception that happened trying, and - e.detail is a string containing basically the same info. - """ - def __init__ (self, name, exceptions): + If e is an Exception of this class, e.exceptions gives a dictionary with + the keys being the modules that were trying to be imported and the values + being the exception info tuples for the exception that happened trying, and + e.detail is a string containing basically the same info. + """ + def __init__(self, name, exceptions): - self.name = name - self.exceptions = exceptions + self.name = name + self.exceptions = exceptions - if self.exceptions: - message = u_("Cannot load plugin '%s'") % self.name - detail = u_("The following plugins failed:\n") - for (name, exc) in self.exceptions.items (): - list = traceback.format_exception_only (exc [0], exc [1]) - del list [1:2] - msg = unicode (string.join (list, ''), i18n.getencoding ()) - detail += "* %s: %s" % (name, msg) - else: - message = u_("Cannot find plugin '%s'") % self.name - detail = None + if self.exceptions: + message = u_("Cannot load plugin '%s'") % self.name + detail = u_("The following plugins failed:\n") + for (name, exc) in self.exceptions.items(): + list = traceback.format_exception_only(exc[0], exc[1]) + del list[1:2] + msg = unicode(string.join(list, ''), i18n.getencoding()) + detail += "* %s: %s" % (name, msg) + else: + message = u_("Cannot find plugin '%s'") % self.name + detail = None - errors.AdminError.__init__ (self, message) + errors.AdminError.__init__(self, message) - if detail: - self.detail = detail + if detail: + self.detail = detail # ----------------------------------------------------------------------------- # List all available plugins # ----------------------------------------------------------------------------- -def list (base, identifier, try_to_init = True): - """ - List all available plugins. +def list(base, identifier, try_to_init = True): + """ + List all available plugins. - @param base: Name of the package that contains the plugins. - @param identifier: Identifier that a plugin must define to qualify as module. - @param try_to_init: If set to False, __initplugin__ is not called. - @return: A dictionary with the available plugin module names as keys and - either the loaded module or the exception info tuple of the exception - raised when trying to import the module as values. - """ - checktype (base, [StringType, UnicodeType]) - checktype (identifier, [StringType, UnicodeType]) + @param base: Name of the package that contains the plugins. + @param identifier: Identifier that a plugin must define to qualify as + module. + @param try_to_init: If set to False, __initplugin__ is not called. + @return: A dictionary with the available plugin module names as keys and + either the loaded module or the exception info tuple of the exception + raised when trying to import the module as values. + """ + checktype(base, [StringType, UnicodeType]) + checktype(identifier, [StringType, UnicodeType]) - # Make sure everything is a string. Non-ASCII characters are not allowed in - # Python module names anyway. - _base = base.encode () - _identifier = identifier.encode () + # Make sure everything is a string. Non-ASCII characters are not allowed in + # Python module names anyway. + _base = base.encode() + _identifier = identifier.encode() - # Now recursively list the plugins - return __list (_base, _identifier, try_to_init, True) + # Now recursively list the plugins + return __list(_base, _identifier, try_to_init, True) # ----------------------------------------------------------------------------- # Find a plugin # ----------------------------------------------------------------------------- -def find (name, base, identifier): - """ - Find a plugin by name. If no plugin is functional, a LoadError is raised. +def find(name, base, identifier): + """ + Find a plugin by name. If no plugin is functional, a LoadError is raised. - @param name: Name of the plugin to find. If the plugin is foo.bar, name can - be bar, or foo.bar, or foo, where the last one returns the first - functional plugin in the foo group. - @param base: Name of the package that contains the plugins. - @param identifier: Identifier that a plugin must define to qualify as module. - @return: The loaded module of the plugin. - """ - checktype (name, [StringType, UnicodeType]) - checktype (base, [StringType, UnicodeType]) - checktype (identifier, [StringType, UnicodeType]) + @param name: Name of the plugin to find. If the plugin is foo.bar, name can + be bar, or foo.bar, or foo, where the last one returns the first + functional plugin in the foo group. + @param base: Name of the package that contains the plugins. + @param identifier: Identifier that a plugin must define to qualify as + module. + @return: The loaded module of the plugin. + """ + checktype(name, [StringType, UnicodeType]) + checktype(base, [StringType, UnicodeType]) + checktype(identifier, [StringType, UnicodeType]) - # Make sure everything is a string. Non-ASCII characters are not allowed in - # Python module names anyway. - _name = name.encode () - _base = base.encode () - _identifier = identifier.encode () + # Make sure everything is a string. Non-ASCII characters are not allowed in + # Python module names anyway. + _name = name.encode() + _base = base.encode() + _identifier = identifier.encode() - # First, see if we've already found this module previously - global __findCache - try: - result = __findCache[(_base, _name)] - except KeyError: - # If not, search for the plugin - result = __findCache[(_base, _name)] = __find (_base, _name, _identifier) + # First, see if we've already found this module previously + global __findCache + try: + result = __findCache[(_base, _name)] + except KeyError: + # If not, search for the plugin + result = __findCache[(_base, _name)] = __find(_base, _name, _identifier) - if isinstance (result, ModuleType): - return result - else: - raise LoadError, (name, result) + if isinstance(result, ModuleType): + return result + else: + raise LoadError, (name, result) # ----------------------------------------------------------------------------- @@ -192,77 +195,77 @@ # Find all modules and subpackages in a package # ----------------------------------------------------------------------------- -def __modules (package, want_packages): +def __modules(package, want_packages): - # package.__file__ is a directory if GImportLogger is in use. This makes it - # necessary to 'simulate' a package, otherwise stepping down subpackages - # won't work. - if os.path.isdir (package.__file__): - (basedir, basefile) = (package.__file__, '__init__.py') - else: - (basedir, basefile) = os.path.split (package.__file__) + # package.__file__ is a directory if GImportLogger is in use. This makes it + # necessary to 'simulate' a package, otherwise stepping down subpackages + # won't work. + if os.path.isdir(package.__file__): + (basedir, basefile) = (package.__file__, '__init__.py') + else: + (basedir, basefile) = os.path.split(package.__file__) - (basename, baseext) = os.path.splitext (basefile) + (basename, baseext) = os.path.splitext(basefile) - if basename != '__init__': - # This is not a package, so no need to go deeper - return [] + if basename != '__init__': + # This is not a package, so no need to go deeper + return [] - # Find all submodules - result = {} - for subfile in os.listdir (basedir): - (subname, subext) = os.path.splitext (subfile) - subpath = os.path.join (basedir, subfile) - # We are only interested in Python modules or packages - if (not want_packages and subext in ['.py', '.pyc', '.pyo'] and \ - subname != '__init__') or \ - (os.path.isdir (subpath) and \ - os.path.isfile (os.path.join (subpath, '__init__.py')) or \ - os.path.isfile (os.path.join (subpath, '__init__.pyc')) or \ - os.path.isfile (os.path.join (subpath, '__init__.pyo'))): - result [subname] = True + # Find all submodules + result = {} + for subfile in os.listdir(basedir): + (subname, subext) = os.path.splitext(subfile) + subpath = os.path.join(basedir, subfile) + # We are only interested in Python modules or packages + if (not want_packages and subext in ['.py', '.pyc', '.pyo'] and \ + subname != '__init__') or \ + (os.path.isdir(subpath) and \ + os.path.isfile(os.path.join(subpath, '__init__.py')) or \ + os.path.isfile(os.path.join(subpath, '__init__.pyc')) or \ + os.path.isfile(os.path.join(subpath, '__init__.pyo'))): + result[subname] = True - return result.keys () + return result.keys() # ----------------------------------------------------------------------------- # Recursively list all plugins # ----------------------------------------------------------------------------- -def __list (base, identifier, try_to_init, top): +def __list(base, identifier, try_to_init, top): - global __failed + global __failed - if __failed.has_key (base): - # This has already failed in previous attempt - return {base: __failed [base]} + if __failed.has_key(base): + # This has already failed in previous attempt + return {base: __failed[base]} - try: - m = __import__ (base, None, None, '*') - except: - __failed [base] = sys.exc_info () - return {base: __failed [base]} + try: + m = __import__(base, None, None, '*') + except: + __failed[base] = sys.exc_info() + return {base: __failed[base]} - if hasattr (m, '__noplugin__'): - # This is not a plugin, ignore it - return {} + if hasattr(m, '__noplugin__'): + # This is not a plugin, ignore it + return {} - if not top: - if hasattr (m, identifier): - # This is already a plugin, no need to go deeper - if try_to_init and hasattr (m, '__initplugin__'): - try: - m.__initplugin__ () - except: - __failed [base] = sys.exc_info () - return {base: __failed [base]} - return {base: m} + if not top: + if hasattr(m, identifier): + # This is already a plugin, no need to go deeper + if try_to_init and hasattr(m, '__initplugin__'): + try: + m.__initplugin__() + except: + __failed[base] = sys.exc_info() + return {base: __failed[base]} + return {base: m} - # List all submodules - result = {} - for sub in __modules (m, False): - result.update (__list (base + '.' + sub, identifier, try_to_init, False)) - return result + # List all submodules + result = {} + for sub in __modules(m, False): + result.update(__list(base + '.' + sub, identifier, try_to_init, False)) + return result # ----------------------------------------------------------------------------- @@ -270,42 +273,42 @@ # with the exceptions that occured # ----------------------------------------------------------------------------- -def __first (base, identifier): +def __first(base, identifier): - global __failed + global __failed - if __failed.has_key (base): - # This has already failed in previous attempt - return {base: __failed [base]} + if __failed.has_key(base): + # This has already failed in previous attempt + return {base: __failed[base]} - try: - m = __import__ (base, None, None, '*') - except: - __failed [base] = sys.exc_info () - return {base: __failed [base]} + try: + m = __import__(base, None, None, '*') + except: + __failed[base] = sys.exc_info() + return {base: __failed[base]} - if hasattr (m, '__noplugin__'): - # This is not a plugin, ignore it - return {} + if hasattr(m, '__noplugin__'): + # This is not a plugin, ignore it + return {} - if hasattr (m, identifier): - # This is already a plugin, no need to go deeper - if hasattr (m, '__initplugin__'): - try: - m.__initplugin__ () - except: - __failed [base] = sys.exc_info () - return {base: __failed [base]} - return m + if hasattr(m, identifier): + # This is already a plugin, no need to go deeper + if hasattr(m, '__initplugin__'): + try: + m.__initplugin__() + except: + __failed[base] = sys.exc_info() + return {base: __failed[base]} + return m - # Search all submodules - exceptions = {} - for sub in __modules (m, False): - result = __first (base + '.' + sub, identifier) - if isinstance (result, ModuleType): - return result - exceptions.update (result) - return exceptions + # Search all submodules + exceptions = {} + for sub in __modules(m, False): + result = __first(base + '.' + sub, identifier) + if isinstance(result, ModuleType): + return result + exceptions.update(result) + return exceptions # ----------------------------------------------------------------------------- @@ -313,50 +316,50 @@ # occured # ----------------------------------------------------------------------------- -def __find (base, name, identifier): +def __find(base, name, identifier): - if __failed.has_key (base): - # This has already failed in previous attempt - return {base: __failed [base]} + if __failed.has_key(base): + # This has already failed in previous attempt + return {base: __failed[base]} - try: - m = __import__ (base, None, None, '*') - except: - __failed [base] = sys.exc_info () - return {base: __failed [base]} + try: + m = __import__(base, None, None, '*') + except: + __failed[base] = sys.exc_info() + return {base: __failed[base]} - if hasattr (m, '__noplugin__'): - # This is not a plugin, ignore it - return {} + if hasattr(m, '__noplugin__'): + # This is not a plugin, ignore it + return {} - # Is the searched driver an alias of this module? - if hasattr (m, '__pluginalias__'): - if name in m.__pluginalias__: - return __first (base, identifier) + # Is the searched driver an alias of this module? + if hasattr(m, '__pluginalias__'): + if name in m.__pluginalias__: + return __first(base, identifier) - if __failed.has_key (base + '.' + name): - # This has already failed in previous attempt - return {base + '.' + name: __failed [base + '.' + name]} + if __failed.has_key(base + '.' + name): + # This has already failed in previous attempt + return {base + '.' + name: __failed[base + '.' + name]} - try: - m = __import__ (base + '.' + name, None, None, '*') - except ImportError: - pass - except: - __failed [base + '.' + name] = sys.exc_info () - return {base + '.' + name: __failed [base + '.' + name]} - else: - return __first (base + '.' + name, identifier) + try: + m = __import__(base + '.' + name, None, None, '*') + except ImportError: + pass + except: + __failed[base + '.' + name] = sys.exc_info() + return {base + '.' + name: __failed[base + '.' + name]} + else: + return __first(base + '.' + name, identifier) - # Search all submodules - exceptions = {} - for sub in __modules (m, False): - result = __find (base + '.' + sub, name, identifier) - if isinstance (result, ModuleType): - return result - exceptions.update (result) + # Search all submodules + exceptions = {} + for sub in __modules(m, False): + result = __find(base + '.' + sub, name, identifier) + if isinstance(result, ModuleType): + return result + exceptions.update(result) - return exceptions + return exceptions # ============================================================================= @@ -365,81 +368,81 @@ if __name__ == '__main__': - base = 'gnue.common.datasources.drivers' + base = 'gnue.common.datasources.drivers' - if len (sys.argv) == 1: + if len(sys.argv) == 1: - # List all modules - for (name, result) in (list (base, 'Connection')).items (): - print name [len(base)+1:] + ":", - if isinstance (result, ModuleType): - print "ok" - else: - list = traceback.format_exception_only (result [0], result [1]) - print string.join (list, ''), + # List all modules + for (name, result) in(list(base, 'Connection')).items(): + print name[len(base)+1:] + ":", + if isinstance(result, ModuleType): + print "ok" + else: + list = traceback.format_exception_only(result[0], result[1]) + print string.join(list, ''), - elif sys.argv [1] == 'test': + elif sys.argv[1] == 'test': - try: - print 'find "postgresql.popy":', - m = find ('postgresql.popy', base, 'Connection') - print m.__name__ - except LoadError, e: - print e - print "Detail:" - print o(e.detail), + try: + print 'find "postgresql.popy":', + m = find('postgresql.popy', base, 'Connection') + print m.__name__ + except LoadError, e: + print e + print "Detail:" + print o(e.detail), - print + print - try: - print 'find "pygresql":', - m = find ('pygresql', base, 'Connection') - print m.__name__ - except LoadError, e: - print e - print "Detail:" - print o(e.detail), + try: + print 'find "pygresql":', + m = find('pygresql', base, 'Connection') + print m.__name__ + except LoadError, e: + print e + print "Detail:" + print o(e.detail), - print + print - try: - print 'find "mysql":', - m = find ('mysql', base, 'Connection') - print m.__name__ - except LoadError, e: - print e - print "Detail:" - print o(e.detail), + try: + print 'find "mysql":', + m = find('mysql', base, 'Connection') + print m.__name__ + except LoadError, e: + print e + print "Detail:" + print o(e.detail), - print + print - try: - print 'find "oracle":', - m = find ('oracle', base, 'Connection') - print m.__name__ - except LoadError, e: - print e - print "Detail:" - print o(e.detail), + try: + print 'find "oracle":', + m = find('oracle', base, 'Connection') + print m.__name__ + except LoadError, e: + print e + print "Detail:" + print o(e.detail), - print + print - try: - print 'find "nonexistent":', - m = find ('nonexistent', base, 'Connection') - print m.__name__ - except LoadError, e: - print e - print "Detail:" - print o(e.detail), + try: + print 'find "nonexistent":', + m = find('nonexistent', base, 'Connection') + print m.__name__ + except LoadError, e: + print e + print "Detail:" + print o(e.detail), - else: + else: - try: - print 'find %s:' % sys.argv [1], - m = find (sys.argv [1], base, 'Connection') - print m.__name__ - except LoadError, e: - print e - print "Detail:" - print o(e.detail), + try: + print 'find %s:' % sys.argv[1], + m = find(sys.argv[1], base, 'Connection') + print m.__name__ + except LoadError, e: + print e + print "Detail:" + print o(e.detail), _______________________________________________ commit-gnue mailing list commit-gnue@gnu.org http://lists.gnu.org/mailman/listinfo/commit-gnue