ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/Processing/bin/findLfn.py
Revision: 1.2
Committed: Sat Jun 5 02:36:28 2010 UTC (14 years, 11 months ago) by paus
Content type: text/x-python
Branch: MAIN
CVS Tags: Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_029b, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, HEAD
Branch point for: Mit_025c_branch
Changes since 1.1: +148 -0 lines
Log Message:
Wow I forgot all about my cvs.

File Contents

# User Rev Content
1 paus 1.2 #!/usr/bin/env python
2     #---------------------------------------------------------------------------------------------------
3     # Stole this from Valery [Author: Valentin Kuznetsov, 2008]
4     #
5     # Probably it could do everything I wanted but I hacked it together.
6     #---------------------------------------------------------------------------------------------------
7     import os,sys,types,string
8     import httplib,urllib
9     from optparse import OptionParser
10    
11     """
12     DBS data discovery command line interface
13     """
14    
15     class DDOptionParser:
16     """
17     DDOptionParser is main class to parse options for L{DDHelper} and L{DDServer}.
18     """
19     def __init__(self):
20     self.parser = OptionParser()
21     self.parser.add_option("--dbsInst",action="store", type="string", dest="dbsInst",
22     help="specify DBS instance to use, e.g. --dbsInst=cms_dbs_prod_global")
23     self.parser.add_option("-v","--verbose",action="store", type="int", default=0, dest="verbose",
24     help="specify verbosity level, 0-none, 1-info, 2-debug")
25     self.parser.add_option("--input",action="store", type="string", default=False, dest="input",
26     help="specify input for your request.")
27     self.parser.add_option("--xml",action="store_true",dest="xml",
28     help="request output in XML format")
29     self.parser.add_option("--cff",action="store_true",dest="cff",
30     help="request output for files in CMS cff format")
31     self.parser.add_option("--host",action="store",type="string",dest="host",
32     help="specify a host name of Data Discovery service, e.g. https://cmsweb.cern.ch/dbs_discovery/")
33     self.parser.add_option("--details",action="store_true",dest="details",
34     help="show detailed output")
35     self.parser.add_option("--case",action="store",default="on",type="string",dest="case",
36     help="specify if your input is case sensitive of not, default is on.")
37     self.parser.add_option("--page",action="store",type="string",default="0",dest="page",
38     help="specify output page, should come together with --limit and --details")
39     self.parser.add_option("--limit",action="store",type="string",default="10",dest="limit",
40     help="specify a limit on output, e.g. 50 results, the --limit=-1 will list all results")
41     def getOpt(self):
42     """
43     Returns parse list of options
44     """
45     return self.parser.parse_args()
46    
47     def sendMessage(host,port,dbsInst,userInput,page,limit,xml=0,case='on',details=0,cff=0,debug=0):
48     """
49     Send message to server, message should be an well formed XML document.
50     """
51     if xml:
52     xml=1
53     else:
54     xml=0
55     if cff:
56     cff=1
57     else:
58     cff=0
59     input = urllib.quote(userInput)
60    
61     if debug:
62     httplib.HTTPConnection.debuglevel = 1
63     print "Contact",host,port
64     _port=443
65     if host.find("http://") != -1:
66     _port=80
67     if host.find("https://") != -1:
68     _port=443
69     host=host.replace("http://","").replace("https://","")
70     if host.find(":")==-1:
71     port=_port
72     prefix_path=""
73     if host.find("/")!=-1:
74     hs=host.split("/")
75     host=hs[0]
76     prefix_path='/'.join(hs[1:])
77     port=int(port)
78     if port==443:
79     http_conn = httplib.HTTPS(host,port)
80     else:
81     http_conn = httplib.HTTP(host,port)
82     if details:
83     details=1
84     else:
85     details=0
86    
87     path='/getLFNsForSite?dbsInst=%s&site=*&datasetPath=%s&what=txt&userMode=user&run=*' \
88     %(dbsInst,input)
89    
90     ## path='/aSearch?dbsInst=%s&html=0&caseSensitive=%s&_idx=%s&pagerStep=%s&userInput=%s&xml=%s&details=%s&cff=%s'%(dbsInst,case,page,limit,input,xml,details,cff)
91    
92     if prefix_path:
93     path="/"+prefix_path+path[1:]
94    
95     # print ' HOST: ' + host
96     # print ' PATH: ' + path
97     http_conn.putrequest('POST',path)
98     http_conn.putheader('Host',host)
99     http_conn.putheader('Content-Type','text/html; charset=utf-8')
100     http_conn.putheader('Content-Length',str(len(input)))
101     http_conn.endheaders()
102    
103     # print ' IPUT: ' + input
104     http_conn.send(input)
105    
106     (status_code,msg,reply) = http_conn.getreply()
107     data = http_conn.getfile().read()
108     if debug or msg != "OK":
109     print
110     print http_conn.headers
111     print "*** Send message ***"
112     print input
113     print "************************************************************************"
114     print "status code:",status_code
115     print "message:",msg
116     print "************************************************************************"
117     print reply
118     return data
119    
120     #---------------------------------------------------------------------------------------------------
121     # main
122     #---------------------------------------------------------------------------------------------------
123     if __name__ == "__main__":
124     host= "cmsweb.cern.ch/dbs_discovery/"
125     port= 443
126     dbsInst="cms_dbs_prod_global"
127     optManager = DDOptionParser()
128     (opts,args) = optManager.getOpt()
129     if opts.host:
130     host=opts.host
131     if host.find("http://") != -1:
132     host=host.replace("http://","")
133     if host[-1] != "/":
134     host += "/"
135     if opts.dbsInst:
136     dbsInst = opts.dbsInst
137     if opts.input:
138     if os.path.isfile(opts.input):
139     input = open(opts.input,'r').readline()
140     else:
141     input = opts.input
142     else:
143     print "\nUsage: %s --help"%sys.argv[0]
144     sys.exit(0)
145    
146     result = sendMessage(host,port,dbsInst,input,
147     opts.page,opts.limit,opts.xml,opts.case,opts.details,opts.cff,opts.verbose)
148     print result