Need advice on how to improve this function

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Matthew Wilson

    #1

    Need advice on how to improve this function

    I wrote a function that converts a tuple of tuples into html. For
    example:

    In [9]: x
    Out[9]:
    ('html',
    ('head', ('title', 'this is the title!')),
    ('body',
    ('h1', 'this is the header!'),
    ('p', 'paragraph one is boring.'),
    ('p',
    'but paragraph 2 ',
    ('a', {'href': 'http://example.com'}, 'has a link'),
    '!')))


    In [10]: as_html(x, sys.stdout)
    <html>

    <head>

    <title>this is the title!</title>

    </head>

    <body>

    <h1>this is the header!</h1>

    <p>paragraph one is boring.</p>

    <p>but paragraph 2 <a href="http://example.com">ha s a link</a>!</p>

    </body>

    </html>


    I'd like to know ways to make it better (more efficient, able to deal
    with enormous-size arguments, etc). How would I write this as a
    generator?

    Here's the definition for as_html:

    def as_html(l, s):
    "Convert a list or tuple into html and write it to stream s."
    if isinstance(l, (tuple, list)):
    tagname = l[0]
    if isinstance(l[1], dict):
    attributes = ' '.join(['%s="%s"' % (k, l[1][k]) for k in l[1]])
    s.write('<%s %s>' % (tagname, attributes))
    else:
    s.write('<%s>' % tagname)
    if tagname in ('html', 'head', 'body'):
    s.write('\n\n')
    for ll in l[1:]:
    as_html(ll, s)
    s.write('</%s>' % tagname)
    if tagname not in ('a', 'b', 'ul'):
    s.write('\n\n')
    elif isinstance(l, str):
    s.write(l)


    All comments welcome. TIA

    --
    A better way of running series of SAS programs:

  • Larry Bates

    #2
    Re: Need advice on how to improve this function

    Matthew Wilson wrote:
    I wrote a function that converts a tuple of tuples into html. For
    example:
    >
    In [9]: x
    Out[9]:
    ('html',
    ('head', ('title', 'this is the title!')),
    ('body',
    ('h1', 'this is the header!'),
    ('p', 'paragraph one is boring.'),
    ('p',
    'but paragraph 2 ',
    ('a', {'href': 'http://example.com'}, 'has a link'),
    '!')))
    >
    >
    In [10]: as_html(x, sys.stdout)
    <html>
    >
    <head>
    >
    <title>this is the title!</title>
    >
    </head>
    >
    <body>
    >
    <h1>this is the header!</h1>
    >
    <p>paragraph one is boring.</p>
    >
    <p>but paragraph 2 <a href="http://example.com">ha s a link</a>!</p>
    >
    </body>
    >
    </html>
    >
    >
    I'd like to know ways to make it better (more efficient, able to deal
    with enormous-size arguments, etc). How would I write this as a
    generator?
    >
    Here's the definition for as_html:
    >
    def as_html(l, s):
    "Convert a list or tuple into html and write it to stream s."
    if isinstance(l, (tuple, list)):
    tagname = l[0]
    if isinstance(l[1], dict):
    attributes = ' '.join(['%s="%s"' % (k, l[1][k]) for k in l[1]])
    s.write('<%s %s>' % (tagname, attributes))
    else:
    s.write('<%s>' % tagname)
    if tagname in ('html', 'head', 'body'):
    s.write('\n\n')
    for ll in l[1:]:
    as_html(ll, s)
    s.write('</%s>' % tagname)
    if tagname not in ('a', 'b', 'ul'):
    s.write('\n\n')
    elif isinstance(l, str):
    s.write(l)
    >
    >
    All comments welcome. TIA
    >
    Before you put too much work into this you might want to take a look
    at HTMLgen: http://www.python.net/crew/friedrich...html/main.html

    -Larry

    Comment

    • Fredrik Lundh

      #3
      Re: Need advice on how to improve this function

      Matthew Wilson wrote:
      I'd like to know ways to make it better (more efficient, able to deal
      with enormous-size arguments, etc). How would I write this as a
      generator?
      what makes you think that a generator would be the right tool for this
      task? what's the use case?

      (btw, generating "enormous-size" html pages strikes me as a rather
      pointless exercise...)

      </F>

      Comment

      • Gabriel Genellina

        #4
        Re: Need advice on how to improve this function

        At Monday 21/8/2006 12:03, Larry Bates wrote:
        I wrote a function that converts a tuple of tuples into html. For
        example:
        I'd like to know ways to make it better (more efficient, able to deal
        with enormous-size arguments, etc). How would I write this as a
        generator?
        >Before you put too much work into this you might want to take a look
        >at HTMLgen: http://www.python.net/crew/friedrich...html/main.html
        Another very good library is <http://dustman.net/andy/python/HyperText>
        (Don't be afraid of the date - it's just that HTML standards haven't
        changed very much lately :) )



        Gabriel Genellina
        Softlab SRL





        _______________ _______________ _______________ _____
        Preguntá. Respondé. Descubrí.
        Todo lo que querías saber, y lo que ni imaginabas,
        está en Yahoo! Respuestas (Beta).
        ¡Probalo ya!


        Comment

        Working...