Advertisement
Fugiman

Untitled

May 13th, 2013
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.37 KB | None | 0 0
  1.     @defer.inlineCallbacks
  2.     def loadModules(self, filter=[], blacklist=False):
  3.         modules = {}
  4.         pending = []
  5.  
  6.         # Preserve some old modules if desired
  7.         if filter:
  8.             for name, module in self.modules.items():
  9.                 if (name not in filter and not blacklist) or (name in filter and blacklist):
  10.                     modules[name] = module
  11.                     del self.modules[name]
  12.  
  13.         # Kill old modules
  14.         deferreds = []
  15.         for module in self.modules.values():
  16.             deferreds.append(defer.maybeDeferred(module.stop))
  17.         yield defer.DeferredList(deferreds)
  18.  
  19.         # Copy over preserved modules
  20.         self.modules = modules
  21.  
  22.         # Find new modules
  23.         for loader, name, ispkg in pkgutil.iter_modules([self.moddir]):
  24.             if ispkg or name in modules or (filter and not blacklist and name not in filter):
  25.                 continue
  26.             try:
  27.                 module = getattr(__import__(self.moddir, fromlist=[name]), name)
  28.                 reload(module)
  29.                 pending.append((name, module))
  30.             except:
  31.                 self.err("Failed to import {}.{}", self.moddir, name)
  32.  
  33.         # Load new modules in order
  34.         while pending:
  35.             remaining = len(pending)
  36.             for name, module in pending:
  37.                 loadable = True
  38.                 for dependency in module.dependencies:
  39.                     if dependency not in modules:
  40.                         loadable = False
  41.                         break
  42.                 if not loadable:
  43.                     continue
  44.                 self.modules[name] = module.Module(self)
  45.                 self.modules[name].name = name.capitalize()
  46.                 self.modules[name].dependencies = module.dependencies
  47.                 self.modules[name].log = functools.partial(self.log, cls=name.capitalize())
  48.                 self.modules[name].err = functools.partial(self.err, cls=name.capitalize())
  49.                 self.modules[name].dispatch = functools.partial(self.dispatch, name)
  50.                 pending.remove((name, module))
  51.             if remaining == len(pending):
  52.                 unloaded = ", ".join([x[0] for x in pending])
  53.                 self.err("Dependency error occured. Failed to load: {}", unloaded)
  54.                 break
  55.         self.log("Loaded modules: {}", ", ".join(self.modules.keys()))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement