code: def _parse_desc(node):
      
      desc = ''
      if len(node) == 0:
          return '<p>' + node.text + '</p>'
      for n in node:
          if n.tag == 'p':
              desc += '<p>' + _join_lines(n.text) + '</p>'
          elif n.tag == 'ol' or n.tag == 'ul':
              desc += '<ul>'
              for c in n:
                  if c.tag == 'li':
                      desc += '<li>' + _join_lines(c.text) + '</li>'
                  else:
                      raise ParseError('Expected <li> in <%s>, got <%s>' % (n.tag, c.tag))
              desc += '</ul>'
          else:
              raise ParseError('Expected <p>, <ul>, <ol> in <%s>, got <%s>' % (node.tag, n.tag))
      return desc
docs: A quick'n'dirty description parser