oops, one fragment had been oversimplified when porting to python3
[myplc.git] / bin / db-config
index e2e2c12..eb936c9 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env /usr/bin/plcsh
+#!/usr/bin/plcsh
 #
 # Bootstraps the PLC database with a default administrator account and
 # a default site, defines default slice attribute types, and
 # Copyright (C) 2006 The Trustees of Princeton University
 # Thierry Parmentelat <thierry.parmentelat@inria.fr>
 #
+# to run with options, do e.g.
+# db-config -- -l
 
-import os,sys
-from optparse import OptionParser
+import os
+import sys
+from argparse import ArgumentParser
 
 from plc_config import PLCConfiguration
 
+
 def GetSnippets(directory):
     filenames = []
     if os.path.exists(directory):
         try:
             filenames = os.listdir(directory)
-        except OSError, e:
-            raise Exception, "Error when opening %s (%s)" % \
-                  (os.path.join(dir, file), e)
-            
+        except OSError as e:
+            raise Exception("Error when opening %s (%s)" %
+                            (os.path.join(dir, file), e))
+
     # ignore files that contain either ~ or .
-    ignore_tokens = ("~",".")
+    ignore_tokens = ("~", ".")
     numberedfiles = {}
     for filename in filenames:
         ignore = False
         for token in ignore_tokens:
-            if filename.find(token)>=0:
+            if filename.find(token) >= 0:
                 ignore = True
                 break
 
         if not ignore:
             parts = filename.split('-')
-            if len(parts)>=2:
+            if len(parts) >= 2:
                 name = '-'.join(parts)
                 try:
                     number = int(parts[0])
-                    entry = numberedfiles.get(number,[])
+                    entry = numberedfiles.get(number, [])
                     entry.append(name)
-                    numberedfiles[number]=entry
+                    numberedfiles[number] = entry
                 except ValueError:
                     ignore = True
             else:
                 ignore = True
 
         if ignore:
-            print "db-config: ignored %s snippet" % filename
+            print("db-config: ignored %s snippet" % filename)
 
     filenames = []
-    keys = numberedfiles.keys()
+    keys = list(numberedfiles.keys())
     keys.sort()
     for k in keys:
         for filename in numberedfiles[k]:
             filenames.append(filename)
     return filenames
 
+
 def main():
     cfg = PLCConfiguration()
     cfg.load()
     variables = cfg.variables()
 
-    usage="%prog [-- options] [steps]"
-    release_url = "$URL$"
-    parser = OptionParser(usage=usage, version="%prog " + release_url )
-    parser.add_option("-l","--list",dest="list_steps",action="store_true",default=False,
-                      help="Lists available steps")
-    parser.add_option("-v","--verbose",dest="verbose",action="store_true",default=False,
-                      help="Run verbosely")
+    usage = "%prog [-- options] [steps]"
+
+    parser = ArgumentParser(usage=usage)
+    parser.add_argument(
+        "-l", "--list",
+        dest="list_steps", action="store_true", default=False,
+        help="Lists available steps")
+    parser.add_argument(
+        "-v", "--verbose",
+        dest="verbose", action="store_true", default=False,
+        help="Run verbosely")
+    parser.add_argument('steps', nargs='*')
+
+    args = parser.parse_args()
+
+    globals_exec = globals().copy()
+    locals_exec = {}
 
-    (options,steps) = parser.parse_args()
-    
     # Load variables into dictionaries
-    for category_id, (category, variablelist) in variables.iteritems():
-        globals()[category_id] = dict(zip(variablelist.keys(),
-                                          [variable['value'] for variable in variablelist.values()]))
+    for category_id, (category, variablelist) in variables.items():
+        globals_exec[category_id] = dict(
+            zip(variablelist.keys(),
+            [variable['value'] for variable in variablelist.values()]))
 
-    directory="/etc/planetlab/db-config.d"
+    directory = "/etc/planetlab/db-config.d"
     snippets = GetSnippets(directory)
 
+    steps = args.steps
+
     for snippet in snippets:
-        
-        selected=False
+
+        selected = False
         # no steps provided on the command-line : run them all
         if not steps:
-            selected=True
+            selected = True
         else:
             for step in steps:
-                if snippet.find (step)>=0 : selected=True
-        if not selected: 
+                if snippet.find(step) >= 0:
+                    selected = True
+        if not selected:
             continue
-        
-        if options.list_steps:
-            if not options.verbose: 
-                print snippet
-            else: 
-                print "Found step %s/%s"%(directory,snippet)
-                os.system("rpm -qf %s/%s"%(directory,snippet))
+
+        if args.list_steps:
+            if not args.verbose:
+                print(snippet)
+            else:
+                print("Found step %s/%s" % (directory, snippet))
+                os.system("rpm -qf %s/%s" % (directory, snippet))
             continue
 
         fullpath = os.path.join(directory, snippet)
-        if options.verbose:
-            print "Running step %s"%fullpath
-        execfile(fullpath)
+        if args.verbose:
+            print("Running step %s" % fullpath)
+        with open(fullpath) as feed:
+            exec(feed.read(), globals_exec, locals_exec)
+
 
 if __name__ == '__main__':
     main()
-
-# Local variables:
-# tab-width: 4
-# mode: python
-# End: