Ignore:
Timestamp:
Nov 20, 2008 7:14:58 PM (15 years ago)
Author:
Ted Faber <faber@…>
Branches:
axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
Children:
cfabc40
Parents:
c922f23
Message:

Unify the code for calling SOAP and XMLRPC services into a couple classes.
Before there were slightly different semantics everywhere.

Also make the handlers classes rather than the output of stub compiling
functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd_access.py

    rc922f23 r058f58e  
    5252    id_list_attrs = ("restricted",)
    5353
    54     proxy_request, proxy_xmlrpc_request = make_service_callers('RequestAccess',
    55             'getfeddPortType', RequestAccessRequestMessage,
    56             'RequestAccessRequestBody')
     54    proxy_RequestAccess= \
     55            service_caller('RequestAccess', 'getfeddPortType',
     56                    feddServiceLocator, RequestAccessRequestMessage,
     57                    'RequestAccessRequestBody')
    5758
    5859    def __init__(self, config=None):
     
    153154
    154155        self.soap_services = {\
    155             'RequestAccess': make_soap_handler(\
     156            'RequestAccess': soap_handler(\
    156157                RequestAccessRequestMessage.typecode,\
    157158                self.RequestAccess, RequestAccessResponseMessage,\
    158159                "RequestAccessResponseBody"), \
    159             'ReleaseAccess': make_soap_handler(\
     160            'ReleaseAccess': soap_handler(\
    160161                ReleaseAccessRequestMessage.typecode,\
    161162                self.ReleaseAccess, ReleaseAccessResponseMessage,\
     
    163164            }
    164165        self.xmlrpc_services =  {\
    165             'RequestAccess': make_xmlrpc_handler(\
     166            'RequestAccess': xmlrpc_handler(\
    166167                self.RequestAccess, "RequestAccessResponseBody"),\
    167             'ReleaseAccess': make_xmlrpc_handler(\
     168            'ReleaseAccess': xmlrpc_handler(\
    168169                self.ReleaseAccess, "ReleaseAccessResponseBody")\
    169170            }
     
    698699            return resp
    699700        else:
    700             p_fault = None      # Any SOAP failure (sent unless XMLRPC works)
    701             try:
    702                 # Proxy the request using SOAP
    703                 self.log.debug("Sending proxy message to %s" % dt)
    704                 resp = self.proxy_request(dt, req, feddServiceLocator,
     701            resp = self.proxy_RequestAccess.call_service(dt, req,
    705702                        self.proxy_cert_file, self.proxy_cert_pwd,
    706703                        self.proxy_trusted_certs)
    707                 if resp.has_key('RequestAccessResponseBody'):
    708                     return resp['RequestAccessResponseBody']
    709                 elif resp.has_key('Fedd_FaultBody'):
    710                     raise service_error(resp['FeddFaultBody']['code'],
    711                             resp['FeddFaultBody']['desc'])
    712             except service_error, e:
    713                 if e.code == service_error.proxy: p_fault = None
    714                 else: raise
    715             except ZSI.FaultException, f:
    716                 p_fault = f.fault.detail[0]
    717                    
    718 
    719             # If we could not get a valid SOAP response to the request above,
    720             # try the same address using XMLRPC and let any faults flow back
    721             # out.
    722             if p_fault == None:
    723                 resp = self.proxy_xmlrpc_request(dt, req, self.proxy_cert_file,
    724                     self.proxy_cert_pwd, self.proxy_trusted_certs)
    725                 if resp.has_key('RequestAccessResponseBody'):
    726                     return resp['RequestAccessResponseBody']
     704            if resp.has_key('RequestAccessResponseBody'):
     705                return resp['RequestAccessResponseBody']
    727706            else:
    728                 # Build the fault
    729                 body = p_fault.get_element_FeddFaultBody()
    730                 if body != None:
    731                     raise service_error(body.get_element_code(),
    732                                 body.get_element_desc());
    733                 else:
    734                     raise service_error(\
    735                             service_error.proxy,
    736                             "Undefined fault from proxy??");
     707                return None
    737708
    738709    def ReleaseAccess(self, req, fid):
Note: See TracChangeset for help on using the changeset viewer.