'Get a textual description of the service for which this object represents.
@return: A textual description.
@rtype: str'

def description(self):

    s = []
    indent = (lambda n: ('\n%*s' % ((n * 3), '    ')))
    s.append(('Service    (    %s    )    tns="%s"' % (self.service.name, self.wsdl.tns[1])))
    s.append(indent(1))
    s.append(('Prefixes    (%d)' % len(self.prefixes)))
    for p in self.prefixes:
        s.append(indent(2))
        s.append(('%s    =    "%s"' % p))
    s.append(indent(1))
    s.append(('Ports    (%d):' % len(self.ports)))
    for p in self.ports:
        s.append(indent(2))
        s.append(('(%s)' % p[0].name))
        s.append(indent(3))
        s.append(('Methods    (%d):' % len(p[1])))
        for m in p[1]:
            sig = []
            s.append(indent(4))
            sig.append(m[0])
            sig.append('(')
            for p in m[1]:
                sig.append(self.xlate(p[1]))
                sig.append('    ')
                sig.append(p[0])
                sig.append(',    ')
            sig.append(')')
            try:
                s.append(''.join(sig))
            except:
                pass
        s.append(indent(3))
        s.append(('Types    (%d):' % len(self.types)))
        for t in self.types:
            s.append(indent(4))
            s.append(self.xlate(t[0]))
    s.append('\n\n')
    return ''.join(s)
