Guest User

Untitled

a guest
May 4th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. '''
  2. Implement a web-based interface for viewing and updating class instances
  3. stored in a shelve; the shelve lives on server (same machine if localhost)
  4. '''
  5.  
  6. import cgi, sys, os
  7. import shelve, html
  8. shelvename = 'class-shelve'
  9. fieldnames = ('name', 'age', 'job', 'pay')
  10.  
  11. form = cgi.FieldStorage()
  12. print('Content-type: text/html')
  13. sys.path.insert(0, os.getcwd())
  14.  
  15. # main html template
  16. replyhtml = """
  17. <html>
  18. <title>People Input Form</title>
  19. <body>
  20. <form method=POST action=peoplecgi.py>
  21. <table>
  22. <tr><th>key<td><input type=text name=key value="%(key)">
  23. $ROWS$
  24. </table>
  25. <p>
  26. <input type=submit value="Fetch", name=action>
  27. <input type=submit value="Update", name=action>
  28. </form>
  29. </body></html>
  30. """
  31. # insert html for data rows at $ROWS$
  32. rowhtml = '<tr><th>%s<td><input type=text name=%s value="%%(%s)s">n'
  33. rowshtml = ""
  34. for fieldname in fieldnames:
  35. rowshtml += (rowhtml % ((fieldname,)*3))
  36. replyhtml = replyhtml.replace('$ROWS$', rowshtml)
  37.  
  38.  
  39. def htmlize(adict):
  40. new = adict.copy()
  41. for field in fieldnames:
  42. value = new[field]
  43. new[field] = html.escape(repr(value))
  44. return new
  45.  
  46. def fetchRecord(db, form):
  47. try:
  48. key = form['key'].value
  49. record = db[key]
  50. fields = record.__dict__
  51. fields['key'] = key
  52. except:
  53. fields = dict.fromkeys(fieldnames, '?')
  54. fields['key'] = 'Missing or invalid key!'
  55. return fields
  56.  
  57. def updateRecord(db, form):
  58. if not 'key' in form:
  59. fields = dict.fromkeys(fieldnames, '?')
  60. fields['key'] = 'Missing key input!'
  61. else:
  62. key = form['key'].value
  63. if key in db:
  64. record = db[key]
  65. else:
  66. from person_start import Person
  67. record = Person(name='?', age='?')
  68. for field in fieldnames:
  69. setattr(record, field, eval(form[field].value))
  70. db[key] = record
  71. fields = record.__dict__
  72. fields['key'] = key
  73. return fields
  74.  
  75. db = shelve.open(shelvename)
  76. action = form['action'].value if 'action' in form else None
  77. if action == 'Fetch':
  78. fields = fetchRecord(db, form)
  79. elif action == 'Update':
  80. fields = updateRecord(db, form)
  81. else:
  82. fields = dict.fromkeys(fieldnames, '?')
  83. fields['key'] = 'Missing or invalid action!'
  84. db.close()
  85. print(replyhtml % htmlize(fields))
  86.  
  87. <tr><th>key<td><input type=text name=key value="%(key)">
  88.  
  89. <tr><th>key<td><input type=text name=key value="%(key)s">
Add Comment
Please, Sign In to add comment