9 DBS data discovery command line interface
11 from __future__
import print_function
13 import httplib, urllib, types, string, os, sys
14 from optparse
import OptionParser
18 DDOptionParser is main class to parse options for L{DDHelper} and L{DDServer}.
22 self.
parser.add_option(
"--dbsInst",action=
"store", type=
"string", dest=
"dbsInst",
23 help=
"specify DBS instance to use, e.g. --dbsInst=cms_dbs_prod_global")
24 self.
parser.add_option(
"-v",
"--verbose",action=
"store", type=
"int", default=0, dest=
"verbose",
25 help=
"specify verbosity level, 0-none, 1-info, 2-debug")
26 self.
parser.add_option(
"--input",action=
"store", type=
"string", default=
False, dest=
"input",
27 help=
"specify input for your request.")
28 self.
parser.add_option(
"--xml",action=
"store_true",dest=
"xml",
29 help=
"request output in XML format")
30 self.
parser.add_option(
"--cff",action=
"store_true",dest=
"cff",
31 help=
"request output for files in CMS cff format")
32 self.
parser.add_option(
"--host",action=
"store",type=
"string",dest=
"host",
33 help=
"specify a host name of Data Discovery service, e.g. https://cmsweb.cern.ch/dbs_discovery/")
34 self.
parser.add_option(
"--port",action=
"store",type=
"string",dest=
"port",
35 help=
"specify a port to be used by Data Discovery host")
36 self.
parser.add_option(
"--iface",action=
"store",default=
"dd",type=
"string",dest=
"iface",
37 help=
"specify which interface to use for queries dd or dbsapi, default is dbsapi.")
38 self.
parser.add_option(
"--details",action=
"store_true",dest=
"details",
39 help=
"show detailed output")
40 self.
parser.add_option(
"--case",action=
"store",default=
"on",type=
"string",dest=
"case",
41 help=
"specify if your input is case sensitive of not, default is on.")
42 self.
parser.add_option(
"--page",action=
"store",type=
"string",default=
"0",dest=
"page",
43 help=
"specify output page, should come together with --limit and --details")
44 self.
parser.add_option(
"--limit",action=
"store",type=
"string",default=
"10",dest=
"limit",
45 help=
"specify a limit on output, e.g. 50 results, the --limit=-1 will list all results")
48 Returns parse list of options
52 def sendMessage(host,port,dbsInst,userInput,page,limit,xml=0,case='on',iface='dd',details=0,cff=0,debug=0):
54 Send message to server, message should be an well formed XML document.
60 input=urllib.quote(userInput)
62 httplib.HTTPConnection.debuglevel = 1
63 print(
"Contact",host,port)
65 if host.find(
"http://")!=-1:
67 if host.find(
"https://")!=-1:
69 host=host.replace(
"http://",
"").
replace(
"https://",
"")
70 if host.find(
":")==-1:
73 if host.find(
"/")!=-1:
76 prefix_path=
'/'.
join(hs[1:])
77 if host.find(
":")!=-1:
78 host,port=host.split(
":")
82 http_conn = httplib.HTTPS(host,port)
84 http_conn = httplib.HTTP(host,port)
87 path=
'/aSearch?dbsInst=%s&html=0&caseSensitive=%s&_idx=%s&pagerStep=%s&userInput=%s&xml=%s&details=%s&cff=%s&method=%s'%(dbsInst,case,page,limit,input,xml,details,cff,iface)
89 path=
"/"+prefix_path+path[1:]
90 http_conn.putrequest(
'POST',path)
91 http_conn.putheader(
'Host',host)
92 http_conn.putheader(
'Content-Type',
'text/html; charset=utf-8')
93 http_conn.putheader(
'Content-Length',
str(len(input)))
94 http_conn.endheaders()
97 (status_code,msg,reply)=http_conn.getreply()
98 data=http_conn.getfile().
read()
99 if debug
or msg!=
"OK":
101 print(http_conn.headers)
102 print(
"*** Send message ***")
104 print(
"************************************************************************")
105 print(
"status code:",status_code)
106 print(
"message:",msg)
107 print(
"************************************************************************")
114 if __name__ ==
"__main__":
115 host=
"cmsweb.cern.ch/dbs_discovery/"
117 dbsInst=
"cms_dbs_prod_global"
119 (opts,args) = optManager.getOpt()
120 if opts.host: host=opts.host
121 if host.find(
"http://")!=-1:
122 host=host.replace(
"http://",
"")
129 if opts.dbsInst: dbsInst=opts.dbsInst
131 if os.path.isfile(opts.input):
132 input=open(opts.input,
'r').readline()
136 print(
"\nUsage: %s --help"%sys.argv[0])
138 result =
sendMessage(host,port,dbsInst,input,opts.page,opts.limit,opts.xml,opts.case,opts.iface,opts.details,opts.cff,opts.verbose)