Changeset 329f61d for fedd/fedd.py
- Timestamp:
- Jun 27, 2008 6:34:17 PM (16 years ago)
- Branches:
- axis_example, compt_changes, info-ops, master, version-1.30, version-2.00, version-3.01, version-3.02
- Children:
- 0a47d52
- Parents:
- 4f4b977
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/fedd.py
r4f4b977 r329f61d 10 10 from M2Crypto import SSL 11 11 from M2Crypto.SSL.SSLServer import SSLServer 12 import xmlrpclib 12 13 13 14 from optparse import OptionParser … … 27 28 self.impl = impl 28 29 29 class fedd_ handler(BaseHTTPRequestHandler):30 class fedd_soap_handler(BaseHTTPRequestHandler): 30 31 server_version = "ZSI/2.0 fedd/0.1 " + BaseHTTPRequestHandler.server_version 31 32 namespace = 'http://www.isi.edu/faber/fedd.wsdl'33 methods = {34 'RequestAccess': 'soap_RequestAccess',35 }36 32 37 33 … … 59 55 """Confirm that this class implements the namespace and SOAP method""" 60 56 root = ps.body_root 61 if root.namespaceURI != fedd_handler.namespace:57 if root.namespaceURI != self.server.impl.soap_namespace: 62 58 self.send_fault(Fault(Fault.Client, 63 59 'Unknown namespace "%s"' % root.namespaceURI)) 64 60 return False 65 if not fedd_handler.methods.has_key(root.localName): 66 self.send_fault(Fault(Fault.Client, 'Unknown operation "%s"' % \67 root.localName))61 62 if getattr(root, 'localName', None) == None: 63 self.send_fault(Fault(Fault.Client, 'No method"')) 68 64 return False 69 65 return True … … 84 80 if not self.check_method(ps): return 85 81 try: 86 # We know this will work because check_method passed above 87 method = getattr(self.server.impl, 88 fedd_handler.methods[ps.body_root.localName]) 89 resp = method(ps, fedid(cert=self.request.get_peer_cert())) 82 resp = self.server.impl.soap_dispatch(ps.body_root.localName, ps, 83 fedid(cert=self.request.get_peer_cert())) 90 84 except Fault, f: 91 85 self.send_fault(f) … … 97 91 self.send_xml(str(sw)) 98 92 93 class fedd_xmlrpc_handler(BaseHTTPRequestHandler): 94 server_version = "ZSI/2.0 fedd/0.1 " + BaseHTTPRequestHandler.server_version 95 96 def send_xml(self, text, code=200): 97 """Send an XML document as reply""" 98 self.send_response(code) 99 self.send_header('Content-type', 'text/xml; charset="utf-8"') 100 self.send_header('Content-Length', str(len(text))) 101 self.end_headers() 102 self.wfile.write(text) 103 self.wfile.flush() 104 105 def do_POST(self): 106 """Treat an HTTP POST request as an XMLRPC service call""" 107 108 resp = None 109 data = None 110 cl = int(self.headers['content-length']) 111 data = self.rfile.read(cl) 112 params, method = xmlrpclib.loads(data) 113 114 try: 115 resp = self.server.impl.xmlrpc_dispatch(method, params, 116 fedid(cert=self.request.get_peer_cert())) 117 data = xmlrpclib.dumps((resp,), methodresponse=True) 118 except Fault, f: 119 xf = xmlrpclib.Fault(f.code, f.string) 120 data = xmlrpclib.dumps(xf, methodresponse=True) 121 resp = None 122 except xmlrpclib.Fault, f: 123 data = xmlrpclib.dumps(f, methodresponse=True) 124 resp = None 125 126 self.send_xml(data) 127 128 99 129 class fedd_opts(OptionParser): 100 130 """Encapsulate option processing in this class, rather than in main""" … … 103 133 version="0.1") 104 134 105 self.set_defaults(host="localhost", port=23235, debug=0) 135 self.set_defaults(host="localhost", port=23235, 136 transport="soap",debug=0) 106 137 107 138 self.add_option("-d", "--debug", action="count", dest="debug", … … 113 144 self.add_option("-p", "--port", action="store", type="int", 114 145 dest="port", help="Port to listen on (default %default)") 146 self.add_option("-x","--transport", action="store", type="choice", 147 choices=("xmlrpc", "soap"), 148 help="Transport for request (xmlrpc|soap) (Default: %default)") 115 149 self.add_option("--trace", action="store_const", dest="tracefile", 116 150 const=sys.stderr, help="Print SOAP exchange to stderr") … … 140 174 raise 141 175 142 s = fedd_server(SOAP_port, fedd_handler, ctx, impl) 176 if opts.transport == "soap": 177 s = fedd_server(SOAP_port, fedd_soap_handler, ctx, impl) 178 elif opts.transport == "xmlrpc": 179 s = fedd_server(SOAP_port, fedd_xmlrpc_handler, ctx, impl) 180 else: 181 s = None 182 143 183 s.serve_forever()
Note: See TracChangeset
for help on using the changeset viewer.