Source code for soapbox.soap11

# -*- coding: utf-8 -*-
################################################################################

'''
'''

################################################################################
# Imports


from lxml import etree

from . import xsd


################################################################################
# Constants


ENVELOPE_NAMESPACE = 'http://schemas.xmlsoap.org/soap/envelope/'
BINDING_NAMESPACE = 'http://schemas.xmlsoap.org/wsdl/soap/'
CONTENT_TYPE = 'text/xml'


################################################################################
# Functions


[docs]def determin_soap_action(request): ''' ''' if request.META.get('HTTP_SOAPACTION'): return request.META.get('HTTP_SOAPACTION').replace('"', '') elif request.META.get('HTTP_ACTION'): return request.META.get('HTTP_ACTION').replace('"', '') else: return None
[docs]def get_error_response(code, message): ''' ''' fault = Fault(faultcode='Client', faultstring=message) envelope = Envelope() envelope.Body = Body(Fault=fault) return envelope.xml('Envelope', namespace=ENVELOPE_NAMESPACE, elementFormDefault=xsd.ElementFormDefault.QUALIFIED)
[docs]def parse_fault_message(fault): ''' ''' return fault.faultcode, fault.faultstring
[docs]def build_header(soapAction): ''' ''' return {'content-type': CONTENT_TYPE, 'SOAPAction': soapAction} ################################################################################ # Classes
[docs]class Code: ''' ''' CLIENT = 'Client' SERVER = 'Server'
[docs]class Fault(xsd.ComplexType): ''' SOAP Envelope Fault. ''' faultcode = xsd.Element(xsd.String, namespace='') faultstring = xsd.Element(xsd.String, namespace='')
[docs]class Body(xsd.ComplexType): ''' SOAP Envelope Body. ''' message = xsd.ClassNamedElement(xsd.NamedType, minOccurs=0) Fault = xsd.Element(Fault, minOccurs=0)
[docs] def content(self): ''' ''' return etree.tostring(self._xmlelement[0], pretty_print=True)
[docs]class Envelope(xsd.ComplexType): ''' SOAP Envelope. ''' Header = xsd.Element(Header, nillable=True) Body = xsd.Element(Body) @classmethod
[docs] def response(cls, tagname, return_object): ''' ''' envelope = Envelope() envelope.Body = Body() envelope.Body.message = xsd.NamedType(name=tagname, value=return_object) return envelope.xml('Envelope', namespace=ENVELOPE_NAMESPACE, elementFormDefault=xsd.ElementFormDefault.QUALIFIED)
SCHEMA = xsd.Schema( targetNamespace=ENVELOPE_NAMESPACE, elementFormDefault=xsd.ElementFormDefault.QUALIFIED, complexTypes=[Header, Body, Envelope, Fault], ) ################################################################################ # vim:et:ft=python:nowrap:sts=4:sw=4:ts=4