[kupfer] core: Simplify plugin import procedure



commit af4beba189a34f299f3468498dd4d092ee14842c
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Mon Feb 8 20:58:47 2010 +0100

    core: Simplify plugin import procedure
    
    With a unified plugin package, we don't need a two-stage import
    procedure. We can simplify plugin importing, and plugin listin in
    get_plugin_ids()

 kupfer/core/plugins.py |   32 +++++++-------------------------
 1 files changed, 7 insertions(+), 25 deletions(-)
---
diff --git a/kupfer/core/plugins.py b/kupfer/core/plugins.py
index 131190d..297b019 100644
--- a/kupfer/core/plugins.py
+++ b/kupfer/core/plugins.py
@@ -1,7 +1,7 @@
 import os
 import pkgutil
-
 import sys
+
 from kupfer import pretty, config
 from kupfer import icons
 from kupfer.core import settings
@@ -31,19 +31,9 @@ def get_plugin_ids():
 	def is_plugname(plug):
 		return plug != "__init__" and not plug.endswith("_support")
 
-	plugin_ids = set()
 	for importer, modname, ispkg in pkgutil.iter_modules(plugin.__path__):
 		if is_plugname(modname):
-			plugin_ids.add(modname)
-
-	for plugin_dir in config.get_data_dirs("plugins"):
-		name = lambda f: os.path.splitext(f)[0]
-		try:
-			plugin_ids.update(name(f) for f in os.listdir(plugin_dir)
-					if is_plugname(name(f)))
-		except (OSError, IOError), exc:
-			pretty.print_error(__name__, exc)
-	return plugin_ids
+			yield modname
 
 class FakePlugin (object):
 	def __init__(self, plugin_id, attributes, exc_info):
@@ -247,24 +237,13 @@ def _import_plugin_true(name):
 	return plugin
 
 def _staged_import(name, import_hook):
-	"Import first from kupfer.plugin, then from plugins data directories"
+	"Import plugin @name using @import_hook"
 	plugin = None
 	try:
-		plugin = import_hook(("kupfer", "plugin", name))
+		plugin = import_hook(_plugin_path(name))
 	except ImportError, e:
 		if name not in e.args[0]:
 			raise
-
-	if not plugin:
-		oldpath = sys.path
-		try:
-			# Look in datadir kupfer/plugins for plugins
-			# (and in current directory)
-			extra_paths = list(config.get_data_dirs("plugins"))
-			sys.path = extra_paths + sys.path
-			plugin = import_hook((name,))
-		finally:
-			sys.path = oldpath
 	return plugin
 
 
@@ -286,6 +265,9 @@ def import_plugin_any(name):
 		return _imported_plugins[name]
 	return _staged_import(name, _import_hook_fake)
 
+def _plugin_path(name):
+	return ("kupfer", "plugin", name)
+
 
 # Plugin Attributes
 def get_plugin_attributes(plugin_name, attrs, warn=False):



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]