listing26-4.py 972 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/usr/bin/python
  2. print('Content-type: text/html\n')
  3. import cgitb; cgitb.enable()
  4. import psycopg2
  5. conn = psycopg2.connect('user=foo password=bar dbname=baz')
  6. curs = conn.cursor()
  7. print("""
  8. <html>
  9. <head>
  10. <title>The FooBar Bulletin Board</title>
  11. </head>
  12. <body>
  13. <h1>The FooBar Bulletin Board</h1>
  14. """)
  15. curs.execute('SELECT * FROM messages')
  16. rows = curs.dictfetchall()
  17. toplevel = []
  18. children = {}
  19. for row in rows:
  20. parent_id = row['reply_to']
  21. if parent_id is None:
  22. toplevel.append(row)
  23. else:
  24. children.setdefault(parent_id, []).append(row)
  25. def format(row):
  26. print(row['subject'])
  27. try: kids = children[row['id']]
  28. except KeyError: pass
  29. else:
  30. print('<blockquote>')
  31. for kid in kids:
  32. format(kid)
  33. print('</blockquote>')
  34. print('<p>')
  35. for row in toplevel:
  36. format(row)
  37. print("""
  38. </p>
  39. </body>
  40. </html>
  41. """)