[Erp5-report] r45961 arnaud.fontaine - in /slapos/trunk/util/slapos.tool.nosqltester_manage...

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Jul 4 13:57:40 CEST 2011


Author: arnaud.fontaine
Date: Mon Jul  4 13:57:40 2011
New Revision: 45961

URL: http://svn.erp5.org?rev=45961&view=rev
Log:
Use argparse rather than getopt

Modified:
    slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py
    slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py

Modified: slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py?rev=45961&r1=45960&r2=45961&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/setup.py [utf8] Mon Jul  4 13:57:40 2011
@@ -12,6 +12,13 @@ long_description=( read('README.txt')
                    read('CHANGES.txt')
                  )
 
+install_require_list = ['setuptools', 'Flask']
+
+import sys
+python_major_version, python_minor_version = sys.version_info[:2]
+if python_major_version == 2 and python_minor_version < 7:
+  install_require_list.append('argparse')
+
 setup(
     name = name,
     version = version,
@@ -27,7 +34,7 @@ setup(
     packages = find_packages('src'),
     include_package_data = True,
     package_dir = {'':'src'},
-    install_requires = ['setuptools', 'Flask'],
+    install_requires = install_require_list,
     namespace_packages = ['slapos', 'slapos.tool'],
     zip_safe = False,
     entry_points = """

Modified: slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py
URL: http://svn.erp5.org/slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py?rev=45961&r1=45960&r2=45961&view=diff
==============================================================================
--- slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py [utf8] (original)
+++ slapos/trunk/util/slapos.tool.nosqltester_manager/src/slapos/tool/nosqltester_manager/__init__.py [utf8] Mon Jul  4 13:57:40 2011
@@ -27,16 +27,23 @@
 #
 ##############################################################################
 
-from flask import Flask, abort, request, render_template, send_file
+from flask import Flask, request, render_template, send_file
 from pkg_resources import iter_entry_points, get_distribution
 from logging import Formatter
 from threading import Thread
-import sys, os, getopt, tarfile, tempfile, bz2
-import logging, logging.handlers
-import urllib, urllib2
-import time
 from slapos import slap
 
+import sys
+import os
+import tarfile
+import tempfile
+import bz2
+import logging
+import urllib
+import urllib2
+import time
+import argparse
+
 class NoSQLTesterManager(object):
   """
   NoSQLTesterManager class.
@@ -52,7 +59,7 @@ class NoSQLTesterManager(object):
     .. note::
     
       The params dictionnary should contains the following values:
-      address, port, report_path, server_url, nb_server_max,
+      address, port, report_directory, server_url, nb_server_max,
       nb_tester_max, key_file, cert_file, computer_id,
       computer_partition_id, plugin_name, debug
       
@@ -61,19 +68,18 @@ class NoSQLTesterManager(object):
       You may need to override this method in an inheritance class.
       
     """
-    
-    self.log_directory = params['report_path']
+    self.log_directory = params['report_directory']
     self.work_directory = os.path.split(os.path.split(self.log_directory)[0])[0]
     self.tmp_directory = os.path.join(self.work_directory, 'tmp')
     self.tester_urls = []
     self.testers_status = []
     self.todo = 0
     self.reports = []
-    self.nb_init_server = int(params['nb_server_init'])
-    self.nb_init_tester = int(params['nb_tester_init'])
-    self.max_server = int(params['nb_server_max'])
-    self.max_tester = int(params['nb_tester_max'])
-    self.node_increment = int(params['node_increment'])
+    self.nb_init_server = params['nb_server_init']
+    self.nb_init_tester = params['nb_tester_init']
+    self.max_server = params['nb_server_max']
+    self.max_tester = params['nb_tester_max']
+    self.node_increment = params['node_increment']
     self.software_release_url = params['software_release_url']
     self.server_url = params['server_url']
     self.key_file = params['key_file']
@@ -108,7 +114,6 @@ class NoSQLTesterManager(object):
       The *_<plugin_name>_init* must be defined the plugin
       named *<plugin_name>*.
     """
-    
     if self.software_release_type == None:
       pass
     elif "_%s_init" % self.software_release_type in dir(self) and \
@@ -127,7 +132,6 @@ class NoSQLTesterManager(object):
       The *_add_<plugin_name>_<node_type>_node* should be defined the plugin
       named *<plugin_name>*.
     """
-    
     function_name = "_add_%s_%s_node" % (self.software_release_type,  self.node_type)
     
     if self.software_release_type == None:
@@ -141,14 +145,12 @@ class NoSQLTesterManager(object):
     """
     Set a pipe to make the HTTP server
     """
-    
     self.write_pipe = write_pipe
 
   def get(self, url):
     """
     Gets the contents of an url.
     """
-    
     f = urllib2.urlopen(url)
     f.close()
 
@@ -162,7 +164,6 @@ class NoSQLTesterManager(object):
     :type values: dict.
     
     """
-    
     try:
       data = urllib.urlencode(values)
       f = urllib2.urlopen(url, data)
@@ -179,7 +180,6 @@ class NoSQLTesterManager(object):
     :type action: str.
     
     """
-    
     for i in range(0, self.tester_urls.__len__()):
       while not self.post(self.tester_urls[i]+'/action', action=action):
         time.sleep(1)
@@ -223,7 +223,6 @@ class NoSQLTesterManager(object):
       
       :returns: the UI's webpage.
       """
-      
       web_page = None
       manager_url = 'http://'+"[%s]" % host_parameter_kw['host']+':5000/'
       try:
@@ -252,7 +251,6 @@ class NoSQLTesterManager(object):
       
       :returns: the UI's webpage.
       """
-      
       try:
         if tester == "all":
           self.do_scheduling('STOP')
@@ -274,7 +272,6 @@ class NoSQLTesterManager(object):
       :returns: the *report* file.
       
       """
-      
       try:
         if report == "all.tar.bz2":
           tmp = tempfile.NamedTemporaryFile(dir=self.tmp_directory)
@@ -359,7 +356,6 @@ class NoSQLTesterManager(object):
     The :class:`NoSQLTesterManager`'s method does nothing.
     This method should be overridden by an inheritance plugin.
     """
-    
     pass
 
 def scheduler_thread(scheduler, read):
@@ -391,13 +387,6 @@ def go(params):
   
   scheduler.waitForReports(host=params['address'], port=params['port'])
 
-def usage():
-  """
-  Print usage.
-  """
-  
-  pass
-
 def main(argv=None):
   """
   Main function. It's the entry point for this program.
@@ -406,77 +395,50 @@ def main(argv=None):
   :type argv: list.
   
   """
-  
-  # Default values
-  params = {
-    'address':"127.0.0.1",
-    'port':5000,
-    'report_path':"/var/log",
-    'server_url':None,
-    'nb_server_max':3,
-    'nb_tester_max':3,
-    'nb_server_init':1,
-    'nb_tester_init':3,
-    'node_increment':1,
-    'key_file':None,
-    'cert_file':None,
-    'computer_id':None,
-    'computer_partition_id':None,
-    'plugin_name':'kumo',
-    # 'debug':False}
-    'debug':True}
-
-  # FIXME: Hack to make the flask's render_template method work with packages plugins
-  sys.modules[__name__].__file__ = get_distribution(__name__).location + '/slapos/tool/nosqltester_manager/__init__.pyc'
-
-  if argv == None:
-    argv = sys.argv[1:]
-
-  try:
-    opts, args = getopt.getopt(argv, "a:dp:r:s:t:i:n:m:", \
-                                    ["address=", "debug", "port=", "report-path=", \
-                                     "nb-server-max=", "nb-tester-max=", "node-increment=", \
-                                     "nb-server-init=", "nb-tester-init="])
-  except getopt.GetoptError, e:
-    print >>sys.stderr, "ERROR: Error while parsing arguments: %s" % str(e)
-    usage()
-    sys.exit(1)
-
-  for opt, arg in opts:
-    if opt in ("-a", "--address"):
-      params['address'] = arg
-    elif opt in ("-d", "--debug"):
-      params['debug'] = True
-    elif opt in ("-p", "--port"):
-      params['port'] = int(arg)
-    elif opt in ("-r", "--report-path"):
-      params['report_path'] = arg
-    elif opt in ("-s", "--nb-server-max"):
-      params['nb_server_max'] = arg
-    elif opt in ("-t", "--nb-tester-max"):
-      params['nb_tester_max'] = arg
-    elif opt in ("-n", "--nb-server-init"):
-      params['nb_server_init'] = arg
-    elif opt in ("-m", "--nb-tester-init"):
-      params['nb_tester_init'] = arg
-    elif opt in ("-i", "--node-increment"):
-      params['node_increment'] = arg
-
-  if args.__len__() < 7:
-    print >>sys.stderr, "ERROR: Not enough arguments given"
-    usage()
-    sys.exit(1)
-
-  params['software_release_url'] = args[0]
-  params['server_url'] = args[1]
-  params['key_file'] = args[2]
-  params['cert_file'] = args[3]
-  params['computer_id'] = args[4]
-  params['computer_partition_id'] = args[5]
-  params['plugin_name'] = args[6]
+  # FIXME: Hack to make the  flask's render_template method work with packages
+  # plugins
+  sys.modules[__name__].__file__ = get_distribution(__name__).location + \
+                        '/slapos/tool/nosqltester_manager/__init__.pyc'
+
+  parser = argparse.ArgumentParser(description='',
+                                   conflict_handler='resolve')
+
+  parser.add_argument('--address', '-a', default='127.0.0.1',
+                      help='Manager IP address')
+
+  parser.add_argument('--port', '-p', type=int, default=5000,
+                      help='Manager port')
+
+  parser.add_argument('--debug', '-d', type=bool, default=True,
+                      help='Enable debug messages')
+
+  parser.add_argument('--report-directory', '-r', default='/var/log',
+                      help='Report directory')
 
-  go(params)
+  parser.add_argument('--nb-server-max', '-s', type=int, default=3,
+                      help='Maximum number of servers')
+
+  parser.add_argument('--nb-tester-max', '-t', type=int, default=3,
+                      help='Maximum number of testers')
+
+  parser.add_argument('--nb-server-init', '-n', type=int, default=3,
+                      help='Number of servers to start with')
+
+  parser.add_argument('--nb-tester-init', '-m', type=int, default=3,
+                      help='Number of testers to start with')
+
+  parser.add_argument('--node-increment', '-i', type=int, default=1,
+                      help='Number of nodes to add at the end of an iteration')
+
+  parser.add_argument('software_release_url', help='Software Release URL')
+  parser.add_argument('server_url', help='Server URL')
+  parser.add_argument('key_file', help='SSL key file')
+  parser.add_argument('cert_file', help='SSL certificate file')
+  parser.add_argument('computer_id', help='Computer ID')
+  parser.add_argument('computer_partition_id', help='Computer Partition ID')
+  parser.add_argument('plugin_name', help='Backend to use')
+
+  go(vars(parser.parse_args()))
 
 if __name__ == "__main__":
   main(sys.argv[1:])
-



More information about the Erp5-report mailing list