Index: third_party/twisted_8_1/twisted/python/plugin.py |
diff --git a/third_party/twisted_8_1/twisted/python/plugin.py b/third_party/twisted_8_1/twisted/python/plugin.py |
deleted file mode 100644 |
index 971d38907ad7aa2b6b9cc448597c5f95c742ca22..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/python/plugin.py |
+++ /dev/null |
@@ -1,332 +0,0 @@ |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
- |
-from __future__ import nested_scopes |
- |
-# System Imports |
-import sys |
-import os |
-import errno |
-import types |
-import warnings |
- |
-# Twisted imports |
-from twisted.python import util |
- |
-# Sibling Imports |
-from reflect import namedModule |
- |
-try: |
- from os.path import realpath as cacheTransform |
-except ImportError: |
- from os.path import abspath as cacheTransform |
- |
-class PlugIn: |
- """I am a Python module registered in a plugins.tml file. |
- """ |
- def __init__(self, name, module, **kw): |
- self.name = name |
- self.module = module |
- for key, value in kw.items(): |
- setattr(self, key, value) |
- |
- def isLoaded(self): |
- """Check to see if the module for this plugin has been imported yet. |
- |
- @rtype: C{int} |
- @return: A true value if the module for this plugin has been loaded, |
- false otherwise. |
- """ |
- return sys.modules.has_key(self.module) |
- |
- def load(self): |
- """Load the module for this plugin. |
- |
- @rtype: C{ModuleType} |
- @return: The module object that is loaded. |
- """ |
- return namedModule(self.module) |
- |
- def __repr__(self): |
- if self.isLoaded(): |
- loaded = ' loaded' |
- else: |
- loaded = '' |
- return "<Plugin %s %s%s>" % (repr(self.name), self.module, loaded) |
- |
-class DropIn: |
- """I am a Python package containing plugins.tml. |
- """ |
- def __init__(self, name): |
- self.name = name |
- self.plugins = [] |
- |
- def register(self, name, module, **kw): |
- """Register a new plug-in. |
- """ |
- warnings.warn("The twisted.python.plugin system is deprecated. " |
- "See twisted.plugin for the revised edition.", |
- DeprecationWarning, 2) |
- self.plugins.append(PlugIn(name, module, **kw)) |
- |
- def __repr__(self): |
- return "<Package %s %s>" % (self.name, self.plugins) |
- |
- |
-def _prepCallbacks(debug, progress): |
- if debug: |
- try: |
- debug('Looking for plugin.tml files') |
- except: |
- debug = lambda x: sys.stdout.write(x + '\n') |
- debug('Looking for plugin.tml files') |
- else: |
- debug = lambda x: None |
- if progress: |
- try: |
- progress(0.0) |
- except: |
- pb = util.makeStatusBar(76) |
- progress = lambda x, pb=pb: sys.stdout.write(pb(x) + '\r') |
- progress(0.0) |
- else: |
- progress = lambda x: None |
- return debug, progress |
- |
-def getPluginFileList(debugInspection=None, showProgress=None): |
- """Find plugin.tml files in subdirectories of paths in C{sys.path} |
- |
- @type debugInspection: C{None} or a callable taking one argument |
- @param debugInspection: If not None, this is invoked with strings containing |
- debug information about the loading process. If it is any other true value, |
- this debug information is written to stdout (This behavior is deprecated). |
- |
- @type showProgress: C{None} or a callable taking one argument. |
- @param showProgress: If not None, this is invoked with floating point |
- values between 0 and 1 describing the progress of the loading process. |
- If it is any other true value, this progress information is written to |
- stdout. (This behavior is deprecated). |
- |
- @rtype: C{list} of C{str} |
- @return: A list of the plugin.tml files found. |
- """ |
- if isinstance(debugInspection, types.IntType): |
- warnings.warn( |
- "int parameter for debugInspection is deprecated, pass None or " |
- "a function that takes a single argument instead.", |
- DeprecationWarning, 2 |
- ) |
- if isinstance(showProgress, types.IntType): |
- warnings.warn( |
- "int parameter for showProgress is deprecated, pass None or " |
- "a function that takes a single argument instead.", |
- DeprecationWarning, 2 |
- ) |
- debugInspection, showProgress = _prepCallbacks(debugInspection, showProgress) |
- exists = os.path.exists |
- join = os.sep.join |
- result = [] |
- loaded = {} |
- seenNames = {} |
- |
- # XXX Some people claim to have found non-strings in sys.path (an empty |
- # list, in particular). Instead of tracking down the cause for their |
- # presence, they decided it was better to discard them unconditionally |
- # without further investigation. At some point, someone should track |
- # down where non-strings are coming from and do something about them. |
- paths = [cacheTransform(p) for p in sys.path |
- if isinstance(p, str) and os.path.isdir(p)] |
- |
- # special case for commonly used directories we *know* shouldn't be checked |
- # and really slow down mktap and such-like in real installations |
- for p in ("/usr/bin", "/usr/local/bin"): |
- try: |
- paths.remove(p) |
- except ValueError: |
- pass |
- progress = 0.0 |
- increments = 1.0 / len(paths) |
- |
- for (index, d) in zip(range(len(paths)), paths): |
- showProgress(progress) |
- if loaded.has_key(d): |
- debugInspection('Already saw ' + d) |
- continue |
- else: |
- debugInspection('Recursing through ' + d) |
- try: |
- subDirs = os.listdir(d) |
- except OSError, (err, s): |
- # Permission denied, carry on |
- if err == errno.EACCES: |
- debugInspection('Permission denied on ' + d) |
- else: |
- raise |
- else: |
- # filter out files we obviously don't need to check - ones with '.' in them |
- subDirs = [s for s in subDirs if "." not in s] |
- if not subDirs: |
- continue |
- incr = increments * (1.0 / len(subDirs)) |
- for plugindir in subDirs: |
- if seenNames.has_key(plugindir): |
- debugInspection('Seen %s already' % plugindir) |
- continue |
- tmlname = join((d, plugindir, "plugins.tml")) |
- if isAModule(join((d,plugindir))): |
- seenNames[plugindir] = 1 |
- if exists(tmlname): |
- result.append(tmlname) |
- debugInspection('Found ' + tmlname) |
- else: |
- debugInspection('Failed ' + tmlname) |
- else: |
- debugInspection('Not a module ' + tmlname) |
- progress = progress + incr |
- showProgress(progress) |
- |
- showProgress(1.0) |
- return result |
- |
-def loadPlugins(plugInType, fileList, debugInspection=None, showProgress=None): |
- """Traverse the given list of files and attempt to load plugins from them. |
- |
- @type plugInType: C{str} |
- @param plugInType: The type of plugin to search for. This is tested |
- against the C{type} argument to the C{register} function in the |
- plugin.tml files. |
- |
- @type fileList: C{list} of C{str} |
- @param fileList: A list of the files to attempt to load plugin |
- information from. One name is put in their scope, the C{register} |
- function. |
- |
- @type debugInspection: C{None} or a callable taking one argument |
- @param debugInspection: If not None, this is invoked with strings containing |
- debug information about the loading process. If it is any other true value, |
- this debug information is written to stdout (This behavior is deprecated). |
- |
- @type showProgress: C{None} or a callable taking one argument. |
- @param showProgress: If not None, this is invoked with floating point |
- values between 0 and 1 describing the progress of the loading process. |
- If it is any other true value, this progress information is written to |
- stdout. (This behavior is deprecated). |
- |
- @rtype: C{list} |
- @return: A list of the C{PlugIn} objects found. |
- """ |
- if isinstance(debugInspection, types.IntType): |
- warnings.warn( |
- "int parameter for debugInspection is deprecated, pass None or " |
- "a function that takes a single argument instead.", |
- DeprecationWarning, 4 |
- ) |
- if isinstance(showProgress, types.IntType): |
- warnings.warn( |
- "int parameter for showProgress is deprecated, pass None or " |
- "a function that takes a single argument instead.", |
- DeprecationWarning, 4 |
- ) |
- result = [] |
- debugInspection, showProgress = _prepCallbacks(debugInspection, showProgress) |
- |
- if not fileList: |
- raise ValueError("No plugins passed to loadPlugins") |
- |
- increments = 1.0 / len(fileList) |
- progress = 0.0 |
- |
- for (index, tmlFile) in zip(range(len(fileList)), fileList): |
- showProgress(progress) |
- debugInspection("Loading from " + tmlFile) |
- pname = os.path.split(os.path.abspath(tmlFile))[-2] |
- dropin = DropIn(pname) |
- ns = {'register': dropin.register, '__file__': tmlFile} |
- try: |
- execfile(tmlFile, ns) |
- except (IOError, OSError), e: |
- # guess we don't have permissions for that |
- debugInspection("Error loading: %s" % e) |
- continue |
- |
- ldp = len(dropin.plugins) or 1.0 |
- incr = increments * (1.0 / ldp) |
- for plugin in dropin.plugins: |
- if plugInType == plugin.type: |
- result.append(plugin) |
- debugInspection("Found %r" % (plugin,)) |
- else: |
- debugInspection("Disqualified %r" % (plugin,)) |
- progress = progress + incr |
- showProgress(progress) |
- debugInspection("Finished loading from %s!" % tmlFile) |
- |
- showProgress(1.0) |
- debugInspection("Returning %r" % (result,)) |
- return result |
- |
-def getPlugIns(plugInType, debugInspection=None, showProgress=None): |
- """Helper function to get all the plugins of a particular type. |
- |
- @type plugInType: C{str} |
- @param plugInType: The type of plugin to search for. This is tested |
- against the C{type} argument to the C{register} function in the |
- plugin.tml files. |
- |
- @type debugInspection: C{None} or a callable taking one argument |
- @param debugInspection: If not None, this is invoked with strings containing |
- debug information about the loading process. If it is any other true value, |
- this debug information is written to stdout (This behavior is deprecated). |
- |
- @type showProgress: C{None} or a callable taking one argument. |
- @param showProgress: If not None, this is invoked with floating point |
- values between 0 and 1 describing the progress of the loading process. |
- If it is any other true value, this progress information is written to |
- stdout. (This behavior is deprecated). |
- |
- @rtype: C{list} |
- @return: A list of C{PlugIn} objects that were found. |
- """ |
- warnings.warn("The twisted.python.plugin system is deprecated. " |
- "See twisted.plugin for the revised edition.", |
- DeprecationWarning, 2) |
- return _getPlugIns(plugInType, debugInspection, showProgress) |
- |
-def _getPlugIns(plugInType, debugInspection=None, showProgress=None): |
- if isinstance(debugInspection, types.IntType): |
- warnings.warn( |
- "int parameter for debugInspection is deprecated, pass None or " |
- "a function that takes a single argument instead.", |
- DeprecationWarning, 3 |
- ) |
- if isinstance(showProgress, types.IntType): |
- warnings.warn( |
- "int parameter for showProgress is deprecated, pass None or " |
- "a function that takes a single argument instead.", |
- DeprecationWarning, 3 |
- ) |
- debugInspection, showProgress = _prepCallbacks(debugInspection, showProgress) |
- |
- firstHalf = secondHalf = lambda x: None |
- if showProgress: |
- firstHalf = lambda x: showProgress(x / 2.0) |
- secondHalf = lambda x: showProgress(x / 2.0 + 0.5) |
- |
- tmlFiles = getPluginFileList(debugInspection, firstHalf) |
- if not tmlFiles: |
- return [] |
- return loadPlugins(plugInType, tmlFiles, debugInspection, secondHalf) |
- |
-def isAModule(d): |
- """This function checks the directory for __init__ files. |
- """ |
- suffixes = ['py', 'pyc', 'pyo', 'so', 'pyd', 'dll'] |
- exists = os.path.exists |
- join = os.sep.join |
- for s in suffixes: # bad algorithm, but probably works |
- if exists(join((d,'__init__.%s' % s))): |
- return 1 |
- return 0 |
- |
-__all__ = ['PlugIn', 'DropIn', 'getPluginFileList', 'loadPlugins', 'getPlugIns'] |