]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
In define(), added option to define our own option group, which is used in print_help(). 347/head
authorJeeyoung Kim <jeeyoung@contextlogic.com>
Tue, 30 Aug 2011 21:47:34 +0000 (14:47 -0700)
committerJeeyoung Kim <jeeyoung@contextlogic.com>
Tue, 30 Aug 2011 21:47:34 +0000 (14:47 -0700)
tornado/options.py

index 2010159c712346fb329c524b3f3cd3c4f9132fdc..a230347a5bdb7f776614af12f9f3cc20f6deffb9 100644 (file)
@@ -65,7 +65,7 @@ except ImportError:
 
 
 def define(name, default=None, type=None, help=None, metavar=None,
-           multiple=False):
+           multiple=False, group=None):
     """Defines a new command line option.
 
     If type is given (one of str, float, int, datetime, or timedelta)
@@ -81,6 +81,9 @@ def define(name, default=None, type=None, help=None, metavar=None,
 
        --name=METAVAR      help string
 
+    group is used to group the defined options in logical groups. By default,
+    command line options are grouped by the defined file.
+
     Command line option names must be unique globally. They can be parsed
     from the command line with parse_command_line() or parsed from a
     config file with parse_config_file.
@@ -97,9 +100,13 @@ def define(name, default=None, type=None, help=None, metavar=None,
             type = default.__class__
         else:
             type = str
+    if group:
+        group_name = group
+    else:
+        group_name = file_name
     options[name] = _Option(name, file_name=file_name, default=default,
                             type=type, help=help, metavar=metavar,
-                            multiple=multiple)
+                            multiple=multiple, group_name=group_name)
 
 
 def parse_command_line(args=None):
@@ -156,11 +163,11 @@ def print_help(file=sys.stdout):
     print >> file, "Usage: %s [OPTIONS]" % sys.argv[0]
     print >> file, ""
     print >> file, "Options:"
-    by_file = {}
+    by_group = {}
     for option in options.itervalues():
-        by_file.setdefault(option.file_name, []).append(option)
+        by_group.setdefault(option.group_name, []).append(option)
 
-    for filename, o in sorted(by_file.items()):
+    for filename, o in sorted(by_group.items()):
         if filename: print >> file, filename
         o.sort(key=lambda option: option.name)
         for option in o:
@@ -187,7 +194,7 @@ class _Options(dict):
 
 class _Option(object):
     def __init__(self, name, default=None, type=str, help=None, metavar=None,
-                 multiple=False, file_name=None):
+                 multiple=False, file_name=None, group_name=None):
         if default is None and multiple:
             default = []
         self.name = name
@@ -196,6 +203,7 @@ class _Option(object):
         self.metavar = metavar
         self.multiple = multiple
         self.file_name = file_name
+        self.group_name = group_name
         self.default = default
         self._value = None