Forráskód Böngészése

g.extension: implemenent flags combination -ag to print installed extension in shell script style (useful in wxGUI)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@67901 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 9 éve
szülő
commit
342b3f5580
1 módosított fájl, 43 hozzáadás és 5 törlés
  1. 43 5
      scripts/g.extension/g.extension.py

+ 43 - 5
scripts/g.extension/g.extension.py

@@ -120,7 +120,8 @@
 
 #%rules
 #% required: extension, -l, -c, -g, -a
-#% exclusive: extension, -l, -c, -g, -a
+#% exclusive: extension, -l, -c, -g
+#% exclusive: extension, -l, -c, -a
 #%end
 
 # TODO: solve addon-extension(-module) confusion
@@ -303,7 +304,17 @@ def get_installed_modules(force=False):
         return []
     ret = list()
     for tnode in tree.findall('task'):
-        ret.append(tnode.get('name').strip())
+        if flags['g']:
+            desc, keyw = get_optional_params(tnode)
+            ret.append('name={}'.format(tnode.get('name').strip()))
+            ret.append('description={}'.format(desc))
+            ret.append('keywords={}'.format(keyw))
+            ret.append('bin={}'.format(','.join(
+                get_module_executables(tnode))
+            ))
+        else:
+            ret.append(tnode.get('name').strip())
+    
     return ret
 
 # list extensions (read XML file from grass.osgeo.org/addons)
@@ -381,6 +392,34 @@ def get_toolbox_modules(url, name):
 
     return tlist
 
+def get_module_files(mnode):
+    """Return list of module files
+
+    :param mnode: XML node for a module
+    """
+    flist = []
+    for file_node in mnode.find('binary').findall('file'):
+        filepath = file_node.text
+        flist.append(filepath)
+
+    return flist
+
+def get_module_executables(mnode):
+    """Return list of module executables
+
+    :param mnode: XML node for a module
+    """
+    flist = []
+    for filepath in get_module_files(mnode):
+        if filepath.startswith(options['prefix'] + os.path.sep + 'bin') or \
+           (sys.platform != 'win32' and \
+            filepath.startswith(options['prefix'] + os.path.sep + 'scripts')):
+            filename = os.path.basename(filepath)
+            if sys.platform == 'win32':
+                filename = os.path.splitext(filename)[0]
+            flist.append(filename)
+    
+    return flist
 
 def get_optional_params(mnode):
     """Return description and keywords as a tuple
@@ -1217,8 +1256,7 @@ def remove_modules(mlist, force=False):
             for task in tree.findall('task'):
                 if name == task.get('name') and \
                         task.find('binary') is not None:
-                    for file_node in task.find('binary').findall('file'):
-                        flist.append(file_node.text)
+                    flist = get_module_files(task)
                     break
 
             if flist:
@@ -1639,7 +1677,7 @@ def main():
                                                to_system=flags['s'])
 
     # list available extensions
-    if flags['l'] or flags['c'] or flags['g']:
+    if flags['l'] or flags['c'] or (flags['g'] and not flags['a']):
         # using dummy module, we don't need any module URL now,
         # but will work only as long as the function does not check
         # if the URL is actually valid or something