Ignore:
Timestamp:
Jun 27, 2008 6:34:17 PM (16 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:
0a47d52
Parents:
4f4b977
Message:

basic XMLRPC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/fedd_client.py

    r4f4b977 r329f61d  
    88
    99from M2Crypto import SSL, X509
     10from M2Crypto.m2xmlrpclib import SSL_Transport
    1011import M2Crypto.httpslib
     12
     13from xmlrpclib import ServerProxy, Error, dumps, loads
    1114from ZSI import SoapWriter
    1215
     
    6972
    7073        self.set_defaults(url="https://localhost:23235", anonymous=False,
    71                 serialize_only=False, use_fedid=False, debug=0)
     74                serialize_only=False, transport="soap", use_fedid=False,
     75                debug=0)
    7276
    7377        self.add_option("-a","--anonymous", action="store_true",
     
    108112        self.add_option("-U", "--username", action="store", dest="user",
    109113                type="string", help="Use this username instead of the uid")
     114        self.add_option("-x","--transport", action="store", type="choice",
     115                choices=("xmlrpc", "soap"),
     116                help="Transport for request (xmlrpc|soap) (Default: %default)")
    110117        self.add_option("--trace", action="store_const", dest="tracefile",
    111118                const=sys.stderr, help="Print SOAP exchange to stderr")
     
    230237        else: raise
    231238
    232 loc = feddServiceLocator();
    233 port = loc.getfeddPortType(opts.url,
    234         transport=M2Crypto.httpslib.HTTPSConnection,
    235         transdict={ 'ssl_context' : context },
    236         tracefile=opts.tracefile)
    237 
    238 req = RequestAccessRequestMessage()
    239 
    240239msg = {
    241240        'allocID': pack_id('test alloc'),
     
    268267        msg['user'] = [];
    269268
    270 req.set_element_RequestAccessRequestBody(
    271         pack_soap(req, "RequestAccessRequestBody", msg))
    272 
    273269if opts.debug > 1: print >>sys.stderr, msg
    274270
    275 if opts.serialize_only:
    276     sw = SoapWriter()
    277     sw.serialize(req)
    278     print str(sw)
    279     sys.exit(0)
    280 
    281 try:
    282     resp = port.RequestAccess(req)
    283 except ZSI.FaultException, e:
    284     sys.exit("Fault: %s" % e)
    285 
    286 
    287 if (resp != None):
    288     resp_body = resp.get_element_RequestAccessResponseBody()
    289     if ( resp_body != None):
     271if opts.transport == "soap":
     272    loc = feddServiceLocator();
     273    port = loc.getfeddPortType(opts.url,
     274            transport=M2Crypto.httpslib.HTTPSConnection,
     275            transdict={ 'ssl_context' : context },
     276            tracefile=opts.tracefile)
     277
     278    req = RequestAccessRequestMessage()
     279
     280    req.set_element_RequestAccessRequestBody(
     281            pack_soap(req, "RequestAccessRequestBody", msg))
     282
     283    if opts.serialize_only:
     284        sw = SoapWriter()
     285        sw.serialize(req)
     286        print str(sw)
     287        sys.exit(0)
     288
     289    try:
     290        resp = port.RequestAccess(req)
     291    except ZSI.FaultException, e:
     292        sys.exit("Fault: %s" % e)
     293
     294
     295    if (resp != None):
     296        resp_body = resp.get_element_RequestAccessResponseBody()
     297        if ( resp_body != None):
     298            try:
     299                resp_dict = unpack_soap(resp_body)
     300                if opts.debug > 1: print >>sys.stderr, resp_dict
     301                print_response_as_testbed(resp_dict, opts.label)
     302            except RuntimeError, e:
     303                sys.exit("Bad response. %s" % e.messgae)
     304        else: sys.exit("No body in resonpse!?")
     305    else: sys.exit("No response?!?")
     306elif opts.transport == "xmlrpc":
     307    if opts.serialize_only:
     308        ser = dumps((msg,))
     309        sys.exit(0)
     310
     311    transport = SSL_Transport(context)
     312    port = ServerProxy(opts.url, transport=transport)
     313
     314    try:
     315        resp = port.RequestAccess({ 'RequestAccessRequestBody': msg})
     316        resp, method = loads(resp)
     317    except Error, e:
     318        sys.exit("Fault: %s" % e)
     319
     320
     321    if (resp != None):
    290322        try:
    291             resp_dict = unpack_soap(resp_body)
     323            print resp
     324            resp_dict = resp[0]['RequestAccessResponseBody']
    292325            if opts.debug > 1: print >>sys.stderr, resp_dict
    293326            print_response_as_testbed(resp_dict, opts.label)
    294327        except RuntimeError, e:
    295328            sys.exit("Bad response. %s" % e.messgae)
    296     else: sys.exit("No body in resonpse!?")
    297 else: sys.exit("No response?!?")
     329    else: sys.exit("No response?!?")
Note: See TracChangeset for help on using the changeset viewer.