00056 :
00057
00058 dd_tier_re = re.compile(dd_tier.replace('*','.*')) ;
00059
00060 if os.environ['DD_SOURCE'] == "das":
00061
00062 query = "dataset instance=cms_dbs_prod_global"
00063 if os.environ['DD_RELEASE'] != "" :
00064 query = query + " release=" + os.environ['DD_RELEASE']
00065 if os.environ['DD_SAMPLE'] != "":
00066 query = query + " primary_dataset=" + os.environ['DD_SAMPLE']
00067 if dd_tier != "":
00068 query = query + " tier=" + dd_tier
00069 if os.environ['DD_COND'] != "":
00070 query = query + " dataset=*" + os.environ['DD_COND'] + "*"
00071 if os.environ['DD_RUN'] != "":
00072 query = query + " run=" + os.environ['DD_RUN']
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 data = das_client.json.loads(das_client.get_data('https://cmsweb.cern.ch',query,0,0,0))
00085
00086 if data['nresults']==0:
00087 print '[electronDataDiscovery.py] No DAS dataset for query:', query
00088 return []
00089 if data['nresults']>1:
00090 print '[electronDataDiscovery.py] Several DAS datasets for query:', query
00091 return []
00092
00093 dataset = data['data'][0]['dataset'][0]['name']
00094
00095 query = "file instance=cms_dbs_prod_global dataset="+dataset
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 data = das_client.json.loads(das_client.get_data('https://cmsweb.cern.ch',query,0,0,0))
00107
00108 if data['nresults']==0:
00109 print '[electronDataDiscovery.py] No DAS file in dataset:', dataset
00110 return []
00111
00112 result = []
00113 for i in range(0,data['nresults']):
00114 result.append(str(data['data'][i]['file'][0]['name']))
00115
00116 elif os.environ['DD_SOURCE'] == "dbs":
00117
00118 input = "find file"
00119 separator = " where "
00120 if os.environ['DD_RELEASE'] != "":
00121 input = input + separator + "release = " + os.environ['DD_RELEASE']
00122 separator = " and "
00123 if os.environ['DD_SAMPLE'] != "":
00124 input = input + separator + "primds = " + os.environ['DD_SAMPLE']
00125 separator = " and "
00126 if os.environ['DD_RUN'] != "":
00127 input = input + separator + "run = " + os.environ['DD_RUN']
00128 separator = " and "
00129 input = input + separator + "dataset like *" + os.environ['DD_COND'] + "*" + dd_tier + "*"
00130
00131 data = os.popen('dbs search --url="http://cmsdbsprod.cern.ch/cms_dbs_prod_global/servlet/DBSServlet" --query "'+input+'"')
00132 datalines = data.readlines()
00133 data.close()
00134 result = []
00135 for line in datalines:
00136 line = line.rstrip()
00137 if line != "" and line[0] =="/":
00138 result.append(line)
00139
00140 elif os.environ['DD_SOURCE'] == "http":
00141
00142 input = "find file"
00143 separator = " where "
00144 if os.environ['DD_RELEASE'] != "":
00145 input = input + separator + "release = " + os.environ['DD_RELEASE']
00146 separator = " and "
00147 if os.environ['DD_SAMPLE'] != "":
00148 input = input + separator + "primds = " + os.environ['DD_SAMPLE']
00149 separator = " and "
00150 if os.environ['DD_RUN'] != "":
00151 input = input + separator + "run = " + os.environ['DD_RUN']
00152 separator = " and "
00153 input = input + separator + "dataset like *" + os.environ['DD_COND'] + "*" + dd_tier + "*"
00154
00155 url = "https://cmsweb.cern.ch:443/dbs_discovery/aSearch"
00156 final_input = urllib.quote(input) ;
00157
00158 agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
00159 ctypes = "text/plain"
00160 headers = { 'User-Agent':agent, 'Accept':ctypes}
00161 params = {'dbsInst':'cms_dbs_prod_global',
00162 'html':0,'caseSensitive':'on','_idx':0,'pagerStep':-1,
00163 'userInput':final_input,
00164 'xml':0,'details':0,'cff':0,'method':'dbsapi'}
00165 data = urllib.urlencode(params,doseq=True)
00166 req = urllib2.Request(url, data, headers)
00167 data = ""
00168
00169 try:
00170 response = urllib2.urlopen(req)
00171 data = response.read()
00172 except urllib2.HTTPError, e:
00173 if e.code==201:
00174 print e.headers
00175 print e.msg
00176 pass
00177 else:
00178 raise e
00179
00180 datalines = data.readlines()
00181 data.close()
00182 result = []
00183 for line in datalines:
00184 line = line.rstrip()
00185 if line != "" and line[0] =="/":
00186 result.append(line)
00187
00188 elif os.environ['DD_SOURCE'] == "lsf":
00189
00190 dbs_path = '/'+os.environ['DD_SAMPLE']+'/'+os.environ['DD_RELEASE']+'-'+os.environ['DD_COND']+'/'+os.environ['DD_TIER']+'"'
00191 if __name__ == "__main__":
00192 print 'dbs path:',dbs_path
00193 data = os.popen('dbs lsf --path="'+dbs_path+'"')
00194 datalines = data.readlines()
00195 data.close()
00196 result = []
00197 for line in datalines:
00198 line = line.rstrip()
00199 if line != "" and line[0] =="/":
00200 result.append(line)
00201
00202 elif os.environ['DD_SOURCE'].startswith('/castor/cern.ch/cms/'):
00203
00204 castor_dir = os.environ['DD_SOURCE'].replace('/castor/cern.ch/cms/','/',1)
00205 result = []
00206 data = os.popen('rfdir /castor/cern.ch/cms'+castor_dir)
00207 subdirs = data.readlines()
00208 data.close()
00209 datalines = []
00210 for line in subdirs:
00211 line = line.rstrip()
00212 subdir = line.split()[8]
00213 data = os.popen('rfdir /castor/cern.ch/cms'+castor_dir+'/'+subdir)
00214 datalines = data.readlines()
00215 for line in datalines:
00216 line = line.rstrip()
00217 file = line.split()[8]
00218 if file != "":
00219 result.append(castor_dir+'/'+subdir+'/'+file)
00220 data.close()
00221
00222 elif os.environ['DD_SOURCE'].startswith('/eos/cms/'):
00223
00224 data = os.popen('/afs/cern.ch/project/eos/installation/pro/bin/eos.select find -f '+os.environ['DD_SOURCE'])
00225 lines = data.readlines()
00226 data.close()
00227 result = []
00228 for line in lines:
00229 line = line.strip().replace('/eos/cms/','/',1)
00230 if line == "": continue
00231 if dd_sample_re.search(line) == None: continue
00232 if dd_cond_re.search(line) == None: continue
00233 if dd_tier_re.search(line) == None: continue
00234 if dd_run_re.search(line) == None: continue
00235 result.append(line)
00236
00237 else:
00238
00239 result = []
00240 for line in open(os.environ['DD_SOURCE']).readlines():
00241 line = os.path.expandvars(line.strip())
00242 if line == "": continue
00243 if dd_sample_re.search(line) == None: continue
00244 if dd_cond_re.search(line) == None: continue
00245 if dd_tier_re.search(line) == None: continue
00246 if dd_run_re.search(line) == None: continue
00247 result.append(line)
00248
00249 if len(result)==0:
00250 diag = '[electronDataDiscovery.py] No more files after filtering with :'
00251 if os.environ['DD_SAMPLE']!='': diag += ' ' + os.environ['DD_SAMPLE']
00252 if os.environ['DD_COND']!='': diag += ' ' + os.environ['DD_COND']
00253 if dd_tier!='': diag += ' ' + dd_tier
00254 if os.environ['DD_RUN']!='': diag += ' ' + os.environ['DD_RUN']
00255 print diag
00256
00257 return result