def fromWSDL(self, wsdl):
assert isinstance(wsdl, WSDLTools.WSDL), '<STR_LIT>'<EOL>if len(wsdl.services) == <NUM_LIT:0>:<EOL><INDENT>raise WsdlGeneratorError('<STR_LIT>')<EOL><DEDENT>self.reset() <EOL>self.wsdl = wsdl<EOL>self.setUpHeader()<EOL>self.setUpImports()<EOL>for service in wsdl.services:<EOL><INDENT>sd = self._service_class(service.name)<EOL>self._services[service.name] = sd<EOL>for port in service.ports:<EOL><INDENT>desc = BindingDescription(wsdl=wsdl)<EOL>try:<EOL><INDENT>desc.setUp(port.getBinding())<EOL><DEDENT>except Wsdl2PythonError as ex:<EOL><INDENT>continue<EOL><DEDENT>for soc in desc.operations:<EOL><INDENT>if not soc.hasInput(): continue<EOL>self.messages.append(MessageWriter())<EOL>self.messages[-<NUM_LIT:1>].setUp(soc, port, input=True)<EOL>if soc.hasOutput():<EOL><INDENT>self.messages.append(MessageWriter())<EOL>self.messages[-<NUM_LIT:1>].setUp(soc, port, input=False)<EOL><DEDENT><DEDENT>for e in port.extensions:<EOL><INDENT>if isinstance(e, WSDLTools.SoapAddressBinding):<EOL><INDENT>sd.location = e.location<EOL><DEDENT><DEDENT>self.setUpMethods(port)<EOL><DEDENT>self.setUpClassDef(service)<EOL>self.setUpInitDef(service)<EOL><DEDENT>
setup the service description from WSDL,
        should not need to override.