Changeset bb3769a for fedd/fedd_proj.py
- Timestamp:
- Jul 16, 2008 11:28:14 AM (16 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
- Children:
- 0c0b13c
- Parents:
- 0a47d52
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/fedd_proj.py
r0a47d52 rbb3769a 20 20 from fedd_services import * 21 21 from fedd_util import * 22 23 if False: 24 _RequestAccessFault_typecode = Struct(pname=("http://www.isi.edu/faber/fedd.wsdl", 'RequestAccessFault'), ofwhat=[ns0.faultType_Def( pname=("http://www.isi.edu/faber/fedd.wsdl", "RequestAccessFaultBody"), aname="_RequestAccessFaultBody", minoccurs=0, maxoccurs=1, nillable=True, encoded=None, typed=True)], pyclass=None) 25 class RequestAccessFault: 26 typecode = _RequestAccessFault_typecode 27 __metaclass__ = pyclass_type 28 def __init__(self, code=0, str="str"): 29 self._RequestAccessFaultBody = None 30 RequestAccessFault.typecode.pyclass=RequestAccessFault 22 31 23 32 class fedd_proj: … … 57 66 return "access_proj('%s', [])" % self.name 58 67 59 60 class parse_error(RuntimeError): 61 """Raised if the configuration file is unparsable""" 62 pass 68 # These are used to make the error reporting independent of the transport. 69 # The XMLRPC and SOAP dispatchers will convert them to transport-specific 70 # errors 71 class server_error(RuntimeError): pass 72 class client_error(RuntimeError): pass 73 # Error parsing config 74 class parse_error(RuntimeError): pass 75 63 76 64 77 def __init__(self, config=None): … … 216 229 rc = subprocess.call(cmd) 217 230 except OSerror, e: 218 raise Fault(Fault.Server,231 raise fedd_proj.server_error( 219 232 "Dynamic project subprocess creation error "+ \ 220 233 "[%s] (%s)" % (cmd[1], e.strerror)) … … 223 236 224 237 if rc != 0: 225 raise Fault(Fault.Server,238 raise fedd_proj.server_error( 226 239 "Dynamic project subprocess error " +\ 227 240 "[%s] (%d)" % (cmd[1], rc)) … … 253 266 ctx = fedd_ssl_context(self.cert_file, tc, password=self.cert_pwd) 254 267 except SSL.SSLError: 255 raise Fault(Fault.Server,"Server certificates misconfigured")268 raise fedd_proj.server_error("Server certificates misconfigured") 256 269 257 270 # Of all the dumbass things. The XMLRPC library in use here won't … … 274 287 resp, method = xmlrpclib.loads(resp) 275 288 except xmlrpclib.Error, e: 276 raise Fault(Fault.Server,"Remote XMLRPC Fault: %s" % e)289 raise fedd_proj.server_error("Remote XMLRPC Fault: %s" % e) 277 290 278 291 if resp[0].has_key('RequestAccessResponseBody'): 279 292 return resp[0]['RequestAccessResponseBody'] 280 293 else: 281 raise Fault(Fault.Server,"Bad proxy response")294 raise fedd_proj.server_error("Bad proxy response") 282 295 283 296 def proxy_request(self, dt, req): … … 295 308 ctx = fedd_ssl_context(self.cert_file, tc, password=self.cert_pwd) 296 309 except SSL.SSLError: 297 raise Fault(Fault.Server,"Server certificates misconfigured")310 raise fedd_proj.server_error("Server certificates misconfigured") 298 311 299 312 loc = feddServiceLocator(); … … 309 322 resp = port.RequestAccess(msg) 310 323 except ZSI.ParseException, e: 311 raise Fault(Fault.Server,"Bad format message (XMLRPC??): %s" %324 raise fedd_proj.server_error("Bad format message (XMLRPC??): %s" % 312 325 str(e)) 313 326 except ZSI.FaultException, e: … … 319 332 return r['RequestAccessResponseBody'] 320 333 else: 321 raise Fault(Fault.Server,"Bad proxy response")334 raise fedd_proj.server_error("Bad proxy response") 322 335 323 336 def permute_wildcards(self, a, p): … … 388 401 fedids = [ u for u in user if isinstance(u, type(fid))] 389 402 if len(fedids) > 1: 390 raise Fault(Fault.Client,403 raise fedd_proj.client_error( 391 404 "User asserting multiple fedids") 392 405 elif len(fedids) == 1 and fedids[0] != fid: 393 raise Fault(Fault.Client,406 raise fedd_proj.client_error( 394 407 "User asserting different fedid") 395 408 project = None … … 397 410 elif principal_type == "project": 398 411 if isinstance(project, type(fid)) and fid != project: 399 raise Fault(Fault.Client,412 raise fedd_proj.client_error( 400 413 "Project asserting different fedid") 401 414 tb = None … … 406 419 print "Found: ", found 407 420 408 if found == None: raise Fault(Fault.Server,"Access denied")421 if found == None: raise fedd_proj.server_error("Access denied") 409 422 410 423 # resolve <dynamic> and <same> in found … … 416 429 found[0].name = project 417 430 else : 418 raise Fault(Fault.Server,431 raise fedd_proj.server_error( 419 432 "Project matched <same> when no project given") 420 433 elif found[0].name == "<dynamic>": … … 425 438 if user_match == "<any>": 426 439 if user != None: found = (found[0], user[0]) 427 else: raise Fault(Fault.Server,440 else: raise fedd_proj.server_error( 428 441 "Matched <same> on anonymous request") 429 442 else: … … 474 487 req = req['RequestAccessRequestBody'] 475 488 else: 476 raise Fault(Fault.Client,"No request!?")489 raise fedd_proj.client_error("No request!?") 477 490 478 491 if req.has_key('destinationTestbed'): … … 492 505 t not in found[0].node_types] 493 506 if len(inaccessible) > 0: 494 raise Fault(Fault.Server,507 raise fedd_proj.server_error( 495 508 "Access denied (nodetypes %s)" % \ 496 509 str(', ').join(inaccessible)) … … 503 516 else: pass # SSH key additions 504 517 else: 505 raise Fault(Fault.Client,"SSH access parameters required")518 raise fedd_proj.client_error("SSH access parameters required") 506 519 507 520 resp = self.build_response(req['allocID'], found, ssh) … … 512 525 # Proxy the request using SOAP 513 526 return self.proxy_request(dt, req) 514 except Fault, f:527 except RuntimeError, f: 515 528 p_fault = f 516 529 … … 519 532 try: 520 533 return self.proxy_xmlrpc_request(dt, req) 521 except Fault: 534 print "here" 535 except RuntimeError: 522 536 # Both failed, return the SOAP error. If somehow that 523 537 # exception is gone, return the XMLRPC one … … 529 543 530 544 msg = self.RequestAccess(unpack_soap(req), fedid) 545 531 546 resp = RequestAccessResponseMessage() 532 533 547 resp.set_element_RequestAccessResponseBody( 534 548 pack_soap(resp, "RequestAccessResponseBody", msg)) 549 535 550 return resp 536 551 537 552 def xmlrpc_RequestAccess(self, params, fid): 538 553 msg = self.RequestAccess(params[0], fedid) 554 539 555 if msg != None: 540 556 return xmlrpclib.dumps(({ "RequestAccessResponseBody": msg },)) 557 else: 558 raise server_error("No response generated?!"); 541 559 542 560 def read_trust(self, trust): … … 709 727 def soap_dispatch(self, method, req, fid): 710 728 if fedd_proj.soap_methods.has_key(method): 711 return getattr(self, fedd_proj.soap_methods[method])(req, fid) 729 try: 730 return getattr(self, fedd_proj.soap_methods[method])(req, fid) 731 except fedd_proj.server_error, e: 732 de = ns0.faultType_Def((ns0.faultType_Def.schema,"RequestAccessFaultBody")).pyclass() 733 de._code=100 734 de._desc="temp" 735 f = Fault(Fault.Server, "Server Test", detail=de) 736 raise f 737 except fedd_proj.client_error, e: 738 raise Fault(Fault.Client, str(e)) 712 739 else: 713 740 raise Fault(Fault.Client, "Unknown method: %s" % method) … … 715 742 def xmlrpc_dispatch(self, method, req, fid): 716 743 if fedd_proj.xmlrpc_methods.has_key(method): 717 return getattr(self, fedd_proj.xmlrpc_methods[method])(req, fid) 744 try: 745 return getattr(self, fedd_proj.xmlrpc_methods[method])(req, fid) 746 except fedd_proj.server_error, e: 747 raise xmlrpclib.Fault("server", str(e)) 748 except fedd_proj.client_error, e: 749 raise xmlrpclib.Fault("client", str(e)) 718 750 else: 719 751 raise xmlrpclib.Fault(100, "Unknown method: %s" % method)
Note: See TracChangeset
for help on using the changeset viewer.