Re: 3 aap suggestions

Pavol Juhas <[email protected]> Sat, 26 Nov 2005 20:18:07 -0500
Newsgroups gmane.comp.tools.aap.devel
Message-ID <[email protected]>
--jI8keyz6grp/JLjh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Sorry, I forgot to attach patch.

Pavol

--jI8keyz6grp/JLjh
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="usetoolsearch.patch"

Index: Commands.py
===================================================================
RCS file: /cvsroot/a-a-p/Exec/Commands.py,v
retrieving revision 1.129
diff -u -r1.129 Commands.py
--- Commands.py	12 Aug 2005 10:30:17 -0000	1.129
+++ Commands.py	27 Nov 2005 01:07:31 -0000
@@ -21,6 +21,7 @@
 import string
 import copy
 import glob
+import imp
 
 from Depend import Depend
 from Dictlist import str2dictlist, get_attrdict, list2str, dictlist2str
@@ -2602,21 +2603,25 @@
     if optiondict:
         option_error(rpstack, optiondict, ":toolsearch")
 
-    sys_path_save = sys.path
-    try:
-        # Only import "tools.name" from specific directories.
-        sys.path = get_import_dirs(recdict)
-        didone = 0
-        for a in args:
-            c = a["name"]
-            exec "import tools.%s" % c
-            if eval("tools.%s.exists()" % c):
-                exec "tools.%s.define_actions()" % c
-                if not didone:
-                    didone = 1
-                    exec "tools.%s.use_actions(recdict['_top'])" % c
-    finally:
-        sys.path = sys_path_save
+    # only import "name" from tools directories
+    tools_path = [ os.path.join(d, "tools") 
+                   for d in get_import_dirs(recdict) ]
+    didone = 0
+    for a in args:
+        c = a["name"]
+        try:
+            fpd = imp.find_module(c, tools_path)
+        except ImportError:
+            # tool not found, try to find another
+            continue
+        exec "tools_%s = imp.load_module(c, *fpd)" % c
+        if eval("tools_%s.exists()" % c):
+            exec "tools_%s.define_actions()" % c
+            if not didone:
+                didone = 1
+                exec "tools_%s.use_actions(recdict['_top'])" % c
+    if not didone:
+        raise ImportError, ":toolsearch - unable to find any tool"
 
 
 def maydo_recipe_cmd(rpstack):
@@ -3050,20 +3055,18 @@
         recipe_error(rpstack, _(':usetool requires one argument'))
 
     toolname = args[0]["name"]
-    sys_path_save = sys.path
     try:
-        try:
-            # Only import "tools.name" from specific directories.
-            sys.path = get_import_dirs(recdict)
-            exec "import tools.%s" % toolname
-        finally:
-            sys.path = sys_path_save
+        # Only import "tools_name" module from specific directories.
+        tools_path = [ os.path.join(d, "tools") 
+                       for d in get_import_dirs(recdict) ]
+        fpd = imp.find_module(toolname, tools_path)
+        exec "tools_%s = imp.load_module(toolname, *fpd)" % toolname
     except:
         recipe_error(rpstack, _('Tool "%s" is not supported') % toolname)
 
-    if eval("tools.%s.exists()" % toolname):
-        exec "tools.%s.define_actions()" % toolname
-        exec "tools.%s.use_actions(recdict)" % toolname
+    if eval("tools_%s.exists()" % toolname):
+        exec "tools_%s.define_actions()" % toolname
+        exec "tools_%s.use_actions(recdict)" % toolname
     else:
         recipe_error(rpstack, _('Tool "%s" cannot be found on the system')
                                                                     % toolname)

--jI8keyz6grp/JLjh--


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click