692b26d94a66f8c655dc65a2d4e697dcd500e5e8
chmalee
  Tue May 14 15:48:44 2019 -0700
Adding python client to userapps, refs #18869

diff --git src/hg/hubApi/tests/pythonClient.py src/hg/hubApi/tests/pythonClient.py
deleted file mode 100755
index 48d6713..0000000
--- src/hg/hubApi/tests/pythonClient.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/bin/env python
-
-"""
-This code is inspired by the Ensembl python client
-https://github.com/Ensembl/ensembl-rest/wiki/Example-Python-Client
-"""
-import argparse
-import json
-import sys
-from collections import OrderedDict
-
-# support python2 and 3
-try:
-    from urllib.parse import urlparse, urlencode
-    from urllib.request import urlopen, Request
-    from urllib.error import HTTPError
-except ImportError:
-    from urlparse import urlparse
-    from urllib import urlencode
-    from urllib2 import urlopen, Request, HTTPError
-
-serverName = "https://api.genome.ucsc.edu"
-
-def parseCommandLine():
-    parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
-        description="Command line utility for UCSC Genome Browser API access",
-        epilog="Example usage:\npythonClient.py \"/getData/track\" "
-        "\"track=gold;genome=hg38;chrom=chrM;maxItemsOutput=2\"")
-    parser.add_argument("endpoint", nargs='?', default="",
-        help="Endpoint string like \"/list/tracks\" or \"/getData/track/\"", type=str)
-    parser.add_argument("parameters", nargs='?', default="",
-        help="Parameters to endpoints. semi-colon separated key=value formatted string, "
-        "like \"genome=hg38;chrom=chrM;maxItemsOutput=2\"",type=str)
-    parser.add_argument("-p", "--pretty-print", action="store_true", default=False,
-        help="Print json response with newlines")
-    parser.add_argument("--debug", action="store_true", default=False,
-        help="Print final URL of the request")
-    parser.add_argument("-test0", action="store_true", default=False,
-        help="Run special test")
-    parser.add_argument("-getDnaExample", action="store_true", default=False,
-        help="Show example query for fetching Human GRCh38(hg38) DNA sequence")
-    return parser
-
-def tryJsonRequest(requestUrl):
-    """
-    Wrap call to urlopen in try/except and exit on an HTTP error.
-    Returns json response if request is good.
-    """
-    data = None
-    try:
-        request = Request(requestUrl)
-        response = urlopen(request)
-        content = response.read()
-        if content:
-            data = json.loads(content, object_pairs_hook=OrderedDict)
-    except HTTPError as e:
-        if e.code == 400: # does this work for other status codes?
-            msg = json.loads(e.read(), object_pairs_hook=OrderedDict)
-            sys.stderr.write("Error: %s\n" % msg["error"])
-            sys.exit(1)
-        else:
-            sys.stderr.write("Request %s failed with HTTP status %s\nreason:%s\n" %
-                (requestUrl, e.code, e.reason))
-        sys.exit(1)
-    return data
-
-def runGetDnaExample(prettyPrint=False):
-    """
-    Run test of getting short DNA sequence from the hg38 assembly and exit.
-    """
-    req = serverName + "/getData/sequence?genome=hg38;chrom=chr1;start=11110531;end=11110538"
-    data = tryJsonRequest(req)
-    if data:
-        print("Example request for obtaining DNA sequence:\n%s" % req)
-        if prettyPrint:
-            print(json.dumps(data, indent=4, separators=(" , "," : ")))
-        else:
-            print(json.dumps(data))
-    sys.exit(0)
-
-def runTest0(prettyPrint=False):
-    """
-    Run test of getting public hub data for "Plants" and print UCSC info
-    for the hg38 genome and exit
-    """
-    hubRequest =  serverName + "/list/publicHubs"
-    hg38Request = serverName + "/list/ucscGenomes"
-
-    # do plants hub test first
-    data = tryJsonRequest(hubRequest)
-    if data:
-        plantData = None
-        for obj in data['publicHubs']:
-            if obj['shortLabel'] == 'Plants':
-                plantData = obj
-        if plantData is not None:
-            print("Plants public hub data")
-            if prettyPrint:
-                print(json.dumps(plantData,indent=4, separators=(",",":")))
-            else:
-                print(json.dumps(plantData))
-
-    # now do ucsc hg38 test
-    data = tryJsonRequest(hg38Request)
-    if data:
-        hg38Data = None
-        if data['ucscGenomes']['hg38']:
-            hg38Data = data['ucscGenomes']['hg38']
-        if hg38Data is not None:
-            print("hg38/Human information")
-            if prettyPrint:
-                print(json.dumps(hg38Data,indent=4, separators=(",",":")))
-            else:
-                print(json.dumps(hg38Data))
-    sys.exit(0)
-
-def main():
-    cmd = parseCommandLine()
-    args = cmd.parse_args()
-    req =  serverName
-
-    if len(sys.argv) == 1:
-        cmd.print_help()
-        sys.exit(0)
-
-    # run special test
-    if args.test0:
-        runTest0(args.pretty_print)
-
-    if args.getDnaExample:
-        runGetDnaExample(args.pretty_print)
-
-    req += args.endpoint + "?" + args.parameters
-
-    # make http request and print the output
-    data = None
-    if args.debug:
-        print("request URL: %s\n" % req)
-    data = tryJsonRequest(req)
-    if data:
-        if args.pretty_print:
-            print(json.dumps(data, indent=4, separators=(",",":")))
-        else:
-            print(json.dumps(data))
-
-if __name__ == "__main__":
-    main()