Changeset 058f58e for fedd/fedd_client.py
- Timestamp:
- Nov 20, 2008 7:14:58 PM (15 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
- Children:
- cfabc40
- Parents:
- c922f23
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/fedd_client.py
rc922f23 r058f58e 21 21 22 22 from fedd_util import fedid, fedd_ssl_context, pack_soap, unpack_soap, \ 23 pack_id, unpack_id, encapsulate_binaries, decapsulate_binaries 23 pack_id, unpack_id, encapsulate_binaries, decapsulate_binaries, \ 24 service_caller 25 from service_error import * 24 26 25 27 from optparse import OptionParser, OptionValueError … … 190 192 def __init__(self, pre): 191 193 """ 192 Specialize the class for the pr cmethod194 Specialize the class for the pre method 193 195 """ 194 196 self.RequestMessage = globals()["%sRequestMessage" % pre] … … 197 199 self.ResponseBody="%sResponseBody" % pre 198 200 self.method = pre 201 202 method_call = getattr(feddServiceLocator().getfeddPortType(), 203 self.method, None) 204 if method_call: 205 # The pre method is a fedd external service 206 self.caller = service_caller(self.method, 'getfeddPortType', 207 feddServiceLocator, self.RequestMessage, self.RequestBody) 208 else: 209 # The pre method is a fedd internal service 210 self.caller = service_caller(self.method, 211 'getfeddInternalPortType', feddInternalServiceLocator, 212 self.RequestMessage, self.RequestBody) 213 199 214 self.RPCException = fedd_rpc.RPCException 200 215 … … 265 280 266 281 if transport == "soap": 267 loc = feddServiceLocator();268 port = loc.getfeddPortType(url,269 transport=M2Crypto.httpslib.HTTPSConnection,270 transdict={ 'ssl_context' : context },271 tracefile=tracefile)272 method_call = getattr(port, self.method, None)273 274 if not method_call:275 loc = feddInternalServiceLocator();276 port = loc.getfeddInternalPortType(url,277 transport=M2Crypto.httpslib.HTTPSConnection,278 transdict={ 'ssl_context' : context },279 tracefile=tracefile)280 method_call = getattr(port, self.method, None)281 if not method_call:282 raise RuntimeError("Can't find method: %s" % self.method)283 284 req = self.RequestMessage()285 286 set_req = getattr(req, "set_element_%s" % self.RequestBody, None)287 set_req(pack_soap(req, self.RequestBody, req_dict))288 289 282 if serialize_only: 290 283 sw = SoapWriter() … … 292 285 print str(sw) 293 286 sys.exit(0) 294 295 try: 296 method_call = getattr(port, self.method, None) 297 resp = method_call(req) 298 except ZSI.ParseException, e: 299 raise RuntimeError("Malformed response (XMLPRC?): %s" % e) 300 except ZSI.FaultException, e: 301 resp = e.fault.detail[0] 302 303 if resp: 304 resp_call = getattr(resp, "get_element_%s" %self.ResponseBody, 305 None) 306 if resp_call: 307 resp_body = resp_call() 308 if ( resp_body != None): 309 try: 310 return unpack_soap(resp_body) 311 except RuntimeError, e: 312 raise RuntimeError("Bad response. %s" % e.message) 313 elif 'get_element_FeddFaultBody' in dir(resp): 314 resp_body = resp.get_element_FeddFaultBody() 315 if resp_body != None: 316 try: 317 fb = unpack_soap(resp_body) 318 except RuntimeError, e: 319 raise RuntimeError("Bad response. %s" % e.message) 320 raise self.RPCException(fb) 321 else: 322 raise RuntimeError("No body in response!?") 323 else: 324 raise RuntimeError("No response?!?") 287 else: 288 try: 289 resp = self.caller.call_soap_service(url, req_dict, 290 context=context, tracefile=tracefile) 291 except service_error, e: 292 raise self.RPCException( {'code': e.code, 'desc': e.desc }) 325 293 elif transport == "xmlrpc": 326 294 if serialize_only: … … 328 296 print ser 329 297 sys.exit(0) 330 331 xtransport = SSL_Transport(context) 332 port = ServerProxy(url, transport=xtransport) 333 334 try: 335 method_call = getattr(port, self.method, None) 336 resp = method_call( 337 encapsulate_binaries({ self.RequestBody: req_dict},\ 338 ('fedid',))) 339 except Error, e: 340 resp = { 'FeddFaultBody': \ 341 { 'errstr' : getattr(e, "faultCode", "No fault code"), 342 'desc' : getattr(e, "faultString", "No fault string") }\ 343 } 344 if resp: 345 if resp.has_key(self.ResponseBody): 346 return decapsulate_binaries(resp[self.ResponseBody], 347 ('fedid',)) 348 elif resp.has_key('FeddFaultBody'): 349 raise self.RPCException(resp['FeddFaultBody']) 350 else: 351 raise RuntimeError("No body in response!?") 352 else: 353 raise RuntimeError("No response?!?") 298 else: 299 try: 300 resp = self.caller.call_xmlrpc_service(url, req_dict, 301 context=context, tracefile=tracefile) 302 except service_error, e: 303 raise self.RPCException( {'code': e.code, 'desc': e.desc }) 304 354 305 else: 355 306 raise RuntimeError("Unknown RPC transport: %s" % transport) 307 308 if resp.has_key(self.ResponseBody): 309 return resp[self.ResponseBody] 310 else: 311 raise RuntimeError("No body in response??") 356 312 357 313 # Querying experiment data follows the same control flow regardless of the … … 606 562 for id in eid: 607 563 for k in id.keys(): 608 if k == 'fedid': print "%s: %s" % (k,fedid(bits=id[k])) 609 else: print "%s: %s" % (k, id[k]) 564 print "%s: %s" % (k, id[k]) 610 565 611 566 class split(fedd_rpc):
Note: See TracChangeset
for help on using the changeset viewer.