<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi all, first time post here.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ve been following this library for a few weeks and finally decided to try to make use of it for a project.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’ve got an application that needs to receive state updates from a communication bus.  The com bus should be able to notify my application through an exposed SOAP service. 
<o:p></o:p></p>
<p class="MsoNormal">Apparently I have a misunderstanding of the library’s API as I have yet to demonstrate a successful test-case.  Any insight as to why the below exception is being thrown would be greatly appreciated.
<o:p></o:p></p>
<p class="MsoNormal">Here is my test case:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">##SOAP service test suite.<o:p></o:p></p>
<p class="MsoNormal">##File: test.py<o:p></o:p></p>
<p class="MsoNormal">import unittest<o:p></o:p></p>
<p class="MsoNormal">from lxml import etree<o:p></o:p></p>
<p class="MsoNormal">from StringIO import StringIO<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">from spyne.application import Application<o:p></o:p></p>
<p class="MsoNormal">from spyne.service import ServiceBase<o:p></o:p></p>
<p class="MsoNormal">from spyne.protocol.soap import Soap11<o:p></o:p></p>
<p class="MsoNormal">from spyne.decorator import srpc, rpc<o:p></o:p></p>
<p class="MsoNormal">from spyne.model.complex import ComplexModel<o:p></o:p></p>
<p class="MsoNormal">from spyne.model.primitive import String, Unicode<o:p></o:p></p>
<p class="MsoNormal">from spyne.server.wsgi import WsgiApplication<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">import logging<o:p></o:p></p>
<p class="MsoNormal">logging.basicConfig(level=logging.INFO)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">#complex model definition, parameters that will be recieved in SOAP call,<o:p></o:p></p>
<p class="MsoNormal">#idea is to save model to the DB.<o:p></o:p></p>
<p class="MsoNormal">class IncidentParams(ComplexModel):<o:p></o:p></p>
<p class="MsoNormal">    __type_name__ = 'IncidentParams'<o:p></o:p></p>
<p class="MsoNormal">    __namespace__ = 'tns'<o:p></o:p></p>
<p class="MsoNormal">    IncNum = Unicode.customize(<o:p></o:p></p>
<p class="MsoNormal">        max_len = 15,<o:p></o:p></p>
<p class="MsoNormal">        pattern = 'INC[0-9]+',<o:p></o:p></p>
<p class="MsoNormal">        type_name = 'MajorIncidentNumber')<o:p></o:p></p>
<p class="MsoNormal">    number = IncNum<o:p></o:p></p>
<p class="MsoNormal">    <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">def start_response(code, headers):<o:p></o:p></p>
<p class="MsoNormal">    print(code, headers)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">class TestService(unittest.TestCase):<o:p></o:p></p>
<p class="MsoNormal">    def test_soap_bare_with_complexInput(self):<o:p></o:p></p>
<p class="MsoNormal">        #service definition<o:p></o:p></p>
<p class="MsoNormal">        class IncidentService(ServiceBase):<o:p></o:p></p>
<p class="MsoNormal">            @srpc(IncidentParams, _returns=IncidentParams)<o:p></o:p></p>
<p class="MsoNormal">            def create_incident(the_incident):<o:p></o:p></p>
<p class="MsoNormal">                #This RPC logs the input and passes it through as the return value.<o:p></o:p></p>
<p class="MsoNormal">                s = etree.tostring(the_incident, pretty_print=True)<o:p></o:p></p>
<p class="MsoNormal">                logging.info("create_incident: Parameters:%s" % s)<o:p></o:p></p>
<p class="MsoNormal">                #Code_to_save_incident_to_DB(the_incident)<o:p></o:p></p>
<p class="MsoNormal">                return the_incident<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        app = Application([IncidentService], 'tns', in_protocol=Soap11(),<o:p></o:p></p>
<p class="MsoNormal">                            out_protocol=Soap11(cleanup_namespaces=True))<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        req = """<o:p></o:p></p>
<p class="MsoNormal">        <senv:Envelope  xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/"<o:p></o:p></p>
<p class="MsoNormal">                        xmlns:tns="tns"><o:p></o:p></p>
<p class="MsoNormal">            <senv:Body><o:p></o:p></p>
<p class="MsoNormal">                <tns:create_incident><o:p></o:p></p>
<p class="MsoNormal">                    <tns:IncidentParams><o:p></o:p></p>
<p class="MsoNormal">                        <s0:number>INC0000001</s0:number><o:p></o:p></p>
<p class="MsoNormal">                    </tns:IncidentParams><o:p></o:p></p>
<p class="MsoNormal">                </tns:create_incident><o:p></o:p></p>
<p class="MsoNormal">            </senv:Body><o:p></o:p></p>
<p class="MsoNormal">        </senv:Envelope><o:p></o:p></p>
<p class="MsoNormal">        """<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        server = WsgiApplication(app)<o:p></o:p></p>
<p class="MsoNormal">        resp = etree.fromstring(''.join(server({<o:p></o:p></p>
<p class="MsoNormal">            'QUERY_STRING': '',<o:p></o:p></p>
<p class="MsoNormal">            'PATH_INFO': '/create',<o:p></o:p></p>
<p class="MsoNormal">            'REQUEST_METHOD': 'GET',<o:p></o:p></p>
<p class="MsoNormal">            'SERVER_NAME': 'localhost',<o:p></o:p></p>
<p class="MsoNormal">            'wsgi.input': StringIO(req)<o:p></o:p></p>
<p class="MsoNormal">        }, start_response, "http://null")))<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        print etree.tostring(resp, pretty_print=True)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">if __name__ == '__main__':<o:p></o:p></p>
<p class="MsoNormal">    unittest.main()<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Running the attached script from the interpreter throws this uncaught exception:
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Traceback (most recent call last):<o:p></o:p></p>
<p class="MsoNormal">  File "test.py", line 46, in test_soap_bare_with_complexInput<o:p></o:p></p>
<p class="MsoNormal">    out_protocol=Soap11(cleanup_namespaces=True))<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\application.py", line 104, in __init__<o:p></o:p></p>
<p class="MsoNormal">    self.in_protocol.set_app(self)<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\protocol\xml\_base.py", line 413, in set_app<o:p></o:p></p>
<p class="MsoNormal">    xml_schema.build_validation_schema()<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\_base.py", line 170, in build_validation_schema<o:p></o:p></p>
<p class="MsoNormal">    self.build_schema_nodes(with_schema_location=True)<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\_base.py", line 137, in build_schema_nodes<o:p></o:p></p>
<p class="MsoNormal">    self.add(cls, set())<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\_base.py", line 127, in add<o:p></o:p></p>
<p class="MsoNormal">    handler(self, cls, tags)<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\model.py", line 61, in simple_add<o:p></o:p></p>
<p class="MsoNormal">    interface.get_restriction_tag(cls)<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\_base.py", line 131, in get_restriction_tag<o:p></o:p></p>
<p class="MsoNormal">    return handler(self, cls)<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\model.py", line 246, in unicode_get_restriction_tag<o:p></o:p></p>
<p class="MsoNormal">    restriction = simple_get_restriction_tag(interface, cls)<o:p></o:p></p>
<p class="MsoNormal">  File "c:\Python27\lib\site-packages\spyne-2.10.10-py2.7.egg\spyne\interface\xml_schema\model.py", line 49, in simple_get_restriction_tag<o:p></o:p></p>
<p class="MsoNormal">    restriction.set('base', cls.__extends__.get_type_name_ns(<o:p></o:p></p>
<p class="MsoNormal">AttributeError: 'NoneType' object has no attribute 'get_type_name_ns'<o:p></o:p></p>
</div>

<DIV>
NOTICE: This e-mail message and any attachments are confidential and intended solely for use of the intended recipient. If you are not the intended recipient, you should not review, retransmit, convert to hard copy, copy, use or disseminate this e-mail or any attachments to it. If you have received this e-mail in error, please immediately notify us by return e-mail and delete this message and any attachments from your computer system. Please note that if this e-mail message contains a forwarded message or is a reply to a prior message, some or all of the contents of this message or any attachments may not have been produced by the sender. This notice is automatically appended to each e-mail message leaving the senders e-mail domain. Thank you.<BR>
</DIV></body>
</html>