def setUp(self):
     options=[ make_option("--param1", action="store", type="string", default="default1"),
               make_option("--param2", action="store_true", default=False),
               make_option("--param3", action="store", type="int", default=False),
               make_option("--param4", action="store", type="float", default=False),
               make_option("--param5", action="store", type="string", default=False),
               make_option("--param6", action="store", type="string", default="default6")]
              
     self.parser=PersistentOptionParser(usage="testapp [options]", option_list=options, prog="testapp")
     self.parser.setLocalDefaultsFilename(os.path.join(os.path.dirname(__file__), "testapp-local.cfg"))
     self.parser.setGlobalDefaultsFilename(os.path.join(os.path.dirname(__file__), "testapp.cfg"))
class TestPersistentOptionParser(unittest.TestCase):


    def setUp(self):
        options=[ make_option("--param1", action="store", type="string", default="default1"),
                  make_option("--param2", action="store_true", default=False),
                  make_option("--param3", action="store", type="int", default=False),
                  make_option("--param4", action="store", type="float", default=False),
                  make_option("--param5", action="store", type="string", default=False),
                  make_option("--param6", action="store", type="string", default="default6")]
                 
        self.parser=PersistentOptionParser(usage="testapp [options]", option_list=options, prog="testapp")
        self.parser.setLocalDefaultsFilename(os.path.join(os.path.dirname(__file__), "testapp-local.cfg"))
        self.parser.setGlobalDefaultsFilename(os.path.join(os.path.dirname(__file__), "testapp.cfg"))

    def tearDown(self):
        pass

    def testParam1(self):
        options, args=self.parser.parse_args([])
#        print options.param1
        self.assertEquals(options.param1, "defautparam1 overwritten")
        
    def testParam2(self):
        options, args=self.parser.parse_args([])
#        print options.param2
        self.assertEquals(options.param2, True)
        
    def testParam3(self):
        options, args=self.parser.parse_args([])
#        print options.param3
        self.assertEquals(options.param3, 4)
        
    def testParam4(self):
        options, args=self.parser.parse_args([])
#        print options.param4
        self.assertEquals(options.param4, 4.0)
        
    def testParam5(self):
        options, args=self.parser.parse_args([])
#        print options.param5
        self.assertEquals(options.param5, "testdir/test123")
def parse_cmdline(args=sys.argv):
   parser = OptionParser(description=__doc__, usage="usage: %prog [options] action [arguments]", version=__version__)
   # Flags
   parser.add_option("-v", "--verbose",     default=False, action="store_true", help="toggle debugmode and be more helpful")
#   parser.add_option("-a", "--ask",      dest="ask",      default=False, action="store_true", help="ask before any being command executed")
#   parser.add_option("-S", "--simulate",   dest="simulate",   default=False, action="store_true", help="don't execute anything just simulate. Only valid for developer. It might not do what you expect!")

   # Options
   backup_options=OptionGroup(parser, "Backup Options")
   backup_options.add_option("-t", "--taskname", default="",
                             help="Specify the name of the job to be executed. Default %default")
   backup_options.add_option("-T", "--type", default=comoonics.storage.ComArchive.ArchiveHandler.NONE,
                             help="Set the backup format type. Default: %default")
   backup_options.add_option("-c", "--compression", default=comoonics.storage.ComArchive.ArchiveHandler.NONE,
                             help="Set the compression of this backup handler (if any). Default %default.")
   backup_options.add_option("-f", "--format", default=comoonics.storage.ComArchive.ArchiveHandler.NONE,
                             help="Set the backup format of this backup handler (if any). Default %default.")
   backup_options.add_option("-p", "--property", dest="properties", default=list(), action="append", 
                             help="List of properties to be added to initialization (dependent on implementation). Each property must be name=value pair. Default %default")
   parser.add_option_group(backup_options)
   try:
      parser.setGlobalDefaultsFilename(get_defaultsfiles()[0])
      parser.setLocalDefaultsFilename(get_defaultsfiles()[1], get_defaultsenvkey())
   except (TypeError, NameError):
      pass

   (options, args) = parser.parse_args(args)

   if options.verbose:
      ComLog.setLevel(logging.DEBUG)
   else:
      ComLog.setLevel(logging.INFO)
   if not args or len(args) < 3:
      parser.error("To few arguments given to command.")
   properties=dict()
   for property in options.properties:
      try:
         name,value=property.split("=",1)
         properties[name]=value
      except ValueError:
         warnings.warn("Skipping property %s because of wrong format. Expecting name=value." %property)
   return (options, args[1], args[2:], properties)
def parse_cmdline(args=sys.argv):
    parser = OptionParser(description=__doc__,
                          usage="usage: %prog [options] action [arguments]",
                          version=__version__)
    # Flags
    parser.add_option("-v",
                      "--verbose",
                      default=False,
                      action="store_true",
                      help="toggle debugmode and be more helpful")
    #   parser.add_option("-a", "--ask",      dest="ask",      default=False, action="store_true", help="ask before any being command executed")
    #   parser.add_option("-S", "--simulate",   dest="simulate",   default=False, action="store_true", help="don't execute anything just simulate. Only valid for developer. It might not do what you expect!")

    # Options
    backup_options = OptionGroup(parser, "Backup Options")
    backup_options.add_option(
        "-t",
        "--taskname",
        default="",
        help="Specify the name of the job to be executed. Default %default")
    backup_options.add_option(
        "-T",
        "--type",
        default=comoonics.storage.ComArchive.ArchiveHandler.NONE,
        help="Set the backup format type. Default: %default")
    backup_options.add_option(
        "-c",
        "--compression",
        default=comoonics.storage.ComArchive.ArchiveHandler.NONE,
        help=
        "Set the compression of this backup handler (if any). Default %default."
    )
    backup_options.add_option(
        "-f",
        "--format",
        default=comoonics.storage.ComArchive.ArchiveHandler.NONE,
        help=
        "Set the backup format of this backup handler (if any). Default %default."
    )
    backup_options.add_option(
        "-p",
        "--property",
        dest="properties",
        default=list(),
        action="append",
        help=
        "List of properties to be added to initialization (dependent on implementation). Each property must be name=value pair. Default %default"
    )
    parser.add_option_group(backup_options)
    try:
        parser.setGlobalDefaultsFilename(get_defaultsfiles()[0])
        parser.setLocalDefaultsFilename(get_defaultsfiles()[1],
                                        get_defaultsenvkey())
    except (TypeError, NameError):
        pass

    (options, args) = parser.parse_args(args)

    if options.verbose:
        ComLog.setLevel(logging.DEBUG)
    else:
        ComLog.setLevel(logging.INFO)
    if not args or len(args) < 3:
        parser.error("To few arguments given to command.")
    properties = dict()
    for property in options.properties:
        try:
            name, value = property.split("=", 1)
            properties[name] = value
        except ValueError:
            warnings.warn(
                "Skipping property %s because of wrong format. Expecting name=value."
                % property)
    return (options, args[1], args[2:], properties)