Package iceprod :: Package client :: Module soaptrayclient
[hide private]
[frames] | no frames]

Source Code for Module iceprod.client.soaptrayclient

  1  #!/bin/env python 
  2  #   copyright  (c) 2005 
  3  #   the icecube collaboration 
  4  #   $Id: $ 
  5  # 
  6  #   @version $Revision: $ 
  7  #   @date $Date: $ 
  8  #   @author Juan Carlos Diaz Velez <juancarlos@icecube.wisc.edu> 
  9  #    @brief icetray connections frame for GtkIcetraConfig application 
 10  ######################################################################### 
 11  from iceprod.core.xmlparser import IceTrayXMLParser 
 12  from iceprod.core.xmlwriter import IceTrayXMLWriter 
 13  from iceprod.core.dataclasses import * 
 14  from cPickle import loads,dumps 
 15  import sys,os,traceback 
 16  import getpass 
 17  import getopt 
 18  import xmlrpclib 
 19   
20 -class i3SOAPClient:
21
22 - def __init__(self,url=None,geturl=lambda:'https://condor.icecube.wisc.edu:9080'):
23 self.url = url 24 self.geturl = geturl 25 self.printtext = lambda x: sys.stdout.write(x+"\n") 26 self.connected = False 27 self.cached = True
28
29 - def SetPrinter(self,printer):
30 self.printtext = printer
31
32 - def _print(self,text):
33 if self.printtext: 34 self.printtext(text) 35 else: 36 print text
37
38 - def checkURL(self,url):
39 return url.startswith('http://') or url.startswith('https://')
40
41 - def connect(self):
42 if not self.connected: 43 if not self.url: 44 self.url = self.geturl() 45 if self.checkURL(self.url): 46 self.server = xmlrpclib.ServerProxy(self.url) 47 self.connected = True 48 else: 49 self.printtext("Please specify a valid url: %s" % self.url) 50 return self.connected
51
52 - def submit(self,i3steering,username,passwd,prodflag=False,submitter="%s@%s" % (getpass.getuser(),os.uname()[1])):
53 54 if not self.connect(): return None 55 56 try: 57 if prodflag: 58 status,i3q_pkl,ex = self.server.submit( 59 dumps(i3steering), 60 username,passwd,submitter,prodflag) 61 self._print(status) 62 if (i3q_pkl): 63 return loads(i3q_pkl) 64 elif ex: 65 ex = loads(ex) 66 self._print("Remote Exception: %s" % str(ex)) 67 return None 68 69 # non-production 70 pmaxjobs = i3steering.GetParameter('MAXJOBS') 71 maxjobs = int(pmaxjobs.GetValue()) 72 stepsize = 20 73 74 cookie = I3Cookie() 75 for i in range(0,maxjobs,stepsize): 76 status,i3q_pkl,ex = self.server.submit( 77 dumps(i3steering), 78 username, 79 passwd, 80 submitter, 81 prodflag, 82 i, min(i+stepsize,maxjobs), 83 cookie.dataset_id) 84 self._print(status) 85 86 if (i3q_pkl): 87 i3q = loads(i3q_pkl) 88 cookie.dataset_id = i3q.dataset_id 89 for job_id in i3q.GetJobIds(): 90 cookie.AddJobId(job_id) 91 elif ex: 92 ex = loads(ex) 93 self._print("Remote Exception: %s" % str(ex)) 94 return None 95 return cookie 96 97 except Exception, e: 98 self._print("Caught exception: %s " % str(e)) 99 traceback.print_exc(file=sys.stdout) 100 return None
101
102 - def enqueue(self,i3steering,username,passwd,submitter=getpass.getuser()):
103 104 if not self.connect(): return None 105 return self.server.enqueue( 106 dumps(i3steering), username,passwd,submitter)
107 108
109 - def check_q(self,i3q,username,password):
110 111 if not self.connect(): return None 112 try: 113 self._print(self.server.checkjobs(dumps(i3q),username,password)) 114 115 except Exception, e: 116 self._print("Caught exception: %s " % str(e))
117
118 - def q_remove(self,i3q,username,password,job=-1):
119 120 if not self.connect(): return None 121 try: 122 self._print(self.server.queue_remove(dumps(i3q),username,password)) 123 124 except Exception, e: 125 self._print("Caught exception: %s " % str(e))
126
127 - def q_suspend(self,username,password,dataset,job=-1):
128 if not self.connect(): return None 129 try: 130 self._print(self.server.queue_suspend(username,password,dataset,job)) 131 132 except Exception, e: 133 self._print("Caught exception: %s " % str(e))
134
135 - def q_resume(self,username,password,dataset,job=-1):
136 if not self.connect(): return None 137 try: 138 self._print(self.server.queue_resume(username,password,dataset,job)) 139 140 except Exception, e: 141 self._print("Caught exception: %s " % str(e))
142
143 - def q_setstatus(self,username,password,dataset,status):
144 if not self.connect(): return None 145 try: 146 self._print(self.server.queue_setstatus(username,password,dataset,status)) 147 148 except Exception, e: 149 self._print("Caught exception: %s " % str(e))
150
151 - def q_retire(self,username,password,dataset):
152 """ 153 set status of dataset to 'OBSOLETE' and change the subcategory 154 in DIF_Plus 155 """ 156 if not self.connect(): return None 157 try: 158 self._print(self.server.queue_retire(username,password,dataset)) 159 160 except Exception, e: 161 self._print("Caught exception: %s " % str(e))
162 163
164 - def q_clean(self,username,password,dataset):
165 if not self.connect(): return None 166 try: 167 self._print(self.server.queue_clean(username,password,dataset)) 168 except Exception, e: 169 self._print("Caught exception: %s " % str(e))
170
171 - def q_delete(self,username,password,dataset):
172 if not self.connect(): return None 173 try: 174 self._print(self.server.queue_delete(username,password,dataset)) 175 except Exception, e: 176 self._print("Caught exception: %s " % str(e))
177
178 - def q_finish(self,username,password,dataset):
179 if not self.connect(): return None 180 try: 181 self._print(self.server.queue_dataset_finish(username,password,dataset)) 182 except Exception, e: 183 self._print("Caught exception: %s " % str(e))
184
185 - def q_daemon_suspend(self,username,password,grid,daemon):
186 if not self.connect(): return None 187 try: 188 self._print(self.server.daemon_suspend(username,password,grid,daemon)) 189 except Exception, e: 190 self._print("Caught exception: %s " % str(e))
191
192 - def q_daemon_resume(self,username,password,grid,daemon):
193 if not self.connect(): return None 194 try: 195 self._print(self.server.daemon_resume(username,password,grid,daemon)) 196 except Exception, e: 197 self._print("Caught exception: %s " % str(e))
198 199
200 - def q_status(self,dataset,job=-1):
201 if not self.connect(): return None 202 self._print(self.server.getstatus(dataset,job))
203
204 - def q_validate(self,username,password,dataset,valid=True):
205 if not self.connect(): return None 206 try: 207 self._print(self.server.queue_validate(username,password,dataset,valid)) 208 209 except Exception, e: 210 self._print("Caught exception: %s " % str(e))
211
212 - def loaddict(self,odict,username,password,dataset_id):
213 if not self.connect(): return None 214 try: 215 self._print(self.server.loaddict( 216 dumps(odict), 217 username,password,dataset_id)) 218 except Exception, e: 219 self._print("Caught exception: %s " % str(e))
220
221 - def authenticate(self,username,password):
222 223 if not self.connect(): return None 224 try: 225 return self.server.authenticate(username,password) 226 227 except Exception, e: 228 self._print("Caught exception: %s " % str(e)) 229 return False
230
231 - def printsummary(self,days):
232 if not self.connect(): return None 233 return self.server.printsummary(days)
234
235 - def show_dataset_table(self,search_string=""):
236 if not self.connect(): return None 237 try: 238 return loads(self.server.showrunlist(search_string)) 239 except Exception,e: 240 self._print("Caught exception: %s " % str(e)) 241 return [] 242
243 - def download_config(self,dataset,defaults=False,descriptions=False):
244 if not self.connect(): return None 245 try: 246 return loads(self.server.download_config(dataset,defaults,descriptions)) 247 except Exception,e: 248 self._print("Caught exception: %s " % str(e)) 249
250 - def check_server(self):
251 if not self.connect(): return None 252 return loads(self.server.check_connection()) 253
254 - def GetSimCategories(self):
255 if not self.connect(): return None 256 return loads(self.server.get_simcat_categories()) 257 258 # ParamDB wrappers
259 - def SwitchMetaProject(self,iconfig,id,name,version):
260 if not self.connect(): return None 261 return loads(self.server.SwitchMetaProject(dumps(iconfig),id,name,loads(version))) 262
263 - def GetMetaProjects(self):
264 if not self.connect(): return None 265 return loads(self.server.GetMetaProjects()) 266
267 - def GetProjectsSM(self,module,metaproj):
268 if not self.connect(): return None 269 return loads(self.server.GetProjectsSM(dumps(module),dumps(metaproj)))
270
271 - def GetProjectsMM(self,module,metaproj):
272 if not self.connect(): return None 273 return loads(self.server.GetProjectsMM(dumps(module),dumps(metaproj)))
274
275 - def GetProjects(self,metaproject_id):
276 if not self.connect(): return None 277 return loads(self.server.GetProjects(metaproject_id))
278
279 - def GetProjectDependencies(self,project_id,metaproject_id):
280 if not self.connect(): return None 281 return loads(self.server.GetProjectDependencies(project_id,metaproject_id)) 282
283 - def GetServices(self,project_id):
284 if not self.connect(): return None 285 return loads(self.server.GetServices(project_id)) 286
287 - def GetServicesP(self,name,version):
288 if not self.connect(): return None 289 return loads(self.server.GetServicesP(name,dumps(version))) 290
291 - def GetModules(self,project_id):
292 if not self.connect(): return None 293 return loads(self.server.GetModules(project_id)) 294
295 - def GetModulesP(self,name,version):
296 if not self.connect(): return None 297 return loads(self.server.GetModulesP(name,dumps(version))) 298
299 - def GetIceProdModules(self):
300 if not self.connect(): return None 301 return loads(self.server.GetIceProdModules()) 302
303 - def GetParameters(self,module_id):
304 if not self.connect(): return None 305 return loads(self.server.GetParameters(module_id)) 306
307 - def fetch_metaproject_list(self):
308 if not self.connect(): return None 309 return loads(self.server.fetch_metaproject_list()) 310
311 - def fetch_project_list(self,metaproject_id):
312 if not self.connect(): return None 313 return loads(self.server.fetch_project_list(metaproject_id)) 314
315 - def fetch_project(self,id):
316 if not self.connect(): return None 317 return loads(self.server.fetch_project(id))
318
319 - def fetch_project_id(self,pname,pversion):
320 if not self.connect(): return None 321 return loads(self.server.fetch_project_id(name,dumps(pversion)))
322
323 - def fetch_service_id(self,service,pid):
324 if not self.connect(): return None 325 return self.server.fetch_service_id(dumps(service),pid) 326
327 - def fetch_module_id(self,module,mid):
328 if not self.connect(): return None 329 return self.server.fetch_module_id(dumps(module),mid) 330
331 - def fetch_project_dependencies(self,project_id,metaproject_id):
332 if not self.connect(): return None 333 return loads(self.server.fetch_project_dependencies(project_id,metaproject_id)) 334
335 - def fetch_modules_from_project_id(self,project_id):
336 if not self.connect(): return None 337 return loads(self.server.fetch_modules_from_project_id(project_id))
338
339 - def fetch_modules_for_project(self,name,version):
340 if not self.connect(): return None 341 return loads(self.server.fetch_modules_for_project(name,dumps(version))) 342
343 - def fetch_services_for_project(self,name,version):
344 if not self.connect(): return None 345 return loads(self.server.fetch_services_for_project(name,dumps(version))) 346
347 - def fetch_module_parameters(self,module_id):
348 if not self.connect(): return None 349 return loads(self.server.fetch_module_parameters(module_id)) 350
351 - def fetch_service_parameters(self,module_id):
352 if not self.connect(): return None 353 return loads(self.server.fetch_service_parameters(module_id)) 354