[tor-commits] [arm/master] Help content for GETINFO

atagar at torproject.org atagar at torproject.org
Thu Sep 15 16:59:53 UTC 2011


commit d3da20b9e311de1604192a28ba63593316a901ac
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu Sep 15 09:38:59 2011 -0700

    Help content for GETINFO
    
    Simple help snippet followed by the 'GETINFO info/names' descriptions.
---
 src/util/torInterpretor.py |   46 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 37 insertions(+), 9 deletions(-)

diff --git a/src/util/torInterpretor.py b/src/util/torInterpretor.py
index ce28e9c..21603a1 100644
--- a/src/util/torInterpretor.py
+++ b/src/util/torInterpretor.py
@@ -98,12 +98,16 @@ Results are deduplicated and the matching portions bolded."""
 
 HELP_QUIT = """Terminates the interpretor."""
 
-INTERPRETOR_HELP = {
+HELP_GETINFO = """Queries the tor process for information. Options are...
+"""
+
+HELP_OPTIONS = {
   "HELP": ("/help [OPTION]", HELP_HELP),
   "WRITE": ("/write [PATH]", HELP_WRITE),
   "INFO": ("/info [relay fingerprint, nickname, or IP address]", HELP_INFO),
   "FIND": ("/find PATTERN", HELP_FIND),
-  "QUIT": ("/quit", HELP_QUIT)
+  "QUIT": ("/quit", HELP_QUIT),
+  "GETINFO": ("GETINFO [OPTION]", HELP_GETINFO)
 }
 
 class InterpretorClosed(Exception):
@@ -230,8 +234,9 @@ class TorControlCompleter:
     self.commands.append("QUIT") # TODO: give a confirmation when the user does this?
     
     # adds interpretor commands
-    for cmd in INTERPRETOR_HELP:
-      self.commands.append("/" + cmd.lower())
+    for cmd in HELP_OPTIONS:
+      if HELP_OPTIONS[cmd][0].startswith("/"):
+        self.commands.append("/" + cmd.lower())
     
     # adds help options for the previous commands
     baseCmd = set([cmd.split(" ")[0].replace("+", "").replace("/", "") for cmd in self.commands])
@@ -302,19 +307,42 @@ class ControlInterpretor:
     
     arg = arg.upper()
     
+    # If there's multiple arguments then just take the first. This is
+    # particularly likely if they're trying to query a full command (for
+    # instance "/help GETINFO version")
+    
+    arg = arg.split(" ")[0]
+    
     # strip slash if someone enters an interpretor command (ex. "/help /help")
     if arg.startswith("/"): arg = arg[1:]
     
     if arg:
-      if arg in INTERPRETOR_HELP:
-        # Provides information for the interpretor argument. This bolds the
-        # usage information and indents the description after it.
-        usage, description = INTERPRETOR_HELP[arg]
+      if arg in HELP_OPTIONS:
+        # Provides information for the tor or interpretor argument. This bolds
+        # the usage information and indents the description after it.
+        usage, description = HELP_OPTIONS[arg]
         
         outputEntry.append((usage + "\n", OUTPUT_FORMAT + (Attr.BOLD, )))
         
         for line in description.split("\n"):
           outputEntry.append(("  " + line + "\n", OUTPUT_FORMAT))
+        
+        # if this is the GETINFO option then also list the valid options
+        if arg == "GETINFO":
+          infoOptions = torTools.getConn().getInfo("info/names")
+          
+          if infoOptions:
+            for line in infoOptions.split("\n"):
+              if line.startswith("config/*") or line.startswith("dir-usage"):
+                continue
+              
+              lineMatch = re.match("^(.+) -- (.+)$", line)
+              
+              if lineMatch:
+                opt, description = lineMatch.groups()
+                
+                outputEntry.append(("%-33s" % opt, OUTPUT_FORMAT + (Attr.BOLD, )))
+                outputEntry.append((" - %s\n" % description, OUTPUT_FORMAT))
       else:
         # check if this is a configuration option
         manEntry = torConfig.getConfigDescription(arg)
@@ -336,7 +364,7 @@ class ControlInterpretor:
                 drawPortion, line = uiTools.cropStr(line, 88, 4, 4, uiTools.Ending.HYPHEN, True)
                 outputEntry.append(("  %s\n" % drawPortion.strip(), OUTPUT_FORMAT))
         else:
-          outputEntry.append(("No help information for '%s'..." % arg, ERROR_FORMAT))
+          outputEntry.append(("No help information available for '%s'..." % arg, ERROR_FORMAT))
     else:
       # provides the GENERAL_HELP with everything bolded except descriptions
       for line in GENERAL_HELP.split("\n"):





More information about the tor-commits mailing list