64 lines
1.6 KiB
Python
64 lines
1.6 KiB
Python
from wsme.controller import register_protocol, pexpose
|
|
|
|
from xml.etree import ElementTree as et
|
|
|
|
|
|
|
|
class SoapProtocol(object):
|
|
name = 'soap'
|
|
content_types = ['application/soap+xml']
|
|
|
|
ns = {
|
|
"soap": "http://www.w3.org/2001/12/soap-envelope"
|
|
}
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
def accept(self, root, req):
|
|
if req.headers['Content-Type'] in self.content_types:
|
|
return True
|
|
if req.path.endswith('.wsdl'):
|
|
return True
|
|
return False
|
|
|
|
def extract_path(self, request):
|
|
if request.path.endswith('.wsdl'):
|
|
print "Here !!"
|
|
return ['_protocol', 'soap', 'api_wsdl']
|
|
|
|
def read_arguments(self, request, arguments):
|
|
if arguments is None:
|
|
return {}
|
|
return {}
|
|
|
|
def encode_result(self, result, return_type):
|
|
return ""
|
|
|
|
def make_header(self):
|
|
header = et.Element('{%(soap)s}Header' % self.ns)
|
|
return header
|
|
|
|
def make_body(self):
|
|
body = et.Element('{%(soap)s}Body' % self.ns)
|
|
return body
|
|
|
|
def make_envelope(self):
|
|
env = et.Element('{%(soap)s}Envelope' % self.ns)
|
|
env.append(self.make_header())
|
|
env.append(self.make_body())
|
|
return env
|
|
|
|
def encode_error(self, infos):
|
|
env = self.make_envelope()
|
|
fault = et.Element('{%(soap)s}Fault' % self.ns)
|
|
env.find('{%(soap)s}Body' % self.ns).append(fault)
|
|
return et.tostring(env)
|
|
|
|
@pexpose(contenttype="text/xml")
|
|
def api_wsdl(self):
|
|
return """<wsdl/>"""
|
|
|
|
|
|
register_protocol(SoapProtocol)
|