d8aef11766e1720af30e848211b03a1bee002cf7
max
  Fri Aug 21 03:14:29 2015 -0700
adding chopchop and nebcutter and fixing an obvious bug. Also adding a
little tool that parse a Chrome HTTP trace and creates the extTools.ra
entry mostly automatically. refs #15113

diff --git src/utils/extToolsChromeParse src/utils/extToolsChromeParse
new file mode 100755
index 0000000..dba4648
--- /dev/null
+++ src/utils/extToolsChromeParse
@@ -0,0 +1,77 @@
+#!/usr/bin/env python
+import cgi, sys, StringIO
+import logging, sys, optparse
+
+# === command line interface, options and help ===
+parser = optparse.OptionParser("""usage: %prog [options] filename - parse a Chrome HTTP trace into the format required for extTools.ra
+
+To get an HTTP trace with Chrome:
+- go to the website, fill out the form, enter a sequence, click all buttons, etc
+- right click anywhere, click "inspect"
+- in the window that opens, click "network"
+- click "preserve log"
+- make sure the red button "recording" is on, it usually is
+- click the submit or OK button on the website
+- click the "record" button the stop the recording
+- in the list of the requests at the bottom of the screen, select a HTTP POST or GET request
+- click onto it
+- click "Headers", click on "view source" next to "Response headers" and also "view source"
+  next to "Request headers"
+- select the text on this page, including the line "Request URL:" and save to a file.
+
+Now run this script onto this file. Replace the sequence with $seq or any position with $position.
+
+""")
+
+parser.add_option("-d", "--debug", dest="debug", action="store_true", help="show debug messages") 
+#parser.add_option("-f", "--file", dest="file", action="store", help="run on file") 
+#parser.add_option("", "--test", dest="test", action="store_true", help="do something") 
+(options, args) = parser.parse_args()
+
+if options.debug:
+    logging.basicConfig(level=logging.DEBUG)
+else:
+    logging.basicConfig(level=logging.INFO)
+
+# ==== functions =====
+
+def parseFname(inFname):
+    lines = []
+    isInside = False
+    url = None
+    for line in open(inFname):
+        if "boundary=" in line:
+            boundary = line.rstrip("\n").split("=")[1]
+        if "Request URL:" in line:
+            # Request URL:http://primer3plus.ut.ee/cgi-bin/primer3plus/primer3plus.cgi
+            url = line.rstrip('\n').split("URL:")[-1]
+        if line.startswith("POST") or isInside or line.startswith("Accept:"):
+            lines.append(line)
+            isInside = True
+        
+    if url is None:
+        print "No Request URL line was found. Make sure your file includes one"
+        assert(False)
+
+    out = "".join(lines)
+    inFh = StringIO.StringIO(out)
+    pdict = {'boundary':boundary}
+    params  = cgi.parse_multipart(inFh, pdict)
+
+    inBase = inFname.split('.')[0]
+    print "tool", inBase
+    print "shortLabel", inBase
+    print "longLabel", inBase
+    print "#email NEEDTOFILLOUT"
+    print "url", url
+    for name, val in params.iteritems():
+        if val!=['']:
+            print "param", name, "".join(val).replace("\n", "")
+    
+# ----------- main --------------
+if args==[]:
+    parser.print_help()
+    exit(1)
+
+filename = args[0]
+parseFname(filename)